CmsKit - Rafactoring - Change naming UrlSlug to Slug

pull/7226/head
enisn 5 years ago
parent fca418fb3f
commit f27776430d

@ -13,7 +13,7 @@ namespace Volo.CmsKit.Admin.Blogs
public string Name { get; set; }
[Required]
[DynamicMaxLength(typeof(BlogConsts), nameof(BlogConsts.MaxUrlSlugLength))]
public string UrlSlug { get; set; }
[DynamicMaxLength(typeof(BlogConsts), nameof(BlogConsts.MaxSlugLength))]
public string Slug { get; set; }
}
}

@ -9,7 +9,7 @@ namespace Volo.CmsKit.Admin.Blogs
public string Title { get; set; }
public string UrlSlug { get; set; }
public string Slug { get; set; }
public string ShortDescription { get; protected set; }
}
}

@ -17,9 +17,9 @@ namespace Volo.CmsKit.Admin.Blogs
[Required]
[DynamicStringLength(
typeof(BlogPostConsts),
nameof(BlogPostConsts.MaxUrlSlugLength),
nameof(BlogPostConsts.MinUrlSlugLength))]
public string UrlSlug { get; set; }
nameof(BlogPostConsts.MaxSlugLength),
nameof(BlogPostConsts.MinSlugLength))]
public string Slug { get; set; }
[DynamicMaxLength(typeof(BlogPostConsts), nameof(BlogPostConsts.MaxShortDescriptionLength))]
public string ShortDescription { get; set; }

@ -13,7 +13,7 @@ namespace Volo.CmsKit.Admin.Blogs
PagedAndSortedResultRequestDto,
CreateUpdateBlogPostDto>
{
Task<BlogPostDto> GetByUrlSlugAsync(string blogUrlSlug, string urlSlug);
Task<BlogPostDto> GetBySlugAsync(string blogSlug, string slug);
Task SetCoverImageAsync(Guid id, RemoteStreamContent streamContent);

@ -53,11 +53,11 @@ namespace Volo.CmsKit.Admin.Blogs
DeletePolicyName = CmsKitAdminPermissions.BlogPosts.Delete;
}
public virtual async Task<BlogPostDto> GetByUrlSlugAsync(string blogUrlSlug, string urlSlug)
public virtual async Task<BlogPostDto> GetBySlugAsync(string blogSlug, string blogPostSlug)
{
var blog = await BlogRepository.GetByUrlSlugAsync(blogUrlSlug);
var blog = await BlogRepository.GetBySlugAsync(blogSlug);
var blogPost = await BlogPostRepository.GetByUrlSlugAsync(blog.Id, urlSlug);
var blogPost = await BlogPostRepository.GetBySlugAsync(blog.Id, blogPostSlug);
return MapToGetOutputDto(blogPost);
}
@ -73,7 +73,7 @@ namespace Volo.CmsKit.Admin.Blogs
GuidGenerator.Create(),
input.BlogId,
input.Title,
input.UrlSlug,
input.Slug,
input.ShortDescription));
return MapToGetOutputDto(entity);
@ -86,9 +86,9 @@ namespace Volo.CmsKit.Admin.Blogs
blogPost.SetTitle(input.Title);
if (blogPost.UrlSlug != input.UrlSlug)
if (blogPost.Slug != input.Slug)
{
await BlogPostManager.SetSlugUrlAsync(blogPost, input.UrlSlug);
await BlogPostManager.SetSlugUrlAsync(blogPost, input.Slug);
}
MapToEntity(input, blogPost);

@ -53,11 +53,11 @@ namespace Volo.CmsKit.Admin.Blogs
}
[HttpGet]
[Route("{blogUrlSlug}/{urlSlug}")]
[Route("{blogSlug}/{blogPostSlug}")]
[Authorize(CmsKitAdminPermissions.BlogPosts.Default)]
public virtual Task<BlogPostDto> GetByUrlSlugAsync(string blogUrlSlug, string urlSlug)
public virtual Task<BlogPostDto> GetBySlugAsync(string blogSlug, string blogPostSlug)
{
return BlogPostAdminAppService.GetByUrlSlugAsync(blogUrlSlug, urlSlug);
return BlogPostAdminAppService.GetBySlugAsync(blogSlug, blogPostSlug);
}
[HttpGet]

@ -3,6 +3,6 @@
public class BlogConsts
{
public static int MaxNameLength { get; set; } = 64;
public static int MaxUrlSlugLength { get; set; } = 64;
public static int MaxSlugLength { get; set; } = 64;
}
}

@ -4,9 +4,9 @@
{
public static int MaxTitleLength { get; set; } = 64;
public static int MaxUrlSlugLength { get; set; } = 256;
public static int MaxSlugLength { get; set; } = 256;
public static int MinUrlSlugLength { get; set; } = 2;
public static int MinSlugLength { get; set; } = 2;
public static int MaxShortDescriptionLength { get; set; } = 256;

@ -17,7 +17,7 @@
public static class Blogs
{
public const string UrlSlugAlreadyExist = "CmsKit:BlogPost:0001";
public const string SlugAlreadyExist = "CmsKit:BlogPost:0001";
}
}
}

@ -12,17 +12,17 @@ namespace Volo.CmsKit.Blogs
public Blog(
Guid id,
[NotNull] string name,
[NotNull] string urlSlug,
[NotNull] string slug,
[CanBeNull] Guid? tenantId = null) : base(id)
{
SetName(name);
SetUrlSlug(urlSlug);
SetSlug(slug);
TenantId = tenantId;
}
public string Name { get; protected set; }
public string UrlSlug { get; protected set; }
public string Slug { get; protected set; }
public Guid? TenantId { get; protected set; }
@ -31,11 +31,11 @@ namespace Volo.CmsKit.Blogs
Name = Check.NotNullOrWhiteSpace(name, nameof(name), maxLength: BlogConsts.MaxNameLength);
}
public void SetUrlSlug(string urlSlug)
public void SetSlug(string slug)
{
Check.NotNullOrWhiteSpace(urlSlug, nameof(urlSlug), maxLength: BlogConsts.MaxNameLength);
Check.NotNullOrWhiteSpace(slug, nameof(slug), maxLength: BlogConsts.MaxNameLength);
UrlSlug = urlSlug.NormalizeAsUrlSlug();
Slug = slug.NormalizeSlug();
}
}
}

@ -16,7 +16,7 @@ namespace Volo.CmsKit.Blogs
public string Title { get; protected set; }
public string UrlSlug { get; protected set; }
public string Slug { get; protected set; }
public string ShortDescription { get; protected set; }
@ -30,12 +30,12 @@ namespace Volo.CmsKit.Blogs
Guid id,
Guid blogId,
[NotNull] string title,
[NotNull] string urlSlug,
[NotNull] string slug,
[CanBeNull] string shortDescription = null) : base(id)
{
BlogId = blogId;
SetTitle(title);
SetUrlSlug(urlSlug);
SetSlug(slug);
ShortDescription = shortDescription;
}
@ -44,11 +44,11 @@ namespace Volo.CmsKit.Blogs
Title = Check.NotNullOrWhiteSpace(title, nameof(title), BlogPostConsts.MaxTitleLength);
}
internal void SetUrlSlug(string urlSlug)
internal void SetSlug(string slug)
{
Check.NotNullOrWhiteSpace(urlSlug, nameof(urlSlug), BlogPostConsts.MaxUrlSlugLength, BlogPostConsts.MinUrlSlugLength);
Check.NotNullOrWhiteSpace(slug, nameof(slug), BlogPostConsts.MaxSlugLength, BlogPostConsts.MinSlugLength);
UrlSlug = urlSlug.NormalizeAsUrlSlug();
Slug = slug.NormalizeSlug();
}
public void SetShortDescription(string shortDescription)

@ -25,7 +25,7 @@ namespace Volo.CmsKit.Blogs
{
await CheckBlogExistenceAsync(blogPost.BlogId);
await CheckUrlSlugExistenceAsync(blogPost.BlogId, blogPost.UrlSlug);
await CheckSlugExistenceAsync(blogPost.BlogId, blogPost.Slug);
return await blogPostRepository.InsertAsync(blogPost);
}
@ -39,16 +39,16 @@ namespace Volo.CmsKit.Blogs
public async Task SetSlugUrlAsync(BlogPost blogPost, string newSlug)
{
await CheckUrlSlugExistenceAsync(blogPost.BlogId, newSlug);
await CheckSlugExistenceAsync(blogPost.BlogId, newSlug);
blogPost.SetUrlSlug(newSlug);
blogPost.SetSlug(newSlug);
}
private async Task CheckUrlSlugExistenceAsync(Guid blogId, string urlSlug)
private async Task CheckSlugExistenceAsync(Guid blogId, string slug)
{
if (await blogPostRepository.SlugExistsAsync(blogId, urlSlug))
if (await blogPostRepository.SlugExistsAsync(blogId, slug))
{
throw new BlogPostUrlSlugAlreadyExistException(blogId, urlSlug);
throw new BlogPostSlugAlreadyExistException(blogId, slug);
}
}

@ -0,0 +1,31 @@
using System;
using Volo.Abp;
namespace Volo.CmsKit.Blogs
{
public class BlogPostSlugAlreadyExistException : BusinessException
{
internal BlogPostSlugAlreadyExistException(string code = null, string message = null, string details = null, Exception innerException = null, Microsoft.Extensions.Logging.LogLevel logLevel = Microsoft.Extensions.Logging.LogLevel.Warning) : base(code, message, details, innerException, logLevel)
{
}
internal BlogPostSlugAlreadyExistException(System.Runtime.Serialization.SerializationInfo serializationInfo, System.Runtime.Serialization.StreamingContext context) : base(serializationInfo, context)
{
}
public BlogPostSlugAlreadyExistException(Guid blogId, string slug)
{
Slug = slug;
BlogId = blogId;
Code = CmsKitErrorCodes.Blogs.SlugAlreadyExist;
WithData(nameof(Slug), Slug);
WithData(nameof(BlogId), BlogId);
}
public string Slug { get; }
public Guid BlogId { get; }
}
}

@ -1,31 +0,0 @@
using System;
using Volo.Abp;
namespace Volo.CmsKit.Blogs
{
public class BlogPostUrlSlugAlreadyExistException : BusinessException
{
internal BlogPostUrlSlugAlreadyExistException(string code = null, string message = null, string details = null, Exception innerException = null, Microsoft.Extensions.Logging.LogLevel logLevel = Microsoft.Extensions.Logging.LogLevel.Warning) : base(code, message, details, innerException, logLevel)
{
}
internal BlogPostUrlSlugAlreadyExistException(System.Runtime.Serialization.SerializationInfo serializationInfo, System.Runtime.Serialization.StreamingContext context) : base(serializationInfo, context)
{
}
public BlogPostUrlSlugAlreadyExistException(Guid blogId, string urlSlug)
{
UrlSlug = urlSlug;
BlogId = blogId;
Code = CmsKitErrorCodes.Blogs.UrlSlugAlreadyExist;
WithData(nameof(UrlSlug), UrlSlug);
WithData(nameof(BlogId), BlogId);
}
public string UrlSlug { get; }
public Guid BlogId { get; }
}
}

@ -1,12 +1,10 @@
using Slugify;
using System.Text.RegularExpressions;
using Unidecode.NET;
namespace Volo.CmsKit.Blogs.Extensions
{
public static class UrlSlugExtensions
public static class SlugExtensions
{
public static string NormalizeAsUrlSlug(this string value)
public static string NormalizeSlug(this string value)
{
var slugHelper = new SlugHelper();

@ -12,7 +12,7 @@ namespace Volo.CmsKit.Blogs
{
Task<bool> SlugExistsAsync(Guid blogId, string slug, CancellationToken cancellationToken = default);
Task<BlogPost> GetByUrlSlugAsync(Guid blogId, string urlSlug, CancellationToken cancellationToken = default);
Task<BlogPost> GetBySlugAsync(Guid blogId, string Slug, CancellationToken cancellationToken = default);
Task<List<BlogPost>> GetPagedListAsync(Guid blogId, int skipCount, int maxResultCount, string sorting, bool includeDetails = false, CancellationToken cancellationToken = default);

@ -6,7 +6,7 @@ namespace Volo.CmsKit.Blogs
{
public interface IBlogRepository : IBasicRepository<Blog, Guid>
{
public Task<Blog> GetByUrlSlugAsync(string urlSlug);
public Task<Blog> GetBySlugAsync(string slug);
Task<bool> ExistsAsync(Guid blogId);
}
}

@ -20,14 +20,14 @@ namespace Volo.CmsKit.Blogs
{
}
public async Task<BlogPost> GetByUrlSlugAsync(Guid blogId, string urlSlug, CancellationToken cancellationToken = default)
public async Task<BlogPost> GetBySlugAsync(Guid blogId, string slug, CancellationToken cancellationToken = default)
{
var dbSet = await GetDbSetAsync();
return await dbSet
.Include(i=> i.Creator)
.Where(x =>
x.BlogId == blogId && x.UrlSlug.ToLower() == urlSlug)
x.BlogId == blogId && x.Slug.ToLower() == slug)
.FirstOrDefaultAsync(cancellationToken: cancellationToken)
?? throw new EntityNotFoundException(typeof(BlogPost));
}
@ -60,7 +60,7 @@ namespace Volo.CmsKit.Blogs
{
var dbSet = await GetDbSetAsync();
return await dbSet.AnyAsync(x => x.BlogId == blogId && x.UrlSlug.ToLower() == slug, cancellationToken);
return await dbSet.AnyAsync(x => x.BlogId == blogId && x.Slug.ToLower() == slug, cancellationToken);
}
}
}

@ -19,9 +19,9 @@ namespace Volo.CmsKit.Blogs
return await (await GetQueryableAsync()).AnyAsync(x => x.Id == blogId);
}
public Task<Blog> GetByUrlSlugAsync(string urlSlug)
public Task<Blog> GetBySlugAsync(string slug)
{
return GetAsync(x => x.UrlSlug == urlSlug);
return GetAsync(x => x.Slug == slug);
}
}
}

@ -198,7 +198,7 @@ namespace Volo.CmsKit.EntityFrameworkCore
b.Property(p => p.Name).IsRequired().HasMaxLength(BlogConsts.MaxNameLength);
b.Property(p => p.UrlSlug).IsRequired().HasMaxLength(BlogConsts.MaxUrlSlugLength);
b.Property(p => p.Slug).IsRequired().HasMaxLength(BlogConsts.MaxSlugLength);
});
builder.Entity<BlogPost>(b =>
@ -209,11 +209,11 @@ namespace Volo.CmsKit.EntityFrameworkCore
b.Property(p => p.Title).IsRequired().HasMaxLength(BlogPostConsts.MaxTitleLength);
b.Property(p => p.UrlSlug).IsRequired().HasMaxLength(BlogPostConsts.MaxUrlSlugLength);
b.Property(p => p.Slug).IsRequired().HasMaxLength(BlogPostConsts.MaxSlugLength);
b.Property(p => p.ShortDescription).HasMaxLength(BlogPostConsts.MaxShortDescriptionLength);
b.HasIndex(x => new { x.UrlSlug, x.BlogId });
b.HasIndex(x => new { x.Slug, x.BlogId });
});
}
else

@ -20,11 +20,11 @@ namespace Volo.CmsKit.MongoDB.Blogs
{
}
public Task<BlogPost> GetByUrlSlugAsync(Guid blogId, string urlSlug, CancellationToken cancellationToken = default)
public Task<BlogPost> GetBySlugAsync(Guid blogId, string slug, CancellationToken cancellationToken = default)
{
return GetAsync(x =>
x.BlogId == blogId &&
x.UrlSlug.ToLower() == urlSlug,
x.Slug.ToLower() == slug,
includeDetails: true,
cancellationToken: cancellationToken);
}
@ -61,7 +61,7 @@ namespace Volo.CmsKit.MongoDB.Blogs
{
var queryable = await GetMongoQueryableAsync();
return await queryable.AnyAsync(x => x.BlogId == blogId && x.UrlSlug.ToLower() == slug, cancellationToken);
return await queryable.AnyAsync(x => x.BlogId == blogId && x.Slug.ToLower() == slug, cancellationToken);
}
}
}

@ -20,9 +20,9 @@ namespace Volo.CmsKit.MongoDB.Blogs
x => x.Id == blogId);
}
public Task<Blog> GetByUrlSlugAsync(string urlSlug)
public Task<Blog> GetBySlugAsync(string slug)
{
return GetAsync(x => x.UrlSlug == urlSlug);
return GetAsync(x => x.Slug == slug);
}
}
}

@ -10,7 +10,7 @@ namespace Volo.CmsKit.Public.Blogs
public string Title { get; set; }
public string UrlSlug { get; set; }
public string Slug { get; set; }
public string ShortDescription { get; set; }
}

@ -8,9 +8,9 @@ namespace Volo.CmsKit.Public.Blogs
{
public interface IBlogPostPublicAppService
{
Task<PagedResultDto<BlogPostPublicDto>> GetListAsync(string blogUrlSlug, PagedAndSortedResultRequestDto input);
Task<PagedResultDto<BlogPostPublicDto>> GetListAsync(string blogSlug, PagedAndSortedResultRequestDto input);
Task<BlogPostPublicDto> GetAsync(string blogUrlSlug, string blogPostUrlSlug);
Task<BlogPostPublicDto> GetAsync(string blogSlug, string blogPostSlug);
Task<RemoteStreamContent> GetCoverImageAsync(Guid id);
}

@ -26,18 +26,18 @@ namespace Volo.CmsKit.Public.Blogs
BlobContainer = blobContainer;
}
public async Task<BlogPostPublicDto> GetAsync(string blogUrlSlug, string blogPostUrlSlug)
public async Task<BlogPostPublicDto> GetAsync(string blogSlug, string blogPostSlug)
{
var blog = await BlogRepository.GetByUrlSlugAsync(blogUrlSlug);
var blog = await BlogRepository.GetBySlugAsync(blogSlug);
var blogPost = await BlogPostRepository.GetByUrlSlugAsync(blog.Id, blogPostUrlSlug);
var blogPost = await BlogPostRepository.GetBySlugAsync(blog.Id, blogPostSlug);
return ObjectMapper.Map<BlogPost, BlogPostPublicDto>(blogPost);
}
public async Task<PagedResultDto<BlogPostPublicDto>> GetListAsync(string blogUrlSlug, PagedAndSortedResultRequestDto input)
public async Task<PagedResultDto<BlogPostPublicDto>> GetListAsync(string blogSlug, PagedAndSortedResultRequestDto input)
{
var blog = await BlogRepository.GetByUrlSlugAsync(blogUrlSlug);
var blog = await BlogRepository.GetBySlugAsync(blogSlug);
var blogPosts = await BlogPostRepository.GetPagedListAsync(blog.Id, input.SkipCount, input.MaxResultCount, input.Sorting);

@ -27,9 +27,9 @@ namespace Volo.CmsKit.Public.Blogs
}
[HttpGet]
public Task<BlogPostPublicDto> GetAsync(string blogUrlSlug, string blogPostUrlSlug)
public Task<BlogPostPublicDto> GetAsync(string blogSlug, string blogPostSlug)
{
return BlogPostPublicAppService.GetAsync(blogUrlSlug, blogPostUrlSlug);
return BlogPostPublicAppService.GetAsync(blogSlug, blogPostSlug);
}
[HttpGet]
@ -45,9 +45,9 @@ namespace Volo.CmsKit.Public.Blogs
}
[HttpGet]
public Task<PagedResultDto<BlogPostPublicDto>> GetListAsync(string blogUrlSlug, PagedAndSortedResultRequestDto input)
public Task<PagedResultDto<BlogPostPublicDto>> GetListAsync(string blogSlug, PagedAndSortedResultRequestDto input)
{
return BlogPostPublicAppService.GetListAsync(blogUrlSlug, input);
return BlogPostPublicAppService.GetListAsync(blogSlug, input);
}
}
}

@ -1,4 +1,4 @@
@page "/blogs/{blogUrlSlug}/{blogPostUrlSlug}"
@page "/blogs/{blogSlug}/{blogPostSlug}"
@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Blogs.BlogPost
@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Blogs.BlogPostComment
@ -20,8 +20,8 @@
@await Component.InvokeAsync(typeof(DefaultBlogPostViewComponent), new
{
Model.BlogUrlSlug,
Model.BlogPostUrlSlug
Model.BlogSlug,
Model.BlogPostSlug
})
@if (GlobalFeatureManager.Instance.IsEnabled<TagsFeature>())

@ -11,10 +11,10 @@ namespace Volo.CmsKit.Public.Web.Pages.CmsKit.Blogs
public class BlogPostModel : CmsKitPublicPageModelBase
{
[BindProperty(SupportsGet = true)]
public string BlogUrlSlug { get; set; }
public string BlogSlug { get; set; }
[BindProperty(SupportsGet = true)]
public string BlogPostUrlSlug { get; set; }
public string BlogPostSlug { get; set; }
public BlogPostPublicDto BlogPost { get; private set; }
@ -27,7 +27,7 @@ namespace Volo.CmsKit.Public.Web.Pages.CmsKit.Blogs
public async Task OnGetAsync()
{
BlogPost = await BlogPostPublicAppService.GetAsync(BlogUrlSlug, BlogPostUrlSlug);
BlogPost = await BlogPostPublicAppService.GetAsync(BlogSlug, BlogPostSlug);
}
}
}

@ -1,4 +1,4 @@
@page "/blogs/{blogUrlSlug}"
@page "/blogs/{blogSlug}"
@using Volo.CmsKit.Public.Web.Pages
@ -25,7 +25,7 @@
@blog.ShortDescription
</abp-card-text>
<abp-card-text>
<a href="/blogs/@Model.BlogUrlSlug/@blog.UrlSlug">
<a href="/blogs/@Model.BlogSlug/@blog.Slug">
<abp-button text="@L["Read"]"
button-type="Outline_Primary" />
</a>

@ -15,7 +15,7 @@ namespace Volo.CmsKit.Public.Web.Pages.CmsKit.Blogs
public const int PageSize = 12;
[BindProperty(SupportsGet = true)]
public string BlogUrlSlug { get; set; }
public string BlogSlug { get; set; }
[BindProperty(SupportsGet = true)]
public int CurrentPage { get; set; } = 1;
@ -34,7 +34,7 @@ namespace Volo.CmsKit.Public.Web.Pages.CmsKit.Blogs
public async Task OnGetAsync()
{
Blogs = await BlogPostPublicAppService.GetListAsync(
BlogUrlSlug,
BlogSlug,
new PagedAndSortedResultRequestDto
{
SkipCount = PageSize * (CurrentPage - 1),

@ -19,9 +19,9 @@ namespace Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Blogs.BlogPost
BlogPostPublicAppService = blogPostPublicAppService;
}
public virtual async Task<IViewComponentResult> InvokeAsync(string blogUrlSlug, string blogPostUrlSlug)
public virtual async Task<IViewComponentResult> InvokeAsync(string blogSlug, string blogPostSlug)
{
var blogPost = await BlogPostPublicAppService.GetAsync(blogUrlSlug, blogPostUrlSlug);
var blogPost = await BlogPostPublicAppService.GetAsync(blogSlug, blogPostSlug);
return View("~/Pages/CmsKit/Shared/Components/Blogs/BlogPost/Default.cshtml", blogPost);
}

@ -28,14 +28,14 @@ namespace Volo.CmsKit.Blogs
public async Task CreateAsync_ShouldWorkProperly_WithCorrectData()
{
var title = "My awesome new Post";
var urlSlug = "my-awesome-new-post";
var slug = "my-awesome-new-post";
var shortDescription = "This blog is all about awesomeness 🤗!";
var created = await blogPostAdminAppService.CreateAsync(new CreateUpdateBlogPostDto
{
BlogId = cmsKitTestData.Blog_Id,
Title = title,
UrlSlug = urlSlug,
Slug = slug,
ShortDescription = shortDescription
});
@ -44,7 +44,7 @@ namespace Volo.CmsKit.Blogs
var blogPost = await blogPostRepository.GetAsync(created.Id);
blogPost.Title.ShouldBe(title);
blogPost.UrlSlug.ShouldBe(urlSlug);
blogPost.Slug.ShouldBe(slug);
blogPost.ShortDescription.ShouldBe(shortDescription);
}
@ -52,7 +52,7 @@ namespace Volo.CmsKit.Blogs
public async Task CreateAsync_ShouldThrowException_WithNonExistingBlogId()
{
var title = "Another My Awesome New Post";
var urlSlug = "another-my-awesome-new-post";
var slug = "another-my-awesome-new-post";
var shortDescription = "This blog is all about awesomeness 🤗!";
var dto = new CreateUpdateBlogPostDto
@ -60,7 +60,7 @@ namespace Volo.CmsKit.Blogs
// Non-existing Id
BlogId = Guid.NewGuid(),
Title = title,
UrlSlug = urlSlug,
Slug = slug,
ShortDescription = shortDescription
};
@ -76,7 +76,7 @@ namespace Volo.CmsKit.Blogs
var blogPost = await blogPostAdminAppService.GetAsync(cmsKitTestData.BlogPost_1_Id);
blogPost.Title.ShouldBe(cmsKitTestData.BlogPost_1_Title);
blogPost.UrlSlug.ShouldBe(cmsKitTestData.BlogPost_1_UrlSlug);
blogPost.Slug.ShouldBe(cmsKitTestData.BlogPost_1_Slug);
}
[Fact]
@ -91,30 +91,30 @@ namespace Volo.CmsKit.Blogs
}
[Fact]
public async Task GetByUrlSlugAsync_ShouldWorkProperly_WithExistingUrlSlug()
public async Task GetBySlugAsync_ShouldWorkProperly_WithExistingSlug()
{
var blogPost = await blogPostAdminAppService.GetByUrlSlugAsync(cmsKitTestData.BlogUrlSlug, cmsKitTestData.BlogPost_1_UrlSlug);
var blogPost = await blogPostAdminAppService.GetBySlugAsync(cmsKitTestData.BlogSlug, cmsKitTestData.BlogPost_1_Slug);
blogPost.Id.ShouldBe(cmsKitTestData.BlogPost_1_Id);
blogPost.Title.ShouldBe(cmsKitTestData.BlogPost_1_Title);
}
[Fact]
public async Task GetByUrlSlugAsync_ShouldThrowException_WithNonExistingBlogPostUrlSlug()
public async Task GetBySlugAsync_ShouldThrowException_WithNonExistingBlogPostSlug()
{
var nonExistingUrlSlug = "any-other-url";
var nonExistingSlug = "any-other-url";
var exception = await Should.ThrowAsync<EntityNotFoundException>(async () =>
await blogPostAdminAppService.GetByUrlSlugAsync(cmsKitTestData.BlogUrlSlug, nonExistingUrlSlug));
await blogPostAdminAppService.GetBySlugAsync(cmsKitTestData.BlogSlug, nonExistingSlug));
exception.EntityType.ShouldBe(typeof(BlogPost));
}
[Fact]
public async Task GetByUrlSlugAsync_ShouldThrowException_WithNonExistingBlogUrlSlug()
public async Task GetBySlugAsync_ShouldThrowException_WithNonExistingBlogSlug()
{
var nonExistingUrlSlug = "any-other-url";
var nonExistingSlug = "any-other-url";
var exception = await Should.ThrowAsync<EntityNotFoundException>(async () =>
await blogPostAdminAppService.GetByUrlSlugAsync(nonExistingUrlSlug, cmsKitTestData.Page_1_Url));
await blogPostAdminAppService.GetBySlugAsync(nonExistingSlug, cmsKitTestData.Page_1_Url));
exception.EntityType.ShouldBe(typeof(Blog));
}
@ -135,21 +135,21 @@ namespace Volo.CmsKit.Blogs
{
var shortDescription = "Another short description";
var title = "[Solved] Another Blog Post";
var urlSlug = "another-short-blog-post";
var slug = "another-short-blog-post";
await blogPostAdminAppService.UpdateAsync(cmsKitTestData.BlogPost_2_Id, new CreateUpdateBlogPostDto
{
BlogId = cmsKitTestData.Blog_Id,
ShortDescription = shortDescription,
Title = title,
UrlSlug = urlSlug,
Slug = slug,
});
var blogPost = await blogPostRepository.GetAsync(cmsKitTestData.BlogPost_2_Id);
blogPost.Title.ShouldBe(title);
blogPost.ShortDescription.ShouldBe(shortDescription);
blogPost.UrlSlug.ShouldBe(urlSlug);
blogPost.Slug.ShouldBe(slug);
}
[Fact]
@ -161,7 +161,7 @@ namespace Volo.CmsKit.Blogs
{
BlogId = nonExistingId,
Title = cmsKitTestData.Page_2_Title,
UrlSlug = cmsKitTestData.BlogPost_2_UrlSlug
Slug = cmsKitTestData.BlogPost_2_Slug
};
var exception = await Should.ThrowAsync<EntityNotFoundException>(async () =>
@ -178,13 +178,13 @@ namespace Volo.CmsKit.Blogs
{
BlogId = cmsKitTestData.Blog_Id,
Title = "Some new title",
UrlSlug = cmsKitTestData.BlogPost_1_UrlSlug
Slug = cmsKitTestData.BlogPost_1_Slug
};
var exception = await Should.ThrowAsync<BlogPostUrlSlugAlreadyExistException>(async () =>
var exception = await Should.ThrowAsync<BlogPostSlugAlreadyExistException>(async () =>
await blogPostAdminAppService.UpdateAsync(cmsKitTestData.BlogPost_2_Id, dto));
exception.UrlSlug.ShouldBe(cmsKitTestData.BlogPost_1_UrlSlug);
exception.Slug.ShouldBe(cmsKitTestData.BlogPost_1_Slug);
}
[Fact]

@ -29,24 +29,24 @@ namespace Volo.CmsKit.Blogs
public async Task CreateAsync_ShouldWorkProperly_WithCorrectData()
{
var title = "New blog post";
var urlSlug = "new-blog-post";
var slug = "new-blog-post";
var created = await blogPostManager.CreateAsync(
new BlogPost(guidGenerator.Create(), cmsKitTestData.Blog_Id, title, urlSlug));
new BlogPost(guidGenerator.Create(), cmsKitTestData.Blog_Id, title, slug));
created.Id.ShouldNotBe(Guid.Empty);
var blogPost = await blogPostRepository.GetAsync(created.Id);
blogPost.Title.ShouldBe(title);
blogPost.UrlSlug.ShouldBe(urlSlug);
blogPost.Slug.ShouldBe(slug);
}
[Fact]
public async Task CreateAsync_ShouldThrowException_WhenUrlSlugAlreadyExists()
public async Task CreateAsync_ShouldThrowException_WhenSlugAlreadyExists()
{
var blogPost = new BlogPost(guidGenerator.Create(), cmsKitTestData.Blog_Id, "Any New Title", cmsKitTestData.BlogPost_1_UrlSlug);
var blogPost = new BlogPost(guidGenerator.Create(), cmsKitTestData.Blog_Id, "Any New Title", cmsKitTestData.BlogPost_1_Slug);
await Should.ThrowAsync<BlogPostUrlSlugAlreadyExistException>(async () =>
await Should.ThrowAsync<BlogPostSlugAlreadyExistException>(async () =>
await blogPostManager.CreateAsync(blogPost));
}
@ -66,27 +66,27 @@ namespace Volo.CmsKit.Blogs
}
[Fact]
public async Task SetUrlSlugAsync_ShouldWorkProperly_WithNonExistingSlug()
public async Task SetSlugAsync_ShouldWorkProperly_WithNonExistingSlug()
{
var newUrlSlug = "yet-another-post";
var newSlug = "yet-another-post";
var blogPost = await blogPostRepository.GetAsync(cmsKitTestData.BlogPost_1_Id);
await blogPostManager.SetSlugUrlAsync(blogPost, newUrlSlug);
await blogPostManager.SetSlugUrlAsync(blogPost, newSlug);
blogPost.UrlSlug.ShouldBe(newUrlSlug);
blogPost.Slug.ShouldBe(newSlug);
}
[Fact]
public async Task SetUrlSlugAsync_ShouldThrowException_WithExistingSlug()
public async Task SetSlugAsync_ShouldThrowException_WithExistingSlug()
{
var blogPost = await blogPostRepository.GetAsync(cmsKitTestData.BlogPost_1_Id);
var exception = await Should.ThrowAsync<BlogPostUrlSlugAlreadyExistException>(async () =>
await blogPostManager.SetSlugUrlAsync(blogPost, cmsKitTestData.BlogPost_2_UrlSlug));
var exception = await Should.ThrowAsync<BlogPostSlugAlreadyExistException>(async () =>
await blogPostManager.SetSlugUrlAsync(blogPost, cmsKitTestData.BlogPost_2_Slug));
exception.BlogId.ShouldBe(blogPost.BlogId);
exception.UrlSlug.ShouldBe(cmsKitTestData.BlogPost_2_UrlSlug);
exception.Slug.ShouldBe(cmsKitTestData.BlogPost_2_Slug);
}
}
}

@ -9,128 +9,128 @@ using Shouldly;
namespace Volo.CmsKit.Blogs
{
public class UrlSlugExtensions_Tests
public class SlugExtensions_Tests
{
[Fact]
public void NormalizeAsUrlSlug_ShouldWorkProperly()
public void NormalizeSlug_ShouldWorkProperly()
{
// Arrange
var name = "My awesome name";
var expected = "my-awesome-name";
// Act
var actual = name.NormalizeAsUrlSlug();
var actual = name.NormalizeSlug();
// Assert
actual.ShouldBe(expected);
}
[Fact]
public void NormalizeAsUrlSlug_ShouldWorkProperly_WithDot()
public void NormalizeSlug_ShouldWorkProperly_WithDot()
{
// Arrange
var name = "My Perfect Title v.2";
var expected = "my-perfect-title-v2";
// Act
var actual = name.NormalizeAsUrlSlug();
var actual = name.NormalizeSlug();
// Assert
actual.ShouldBe(expected);
}
[Fact]
public void NormalizeAsUrlSlug_ShouldWorkProperly_WithQuestionMark()
public void NormalizeSlug_ShouldWorkProperly_WithQuestionMark()
{
// Arrange
var name = "Are you gonna die?";
var expected = "are-you-gonna-die";
// Act
var actual = name.NormalizeAsUrlSlug();
var actual = name.NormalizeSlug();
// Assert
actual.ShouldBe(expected);
}
[Fact]
public void NormalizeAsUrlSlug_ShouldWorkProperly_WithAmpersand()
public void NormalizeSlug_ShouldWorkProperly_WithAmpersand()
{
// Arrange
var name = "We & Machines Challenge";
var expected = "we-machines-challenge";
// Act
var actual = name.NormalizeAsUrlSlug();
var actual = name.NormalizeSlug();
// Assert
actual.ShouldBe(expected);
}
[Fact]
public void NormalizeAsUrlSlug_ShouldWorkProperly_WithDoubleDash()
public void NormalizeSlug_ShouldWorkProperly_WithDoubleDash()
{
// Arrange
var name = "Go and Code --part 2";
var expected = "go-and-code-part-2";
// Act
var actual = name.NormalizeAsUrlSlug();
var actual = name.NormalizeSlug();
// Assert
actual.ShouldBe(expected);
}
[Fact]
public void NormalizeAsUrlSlug_ShouldWorkProperly_WithCyrillicChars()
public void NormalizeSlug_ShouldWorkProperly_WithCyrillicChars()
{
// Arrange
var name = "Мое классное название";
var expected = "moe-klassnoe-nazvanie";
// Act
var actual = name.NormalizeAsUrlSlug();
var actual = name.NormalizeSlug();
// Assert
actual.ShouldBe(expected);
}
[Fact]
public void NormalizeAsUrlSlug_ShouldWorkProperly_WithTurkishChars()
public void NormalizeSlug_ShouldWorkProperly_WithTurkishChars()
{
// Arrange
var name = "Özel Türkçe karakterler: ğüşiöç";
var expected = "ozel-turkce-karakterler-gusioc";
// Act
var actual = name.NormalizeAsUrlSlug();
var actual = name.NormalizeSlug();
// Assert
actual.ShouldBe(expected);
}
[Fact]
public void NormalizeAsUrlSlug_ShouldWorkProperly_WithChineseChars()
public void NormalizeSlug_ShouldWorkProperly_WithChineseChars()
{
// Arrange
var name = "我的挑战";
var expected = "o-e-iao-han";
// Act
var actual = name.NormalizeAsUrlSlug();
var actual = name.NormalizeSlug();
// Assert
actual.ShouldBe(expected);
}
[Fact]
public void NormalizeAsUrlSlug_ShouldWorkProperly_WithEmoji()
public void NormalizeSlug_ShouldWorkProperly_WithEmoji()
{
// Arrange
var name = "Let's Rock 👊";
var expected = "lets-rock";
// Act
var actual = name.NormalizeAsUrlSlug();
var actual = name.NormalizeSlug();
// Assert
actual.ShouldBe(expected);

@ -23,15 +23,15 @@ namespace Volo.CmsKit.Blogs
}
[Fact]
public async Task SlugExistsAsync_ShouldReturnTrue_WithExistingUrlSlug()
public async Task SlugExistsAsync_ShouldReturnTrue_WithExistingSlug()
{
var result = await blogPostRepository.SlugExistsAsync(testData.Blog_Id, testData.BlogPost_1_UrlSlug);
var result = await blogPostRepository.SlugExistsAsync(testData.Blog_Id, testData.BlogPost_1_Slug);
result.ShouldBeTrue();
}
[Fact]
public async Task SlugExistsAsync_ShouldReturnFalse_WithNonExistingUrlSlug()
public async Task SlugExistsAsync_ShouldReturnFalse_WithNonExistingSlug()
{
var nonExistingSlug = "any-other-url-slug";
@ -45,38 +45,38 @@ namespace Volo.CmsKit.Blogs
{
var nonExistingBlogId = Guid.NewGuid();
var result = await blogPostRepository.SlugExistsAsync(nonExistingBlogId, testData.BlogPost_1_UrlSlug);
var result = await blogPostRepository.SlugExistsAsync(nonExistingBlogId, testData.BlogPost_1_Slug);
result.ShouldBeFalse();
}
[Fact]
public async Task GetByUrlSlugAsync_ShouldWorkProperly_WithCorrectParameters()
public async Task GetBySlugAsync_ShouldWorkProperly_WithCorrectParameters()
{
var blogPost = await blogPostRepository.GetByUrlSlugAsync(testData.Blog_Id, testData.BlogPost_1_UrlSlug);
var blogPost = await blogPostRepository.GetBySlugAsync(testData.Blog_Id, testData.BlogPost_1_Slug);
blogPost.ShouldNotBeNull();
blogPost.Id.ShouldBe(testData.BlogPost_1_Id);
blogPost.UrlSlug.ShouldBe(testData.BlogPost_1_UrlSlug);
blogPost.Slug.ShouldBe(testData.BlogPost_1_Slug);
}
[Fact]
public async Task GetByUrlSlugAsync_ShouldThrowException_WithNonExistingBlogPostUrlSlug()
public async Task GetBySlugAsync_ShouldThrowException_WithNonExistingBlogPostSlug()
{
var nonExistingSlugUrl = "absolutely-non-existing-url";
var exception = await Should.ThrowAsync<EntityNotFoundException>(
async () => await blogPostRepository.GetByUrlSlugAsync(testData.Blog_Id, nonExistingSlugUrl));
async () => await blogPostRepository.GetBySlugAsync(testData.Blog_Id, nonExistingSlugUrl));
exception.ShouldNotBeNull();
exception.EntityType.ShouldBe(typeof(BlogPost));
}
[Fact]
public async Task GetByUrlSlugAsync_ShouldThrowException_WithNonExistingBlogId()
public async Task GetBySlugAsync_ShouldThrowException_WithNonExistingBlogId()
{
var nonExistingBlogId = Guid.NewGuid();
var exception = await Should.ThrowAsync<EntityNotFoundException>(
async () => await blogPostRepository.GetByUrlSlugAsync(nonExistingBlogId, testData.BlogPost_1_UrlSlug));
async () => await blogPostRepository.GetBySlugAsync(nonExistingBlogId, testData.BlogPost_1_Slug));
exception.ShouldNotBeNull();
exception.EntityType.ShouldBe(typeof(BlogPost));

@ -23,22 +23,22 @@ namespace Volo.CmsKit.Blogs
}
[Fact]
public async Task GetByUrlSlugAsync_ShouldWorkProperly_WithExistingSlug()
public async Task GetBySlugAsync_ShouldWorkProperly_WithExistingSlug()
{
var blog = await blogRepository.GetByUrlSlugAsync(testData.BlogUrlSlug);
var blog = await blogRepository.GetBySlugAsync(testData.BlogSlug);
blog.ShouldNotBeNull();
blog.UrlSlug.ShouldBe(testData.BlogUrlSlug);
blog.Slug.ShouldBe(testData.BlogSlug);
blog.Id.ShouldBe(testData.Blog_Id);
}
[Fact]
public async Task GetByUrlSlugAsync_ShouldThrowException_WithNonExistingSlug()
public async Task GetBySlugAsync_ShouldThrowException_WithNonExistingSlug()
{
var nonExistingSlug = "some-blog-slug-that-doesnt-exist";
var exception = await Should.ThrowAsync<EntityNotFoundException>(
async () => await blogRepository.GetByUrlSlugAsync(nonExistingSlug));
async () => await blogRepository.GetBySlugAsync(nonExistingSlug));
exception.ShouldNotBeNull();
exception.EntityType.ShouldBe(typeof(Blog));

@ -308,11 +308,11 @@ namespace Volo.CmsKit
private async Task SeedBlogsAsync()
{
var blog = await _blogRepository.InsertAsync(new Blog(_cmsKitTestData.Blog_Id, _cmsKitTestData.BlogName, _cmsKitTestData.BlogUrlSlug));
var blog = await _blogRepository.InsertAsync(new Blog(_cmsKitTestData.Blog_Id, _cmsKitTestData.BlogName, _cmsKitTestData.BlogSlug));
await _blogPostRepository.InsertAsync(new BlogPost(_cmsKitTestData.BlogPost_1_Id, blog.Id, _cmsKitTestData.BlogPost_1_Title, _cmsKitTestData.BlogPost_1_UrlSlug, "Short desc 1"));
await _blogPostRepository.InsertAsync(new BlogPost(_cmsKitTestData.BlogPost_1_Id, blog.Id, _cmsKitTestData.BlogPost_1_Title, _cmsKitTestData.BlogPost_1_Slug, "Short desc 1"));
await _blogPostRepository.InsertAsync(new BlogPost(_cmsKitTestData.BlogPost_2_Id, blog.Id, _cmsKitTestData.BlogPost_2_Title, _cmsKitTestData.BlogPost_2_UrlSlug, "Short desc 2"));
await _blogPostRepository.InsertAsync(new BlogPost(_cmsKitTestData.BlogPost_2_Id, blog.Id, _cmsKitTestData.BlogPost_2_Title, _cmsKitTestData.BlogPost_2_Slug, "Short desc 2"));
}
}
}

@ -77,18 +77,18 @@ namespace Volo.CmsKit
public string BlogName => "Cms Blog";
public string BlogUrlSlug => "cms-blog";
public string BlogSlug => "cms-blog";
public Guid BlogPost_1_Id { get; } = Guid.NewGuid();
public string BlogPost_1_Title => "How to install CmsKit?";
public string BlogPost_1_UrlSlug => "how-to-install-cms-kit";
public string BlogPost_1_Slug => "how-to-install-cms-kit";
public Guid BlogPost_2_Id { get; } = Guid.NewGuid();
public string BlogPost_2_Title => "How to use CmsKit";
public string BlogPost_2_UrlSlug => "how-to-use-cms-kit";
public string BlogPost_2_Slug => "how-to-use-cms-kit";
}
}

Loading…
Cancel
Save