diff --git a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Projects/EfCoreProjectRepository.cs b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Projects/EfCoreProjectRepository.cs index f9e6ab4fa7..0df6f12c42 100644 --- a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Projects/EfCoreProjectRepository.cs +++ b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Projects/EfCoreProjectRepository.cs @@ -21,7 +21,7 @@ namespace Volo.Docs.Projects public async Task> GetListAsync(string sorting, int maxResultCount, int skipCount) { - var projects = await DbSet.OrderBy(sorting ?? "creationTime desc") + var projects = await DbSet.OrderBy(sorting ?? "Id desc") .PageBy(skipCount, maxResultCount) .ToListAsync(); diff --git a/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo.Docs.Admin.Application.Tests.csproj b/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo.Docs.Admin.Application.Tests.csproj index 390476a38f..56ff4979d2 100644 --- a/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo.Docs.Admin.Application.Tests.csproj +++ b/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo.Docs.Admin.Application.Tests.csproj @@ -11,6 +11,7 @@ + diff --git a/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo/Docs/ApplicationService_Tests.cs b/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo/Docs/ApplicationService_Tests.cs new file mode 100644 index 0000000000..638913d971 --- /dev/null +++ b/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo/Docs/ApplicationService_Tests.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using Shouldly; +using Volo.Docs.Admin.Projects; +using Volo.Docs.Projects; +using Xunit; + +namespace Volo.Docs +{ + public class ApplicationService_Tests : DocsApplicationTestBase + { + private readonly IProjectAppService _projectAppService; + private readonly IProjectRepository _projectRepository; + private readonly DocsTestData _testData; + + public ApplicationService_Tests() + { + _projectRepository = GetRequiredService(); + _projectAppService = GetRequiredService(); + _testData = GetRequiredService(); + } + + [Fact] + public async Task GetListAsync() + { + var projects = await _projectAppService.GetListAsync(); + projects.ShouldNotBeNull(); + projects.Items.Count.ShouldBe(1); + projects.Items.ShouldContain(x => x.Id == _testData.PorjectId); + } + + [Fact] + public async Task GetAsync() + { + var project = await _projectAppService.GetAsync("ABP"); + project.ShouldNotBeNull(); + project.ShortName.ShouldBe("ABP"); + } + + [Fact] + public async Task GetVersionsAsync() + { + // TODO: Need to mock WebClient and Octokit components + } + + } + +} diff --git a/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo/Docs/DocsAdminApplicationTestModule.cs b/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo/Docs/DocsAdminApplicationTestModule.cs deleted file mode 100644 index b3198c61ff..0000000000 --- a/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo/Docs/DocsAdminApplicationTestModule.cs +++ /dev/null @@ -1,14 +0,0 @@ -using Volo.Abp.Modularity; -using Volo.Docs.Admin; - -namespace Volo.Docs -{ - [DependsOn( - typeof(DocsAdminApplicationModule), - typeof(DocsDomainTestModule) - )] - public class DocsApplicationTestModule : AbpModule - { - - } -} diff --git a/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo/Docs/DocsApplicationTestBase.cs b/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo/Docs/DocsApplicationTestBase.cs new file mode 100644 index 0000000000..25ce81871d --- /dev/null +++ b/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo/Docs/DocsApplicationTestBase.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Volo.Docs +{ + public class DocsAdminApplicationTestBase : DocsTestBase + { + + } + + public class DocsApplicationTestBase : DocsTestBase + { + + } +} diff --git a/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo/Docs/DocsApplicationTestModule.cs b/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo/Docs/DocsApplicationTestModule.cs new file mode 100644 index 0000000000..8212a816a6 --- /dev/null +++ b/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo/Docs/DocsApplicationTestModule.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Volo.Abp.Modularity; +using Volo.Docs.Admin; + +namespace Volo.Docs +{ + [DependsOn( + typeof(DocsApplicationModule), + typeof(DocsDomainTestModule) + )] + public class DocsApplicationTestModule : AbpModule + { + + } + + [DependsOn( + typeof(DocsAdminApplicationModule), + typeof(DocsDomainTestModule) + )] + public class DocsAdminApplicationTestModule : AbpModule + { + + } +} diff --git a/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo/Docs/ProjectAdminAppService_Tests.cs b/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo/Docs/ProjectAdminAppService_Tests.cs new file mode 100644 index 0000000000..dac273a9ba --- /dev/null +++ b/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo/Docs/ProjectAdminAppService_Tests.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Shouldly; +using Volo.Abp.Application.Dtos; +using Volo.Docs.Admin.Projects; +using Volo.Docs.Projects; +using Xunit; + +namespace Volo.Docs +{ + public class ProjectAdminAppService_Tests : DocsAdminApplicationTestBase + { + private readonly IProjectAdminAppService _projectAdminAppService; + private readonly IProjectRepository _projectRepository; + private readonly DocsTestData _testData; + + public ProjectAdminAppService_Tests() + { + _projectRepository = GetRequiredService(); + _projectAdminAppService = GetRequiredService(); + _testData = GetRequiredService(); + } + + [Fact] + public async Task GetListAsync() + { + var projects = await _projectAdminAppService.GetListAsync(new PagedAndSortedResultRequestDto()); + projects.ShouldNotBeNull(); + projects.TotalCount.ShouldBe(1); + projects.Items.ShouldContain(x => x.Name == "ABP vNext"); + } + + [Fact] + public async Task GetAsync() + { + var project = await _projectAdminAppService.GetAsync(_testData.PorjectId); + project.ShouldNotBeNull(); + project.Id.ShouldBe(_testData.PorjectId); + } + + [Fact] + public async Task CreateAsync() + { + var createProjectDto = new CreateProjectDto + { + Name = "ABP vNext", + ShortName = "ABP", + Format = "md", + DefaultDocumentName = "index", + NavigationDocumentName = "docs-nav.json", + MinimumVersion = "1", + MainWebsiteUrl = "abp.io", + LatestVersionBranchName = "", + DocumentStoreType = "GitHub", + ExtraProperties = new Dictionary() + }; + createProjectDto.ExtraProperties.Add("GitHubRootUrl", + "https://github.com/abpframework/abp/tree/{version}/docs/en/"); + createProjectDto.ExtraProperties.Add("GitHubAccessToken", "123456"); + createProjectDto.ExtraProperties.Add("GitHubUserAgent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"); + + //Act + var projectDto = await _projectAdminAppService.CreateAsync(createProjectDto); + projectDto.ShouldNotBeNull(); + projectDto.Name.ShouldBe(createProjectDto.Name); + projectDto.ShortName.ShouldBe(createProjectDto.ShortName); + projectDto.Format.ShouldBe(createProjectDto.Format); + projectDto.DefaultDocumentName.ShouldBe(createProjectDto.DefaultDocumentName); + projectDto.NavigationDocumentName.ShouldBe(createProjectDto.NavigationDocumentName); + projectDto.MinimumVersion.ShouldBe(createProjectDto.MinimumVersion); + projectDto.MainWebsiteUrl.ShouldBe(createProjectDto.MainWebsiteUrl); + projectDto.LatestVersionBranchName.ShouldBe(createProjectDto.LatestVersionBranchName); + projectDto.DocumentStoreType.ShouldBe(createProjectDto.DocumentStoreType); + + projectDto.ExtraProperties.Except(createProjectDto.ExtraProperties).Any().ShouldBe(false); + + } + + [Fact] + public async Task UpdateAsync() + { + var updateProjectDto = new UpdateProjectDto + { + Name = "ABP vNext", + Format = "md", + DefaultDocumentName = "index", + NavigationDocumentName = "docs-nav.json", + + MinimumVersion = "1", + MainWebsiteUrl = "abp.io", + LatestVersionBranchName = "", + ExtraProperties = new Dictionary() + }; + updateProjectDto.ExtraProperties.Add("test", "test"); + + var projectDto = await _projectAdminAppService.UpdateAsync(_testData.PorjectId, updateProjectDto); + + + projectDto.ShouldNotBeNull(); + projectDto.Name.ShouldBe(updateProjectDto.Name); + + projectDto.Format.ShouldBe(updateProjectDto.Format); + projectDto.DefaultDocumentName.ShouldBe(updateProjectDto.DefaultDocumentName); + projectDto.NavigationDocumentName.ShouldBe(updateProjectDto.NavigationDocumentName); + projectDto.MinimumVersion.ShouldBe(updateProjectDto.MinimumVersion); + projectDto.MainWebsiteUrl.ShouldBe(updateProjectDto.MainWebsiteUrl); + projectDto.LatestVersionBranchName.ShouldBe(updateProjectDto.LatestVersionBranchName); + projectDto.ExtraProperties.ShouldContainKey("test"); + } + + [Fact] + public async Task DeleteAsync() + { + (await _projectRepository.GetAsync(_testData.PorjectId)).ShouldNotBeNull(); + + await _projectAdminAppService.DeleteAsync(_testData.PorjectId); + + (await _projectRepository.GetListAsync()).ShouldBeEmpty(); + } + } +} diff --git a/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/DocsDomainTestModule.cs b/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/DocsDomainTestModule.cs index df4d32e52b..c8ed977193 100644 --- a/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/DocsDomainTestModule.cs +++ b/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/DocsDomainTestModule.cs @@ -4,7 +4,8 @@ using Volo.Abp.Modularity; namespace Volo.Docs { [DependsOn( - typeof(DocsEntityFrameworkCoreTestModule) + typeof(DocsEntityFrameworkCoreTestModule), + typeof(DocsTestBaseModule) )] public class DocsDomainTestModule : AbpModule { diff --git a/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/DocumentStoreFactory_Tests.cs b/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/DocumentStoreFactory_Tests.cs new file mode 100644 index 0000000000..afd28bb8ca --- /dev/null +++ b/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/DocumentStoreFactory_Tests.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Shouldly; +using Volo.Docs.Documents; +using Volo.Docs.FileSystem.Documents; +using Volo.Docs.GitHub.Documents; +using Xunit; + +namespace Volo.Docs +{ + public class DocumentStoreFactory_Tests : DocsDomainTestBase + { + private readonly IDocumentStoreFactory _documentStoreFactory; + + public DocumentStoreFactory_Tests() + { + _documentStoreFactory = GetRequiredService(); + } + + [Fact] + public void Create() + { + _documentStoreFactory.Create(GithubDocumentStore.Type).GetType().ShouldBe(typeof(GithubDocumentStore)); + _documentStoreFactory.Create(FileSystemDocumentStore.Type).GetType().ShouldBe(typeof(FileSystemDocumentStore)); + } + } +} diff --git a/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/Project_Tests.cs b/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/Project_Tests.cs new file mode 100644 index 0000000000..808ff88afa --- /dev/null +++ b/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/Project_Tests.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Shouldly; +using Volo.Docs.Projects; +using Xunit; + +namespace Volo.Docs +{ + public class Project_Tests : DocsDomainTestBase + { + [Theory] + [InlineData("aaa")] + [InlineData("bbb")] + public void SetName(string name) + { + var project = new Project(Guid.NewGuid(), "ABP vNext", "ABP", "Github", "md", "index", + "docs-nav.json"); + project.SetName(name); + project.Name.ShouldBe(name); + } + + [Theory] + [InlineData("aaa")] + [InlineData("bbb")] + public void SetFormat(string format) + { + var project = new Project(Guid.NewGuid(), "ABP vNext", "ABP", "Github", "md", "index", + "docs-nav.json"); + project.SetFormat(format); + project.Format.ShouldBe(format); + } + + [Theory] + [InlineData("aaa")] + [InlineData("bbb")] + public void SetNavigationDocumentName(string navigationDocumentName) + { + var project = new Project(Guid.NewGuid(), "ABP vNext", "ABP", "Github", "md", "index", + "docs-nav.json"); + project.SetNavigationDocumentName(navigationDocumentName); + project.NavigationDocumentName.ShouldBe(navigationDocumentName); + } + + [Theory] + [InlineData("aaa")] + [InlineData("bbb")] + public void SetDefaultDocumentName(string defaultDocumentName) + { + var project = new Project(Guid.NewGuid(), "ABP vNext", "ABP", "Github", "md", "index", + "docs-nav.json"); + project.SetDefaultDocumentName(defaultDocumentName); + project.DefaultDocumentName.ShouldBe(defaultDocumentName); + } + } +} diff --git a/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/Volo/Docs/EntityFrameworkCore/DocsEntityFrameworkCoreTestModule.cs b/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/Volo/Docs/EntityFrameworkCore/DocsEntityFrameworkCoreTestModule.cs index 49448f0fdd..8a73b060cc 100644 --- a/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/Volo/Docs/EntityFrameworkCore/DocsEntityFrameworkCoreTestModule.cs +++ b/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/Volo/Docs/EntityFrameworkCore/DocsEntityFrameworkCoreTestModule.cs @@ -2,11 +2,11 @@ using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Storage; -using Microsoft.Extensions.DependencyInjection; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.Modularity; +using Volo.Docs.EntityFrameworkCore; -namespace Volo.Docs.EntityFrameworkCore +namespace Volo.Docs { [DependsOn( typeof(DocsTestBaseModule), diff --git a/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/Volo/Docs/EntityFrameworkCore/ProjectRepository_Tests.cs b/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/Volo/Docs/EntityFrameworkCore/ProjectRepository_Tests.cs new file mode 100644 index 0000000000..8aa3919905 --- /dev/null +++ b/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/Volo/Docs/EntityFrameworkCore/ProjectRepository_Tests.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Volo.Docs.EntityFrameworkCore +{ + public class ProjectRepository_Tests : ProjectRepository_Tests + { + + } +} diff --git a/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocsTestData.cs b/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocsTestData.cs index c6947a74f2..829195efe6 100644 --- a/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocsTestData.cs +++ b/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocsTestData.cs @@ -1,8 +1,10 @@ -using Volo.Abp.DependencyInjection; +using System; +using Volo.Abp.DependencyInjection; namespace Volo.Docs { public class DocsTestData : ISingletonDependency { + public Guid PorjectId { get; } = Guid.NewGuid(); } } diff --git a/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocsTestDataBuilder.cs b/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocsTestDataBuilder.cs index 6c8e769103..7950ea8348 100644 --- a/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocsTestDataBuilder.cs +++ b/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocsTestDataBuilder.cs @@ -1,5 +1,7 @@ using Volo.Abp.DependencyInjection; using Volo.Abp.Guids; +using Volo.Docs.GitHub.Documents; +using Volo.Docs.Projects; namespace Volo.Docs { @@ -7,18 +9,26 @@ namespace Volo.Docs { private readonly IGuidGenerator _guidGenerator; private DocsTestData _testData; + private IProjectRepository _projectRepository; public DocsTestDataBuilder( IGuidGenerator guidGenerator, - DocsTestData testData) + DocsTestData testData, IProjectRepository projectRepository) { _guidGenerator = guidGenerator; _testData = testData; + _projectRepository = projectRepository; } public void Build() { - + var project = new Project(_testData.PorjectId, "ABP vNext", "ABP", GithubDocumentStore.Type, "md", "index", + "docs-nav.json"); + project.ExtraProperties.Add("GitHubRootUrl", "https://github.com/abpframework/abp/tree/{version}/docs/en/"); + project.ExtraProperties.Add("GitHubAccessToken", "123456"); + project.ExtraProperties.Add("GitHubUserAgent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"); + + _projectRepository.Insert(project); } } } \ No newline at end of file diff --git a/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/ProjectRepository_Tests.cs b/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/ProjectRepository_Tests.cs new file mode 100644 index 0000000000..66c306bd4e --- /dev/null +++ b/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/ProjectRepository_Tests.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Shouldly; +using Volo.Abp.Modularity; +using Volo.Docs.Projects; +using Xunit; + +namespace Volo.Docs +{ + public abstract class ProjectRepository_Tests : DocsTestBase + where TStartupModule : IAbpModule + { + + protected readonly IProjectRepository _projectRepository; + + protected ProjectRepository_Tests() + { + _projectRepository = GetRequiredService(); ; + } + + [Fact] + public async Task GetListAsync() + { + var projects = await _projectRepository.GetListAsync(); + + projects.ShouldNotBeNull(); + projects.Count.ShouldBe(1); + } + + [Fact] + public async Task GetTotalProjectCount() + { + var count = await _projectRepository.GetTotalProjectCount(); + + count.ShouldBe(1); + } + + [Fact] + public async Task GetByShortNameAsync() + { + var project = await _projectRepository.GetByShortNameAsync("ABP"); + + project.ShouldNotBeNull(); + project.ShortName.ShouldBe("ABP"); + } + } +}