Browse Source

Merge pull request #3982 from abpframework/maliming/mongodb-patch

Define CollectionFixture in each test project.
pull/4453/head
Halil İbrahim Kalkan 6 years ago
committed by GitHub
parent
commit
4bd49ef389
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs
  2. 70
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateRemoveMongodbCollectionFixtureStep.cs
  3. 55
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateSwitchEntityFrameworkCoreToMongoDbStep.cs
  4. 11
      templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationCollection.cs
  5. 1
      templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/Samples/SampleAppServiceTests.cs
  6. 11
      templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainCollection.cs
  7. 1
      templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/Samples/SampleDomainTests.cs
  8. 10
      templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreCollection.cs
  9. 10
      templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreCollectionFixtureBase.cs
  10. 12
      templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreFixture.cs
  11. 1
      templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/Samples/SampleRepositoryTests.cs
  12. 10
      templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDb/MongoTestCollection.cs
  13. 10
      templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDb/MyProjectNameMongoCollection.cs
  14. 10
      templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDb/MyProjectNameMongoDbCollectionFixtureBase.cs
  15. 4
      templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDb/MyProjectNameMongoDbFixture.cs
  16. 8
      templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDb/MyProjectNameMongoDbTestModule.cs
  17. 2
      templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDb/Samples/SampleRepositoryTests.cs
  18. 7
      templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestConsts.cs
  19. 11
      templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebCollection.cs
  20. 1
      templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/Pages/Index_Tests.cs

3
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs

@ -47,6 +47,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
if (context.BuildArgs.DatabaseProvider != DatabaseProvider.MongoDb)
{
steps.Add(new AppTemplateRemoveMongodbCollectionFixtureStep());
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.MongoDB"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.MongoDB.Tests", projectFolderPath: "/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests"));
}
@ -167,4 +168,4 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
}
}
}
}
}

70
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateRemoveMongodbCollectionFixtureStep.cs

@ -0,0 +1,70 @@
using System.Collections.Generic;
using System.Linq;
using Volo.Abp.Cli.ProjectBuilding.Building;
namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
{
public class AppTemplateRemoveMongodbCollectionFixtureStep : ProjectBuildPipelineStep
{
public override void Execute(ProjectBuildContext context)
{
//MyCompanyName.MyProjectName.Application.Tests
RemoveFile(context, "/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationCollection.cs");
RemoveKeyword(context,
"/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/Samples/SampleAppServiceTests.cs",
"[Collection(MyProjectNameTestConsts.CollectionDefinitionName)]");
//MyCompanyName.MyProjectName.Domain.Tests
RemoveFile(context, "/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainCollection.cs");
RemoveKeyword(context,
"/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/Samples/SampleDomainTests.cs",
"[Collection(MyProjectNameTestConsts.CollectionDefinitionName)]");
//MyCompanyName.MyProjectName.EntityFrameworkCore.Tests
RemoveFile(context, "/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreCollection.cs");
RemoveFile(context, "/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreCollectionFixtureBase.cs");
RemoveFile(context, "/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreFixture.cs");
RemoveKeyword(context,
"/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/Samples/SampleRepositoryTests.cs",
"[Collection(MyProjectNameTestConsts.CollectionDefinitionName)]");
//MyCompanyName.MyProjectName.Web.Tests
RemoveFile(context, "/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebCollection.cs");
RemoveKeyword(context,
"/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/Pages/Index_Tests.cs",
"[Collection(MyProjectNameTestConsts.CollectionDefinitionName)]");
//MyCompanyName.MyProjectName.TestBase
RemoveFile(context, "/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestConsts.cs");
}
private static void RemoveFile(ProjectBuildContext context, string targetModuleFilePath)
{
var file = context.Files.FirstOrDefault(x => x.Name == targetModuleFilePath);
if (file != null)
{
context.Files.Remove(file);
}
}
private static void RemoveKeyword(ProjectBuildContext context, string targetModuleFilePath, string keyword)
{
var file = context.GetFile(targetModuleFilePath);
file.NormalizeLineEndings();
var lines = file.GetLines();
var newLines = new List<string>();
for (var i = 0; i < lines.Length; i++)
{
if (!lines[i].Contains(keyword))
{
newLines.Add(lines[i]);
}
}
file.SetLines(newLines);
}
}
}

55
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateSwitchEntityFrameworkCoreToMongoDbStep.cs

@ -16,7 +16,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
"MongoDB"
);
ChangeModuleDependency(
ChangeNamespaceAndKeyword(
context,
"/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs",
"MyCompanyName.MyProjectName.EntityFrameworkCore",
@ -39,7 +39,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
"MongoDB"
);
ChangeModuleDependency(
ChangeNamespaceAndKeyword(
context,
"/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs",
"MyCompanyName.MyProjectName.EntityFrameworkCore",
@ -62,7 +62,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
"MongoDB"
);
ChangeModuleDependency(
ChangeNamespaceAndKeyword(
context,
"/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs",
"MyCompanyName.MyProjectName.EntityFrameworkCore",
@ -85,7 +85,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
"MongoDB"
);
ChangeModuleDependency(
ChangeNamespaceAndKeyword(
context,
"/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs",
"MyCompanyName.MyProjectName.EntityFrameworkCore",
@ -108,7 +108,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
"MongoDB"
);
ChangeModuleDependency(
ChangeNamespaceAndKeyword(
context,
"/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyProjectNameDbMigratorModule.cs",
"MyCompanyName.MyProjectName.EntityFrameworkCore",
@ -131,7 +131,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
"MongoDB.Tests"
);
ChangeModuleDependency(
ChangeNamespaceAndKeyword(
context,
"/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestModule.cs",
"MyCompanyName.MyProjectName.EntityFrameworkCore",
@ -139,6 +139,37 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
"MyProjectNameEntityFrameworkCoreTestModule",
"MyProjectNameMongoDbTestModule"
);
ChangeNamespaceAndKeyword(
context,
"/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainCollection.cs",
"MyCompanyName.MyProjectName.EntityFrameworkCore",
"MyCompanyName.MyProjectName.MongoDB",
"MyProjectNameEntityFrameworkCoreCollectionFixtureBase",
"MyProjectNameMongoDbCollectionFixtureBase"
);
//MyCompanyName.MyProjectName.Application.Tests
ChangeNamespaceAndKeyword(
context,
"/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationCollection.cs",
"MyCompanyName.MyProjectName.EntityFrameworkCore",
"MyCompanyName.MyProjectName.MongoDB",
"MyProjectNameEntityFrameworkCoreCollectionFixtureBase",
"MyProjectNameMongoDbCollectionFixtureBase"
);
//MyCompanyName.MyProjectName.Web.Tests
ChangeNamespaceAndKeyword(
context,
"/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebCollection.cs",
"MyCompanyName.MyProjectName.EntityFrameworkCore",
"MyCompanyName.MyProjectName.MongoDB",
"MyProjectNameEntityFrameworkCoreCollectionFixtureBase",
"MyProjectNameMongoDbCollectionFixtureBase"
);
}
private void ChangeProjectReference(
@ -165,13 +196,13 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
throw new ApplicationException($"Could not find the '{oldReference}' reference in the project '{targetProjectFilePath}'!");
}
private void ChangeModuleDependency(
private void ChangeNamespaceAndKeyword(
ProjectBuildContext context,
string targetModuleFilePath,
string oldNamespace,
string newNamespace,
string oldModuleName,
string newModuleName)
string oldKeyword,
string newKeyword)
{
var file = context.GetFile(targetModuleFilePath);
@ -185,9 +216,9 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
{
lines[i] = $"using {newNamespace};";
}
else if (lines[i].Contains(oldModuleName))
else if (lines[i].Contains(oldKeyword))
{
lines[i] = lines[i].Replace(oldModuleName, newModuleName);
lines[i] = lines[i].Replace(oldKeyword, newKeyword);
}
}
@ -216,4 +247,4 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
throw new ApplicationException("Could not find the 'Default' connection string in appsettings.json file!");
}
}
}
}

11
templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationCollection.cs

@ -0,0 +1,11 @@
using MyCompanyName.MyProjectName.EntityFrameworkCore;
using Xunit;
namespace MyCompanyName.MyProjectName
{
[CollectionDefinition(MyProjectNameTestConsts.CollectionDefinitionName)]
public class MyProjectNameApplicationCollection : MyProjectNameEntityFrameworkCoreCollectionFixtureBase
{
}
}

1
templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/Samples/SampleAppServiceTests.cs

@ -10,6 +10,7 @@ namespace MyCompanyName.MyProjectName.Samples
* (like IIdentityUserAppService here).
* Only test your own application services.
*/
[Collection(MyProjectNameTestConsts.CollectionDefinitionName)]
public class SampleAppServiceTests : MyProjectNameApplicationTestBase
{
private readonly IIdentityUserAppService _userAppService;

11
templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainCollection.cs

@ -0,0 +1,11 @@
using MyCompanyName.MyProjectName.EntityFrameworkCore;
using Xunit;
namespace MyCompanyName.MyProjectName
{
[CollectionDefinition(MyProjectNameTestConsts.CollectionDefinitionName)]
public class MyProjectNameDomainCollection : MyProjectNameEntityFrameworkCoreCollectionFixtureBase
{
}
}

1
templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/Samples/SampleDomainTests.cs

@ -10,6 +10,7 @@ namespace MyCompanyName.MyProjectName.Samples
* (like IdentityUserManager here).
* Only test your own domain services.
*/
[Collection(MyProjectNameTestConsts.CollectionDefinitionName)]
public class SampleDomainTests : MyProjectNameDomainTestBase
{
private readonly IIdentityUserRepository _identityUserRepository;

10
templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreCollection.cs

@ -0,0 +1,10 @@
using Xunit;
namespace MyCompanyName.MyProjectName.EntityFrameworkCore
{
[CollectionDefinition(MyProjectNameTestConsts.CollectionDefinitionName)]
public class MyProjectNameEntityFrameworkCoreCollection : ICollectionFixture<MyProjectNameEntityFrameworkCoreFixture>
{
}
}

10
templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreCollectionFixtureBase.cs

@ -0,0 +1,10 @@
using MyCompanyName.MyProjectName.EntityFrameworkCore;
using Xunit;
namespace MyCompanyName.MyProjectName.EntityFrameworkCore
{
public class MyProjectNameEntityFrameworkCoreCollectionFixtureBase : ICollectionFixture<MyProjectNameEntityFrameworkCoreFixture>
{
}
}

12
templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreFixture.cs

@ -0,0 +1,12 @@
using System;
namespace MyCompanyName.MyProjectName.EntityFrameworkCore
{
public class MyProjectNameEntityFrameworkCoreFixture : IDisposable
{
public void Dispose()
{
}
}
}

1
templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/Samples/SampleRepositoryTests.cs

@ -14,6 +14,7 @@ namespace MyCompanyName.MyProjectName.EntityFrameworkCore.Samples
* (like default AppUser repository IRepository<AppUser, Guid> here).
* Only test your custom repository methods.
*/
[Collection(MyProjectNameTestConsts.CollectionDefinitionName)]
public class SampleRepositoryTests : MyProjectNameEntityFrameworkCoreTestBase
{
private readonly IRepository<AppUser, Guid> _appUserRepository;

10
templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDb/MongoTestCollection.cs

@ -1,10 +0,0 @@
using Xunit;
namespace MyCompanyName.MyProjectName.MongoDB
{
[CollectionDefinition(Name)]
public class MongoTestCollection : ICollectionFixture<MongoDbFixture>
{
public const string Name = "MongoDB Collection";
}
}

10
templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDb/MyProjectNameMongoCollection.cs

@ -0,0 +1,10 @@
using Xunit;
namespace MyCompanyName.MyProjectName.MongoDB
{
[CollectionDefinition(MyProjectNameTestConsts.CollectionDefinitionName)]
public class MyProjectNameMongoCollection : MyProjectNameMongoDbCollectionFixtureBase
{
}
}

10
templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDb/MyProjectNameMongoDbCollectionFixtureBase.cs

@ -0,0 +1,10 @@
using MyCompanyName.MyProjectName.MongoDB;
using Xunit;
namespace MyCompanyName.MyProjectName.MongoDB
{
public class MyProjectNameMongoDbCollectionFixtureBase : ICollectionFixture<MyProjectNameMongoDbFixture>
{
}
}

4
templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDb/MongoDbFixture.cs → templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDb/MyProjectNameMongoDbFixture.cs

@ -3,12 +3,12 @@ using Mongo2Go;
namespace MyCompanyName.MyProjectName.MongoDB
{
public class MongoDbFixture : IDisposable
public class MyProjectNameMongoDbFixture : IDisposable
{
private static readonly MongoDbRunner MongoDbRunner;
public static readonly string ConnectionString;
static MongoDbFixture()
static MyProjectNameMongoDbFixture()
{
MongoDbRunner = MongoDbRunner.Start();
ConnectionString = MongoDbRunner.ConnectionString;

8
templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDb/MyProjectNameMongoDbTestModule.cs

@ -12,9 +12,9 @@ namespace MyCompanyName.MyProjectName.MongoDB
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
var connectionString = MongoDbFixture.ConnectionString.EnsureEndsWith('/') +
"Db_" +
Guid.NewGuid().ToString("N");
var connectionString = MyProjectNameMongoDbFixture.ConnectionString.EnsureEndsWith('/') +
"Db_" +
Guid.NewGuid().ToString("N");
Configure<AbpDbConnectionOptions>(options =>
{
@ -22,4 +22,4 @@ namespace MyCompanyName.MyProjectName.MongoDB
});
}
}
}
}

2
templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDb/Samples/SampleRepositoryTests.cs

@ -13,7 +13,7 @@ namespace MyCompanyName.MyProjectName.MongoDB.Samples
* (like default AppUser repository IRepository<AppUser, Guid> here).
* Only test your custom repository methods.
*/
[Collection(MongoTestCollection.Name)]
[Collection(MyProjectNameTestConsts.CollectionDefinitionName)]
public class SampleRepositoryTests : MyProjectNameMongoDbTestBase
{
private readonly IRepository<AppUser, Guid> _appUserRepository;

7
templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestConsts.cs

@ -0,0 +1,7 @@
namespace MyCompanyName.MyProjectName
{
public static class MyProjectNameTestConsts
{
public const string CollectionDefinitionName = "MyProjectName collection";
}
}

11
templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebCollection.cs

@ -0,0 +1,11 @@
using MyCompanyName.MyProjectName.EntityFrameworkCore;
using Xunit;
namespace MyCompanyName.MyProjectName
{
[CollectionDefinition(MyProjectNameTestConsts.CollectionDefinitionName)]
public class MyProjectNameWebCollection : MyProjectNameEntityFrameworkCoreCollectionFixtureBase
{
}
}

1
templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/Pages/Index_Tests.cs

@ -4,6 +4,7 @@ using Xunit;
namespace MyCompanyName.MyProjectName.Pages
{
[Collection(MyProjectNameTestConsts.CollectionDefinitionName)]
public class Index_Tests : MyProjectNameWebTestBase
{
[Fact]

Loading…
Cancel
Save