Skip to content

Commit f26b520

Browse files
Split into two projects with separate assemblies to make initialization work for both Commerce and Cms
1 parent 5b9b0a0 commit f26b520

File tree

12 files changed

+129
-69
lines changed

12 files changed

+129
-69
lines changed

test/OptimizelyTestContainers.Tests/CommerceCatalogIntegrationTests.cs renamed to Optimizely.TestContainers.Commerce.Tests/CommerceCatalogIntegrationTests.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@
77
using Mediachase.Commerce;
88
using Mediachase.Commerce.Catalog;
99
using Microsoft.Extensions.DependencyInjection;
10-
using Optimizely.TestContainers.Models.Commerce;
10+
using Optimizely.TestContainers.Commerce.Tests.Models.Commerce;
11+
using Optimizely.TestContainers.Shared;
1112

12-
namespace OptimizelyTestContainers.Tests;
13+
namespace Optimizely.TestContainers.Commerce.Tests;
1314

1415
public class CommerceCatalogIntegrationTests() : OptimizelyIntegrationTestBase(includeCommerce: true)
1516
{

src/Web/Models/Commerce/TestProduct.cs renamed to Optimizely.TestContainers.Commerce.Tests/Models/Commerce/TestProduct.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
using System.ComponentModel.DataAnnotations;
22
using EPiServer.Commerce.Catalog.ContentTypes;
33
using EPiServer.Commerce.Catalog.DataAnnotations;
4+
using EPiServer.Core;
5+
using EPiServer.DataAbstraction;
6+
using EPiServer.DataAnnotations;
47

5-
namespace Optimizely.TestContainers.Models.Commerce;
8+
namespace Optimizely.TestContainers.Commerce.Tests.Models.Commerce;
69

710
[CatalogContentType(
811
GUID = "0B06DE9B-6AE3-40FB-909E-E718CCC260AE",

src/Web/StartupWithCmsAndCommerce.cs renamed to Optimizely.TestContainers.Commerce.Tests/Startup.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,14 @@
22
using EPiServer.Cms.UI.AspNetIdentity;
33
using EPiServer.Scheduler;
44
using EPiServer.Web.Routing;
5+
using Microsoft.AspNetCore.Builder;
6+
using Microsoft.AspNetCore.Hosting;
7+
using Microsoft.Extensions.DependencyInjection;
8+
using Microsoft.Extensions.Hosting;
59

6-
namespace Optimizely.TestContainers;
10+
namespace Optimizely.TestContainers.Commerce.Tests;
711

8-
public class StartupWithCmsAndCommerce(IWebHostEnvironment webHostingEnvironment)
12+
public class Startup(IWebHostEnvironment webHostingEnvironment)
913
{
1014
public void ConfigureServices(IServiceCollection services)
1115
{
@@ -21,7 +25,7 @@ public void ConfigureServices(IServiceCollection services)
2125
.AddCms()
2226
.AddCommerce()
2327
.AddAdminUserRegistration()
24-
.AddEmbeddedLocalization<StartupWithCms>();
28+
.AddEmbeddedLocalization<Startup>();
2529
}
2630

2731
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net9.0</TargetFramework>
5+
<ImplicitUsings>enable</ImplicitUsings>
6+
<Nullable>enable</Nullable>
7+
<RootNamespace>Optimizely.TestContainers.Cms</RootNamespace>
8+
</PropertyGroup>
9+
10+
</Project>

test/OptimizelyTestContainers.Tests/OptimizelyIntegrationTestBase.cs renamed to Optimizely.TestContainers.Shared/OptimizelyIntegrationTestBase.cs

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
1-
using EPiServer.Framework;
1+
using EPiServer.Data;
2+
using EPiServer.Framework;
23
using EPiServer.Framework.Initialization;
3-
using Mediachase.Data.Provider;
4-
using Microsoft.AspNetCore.Hosting;
54
using Microsoft.Data.SqlClient;
65
using Microsoft.Extensions.Configuration;
76
using Microsoft.Extensions.DependencyInjection;
87
using Microsoft.Extensions.Hosting;
9-
using Optimizely.TestContainers;
108
using Testcontainers.MsSql;
119

12-
namespace OptimizelyTestContainers.Tests;
10+
namespace Optimizely.TestContainers.Shared;
1311

1412
public class OptimizelyIntegrationTestBase(bool includeCommerce) : IAsyncLifetime
1513
{
@@ -29,10 +27,10 @@ public virtual async Task InitializeAsync()
2927
var cmsDatabaseConnectionString = await CreateNamedDatabaseConnectionString(container, "Cms");
3028

3129
string? commerceDatabaseConnectionString = null;
32-
if (includeCommerce)
33-
{
30+
/*if (includeCommerce)
31+
{*/
3432
commerceDatabaseConnectionString = await CreateNamedDatabaseConnectionString(container, "Commerce");
35-
}
33+
/*}*/
3634

3735

3836
// Build CMS host
@@ -42,14 +40,21 @@ public virtual async Task InitializeAsync()
4240
webHostBuilder
4341
.ConfigureServices((context, services) =>
4442
{
43+
// TODO: Only include in CMS test
4544
// Add data importer service to setup default content for the tests
46-
services.AddTransient<OptimizelyDataImporter>();
45+
//services.AddTransient<OptimizelyDataImporter>();
46+
47+
// Must be set here too for initialization to work for CMS
48+
services.Configure<DataAccessOptions>(o =>
49+
{
50+
o.SetConnectionString(cmsDatabaseConnectionString);
51+
});
4752
})
4853
.ConfigureAppConfiguration((context, configBuilder) =>
4954
{
5055
// Workaround to set separate database names inisde container
51-
if (includeCommerce && !string.IsNullOrWhiteSpace(commerceDatabaseConnectionString))
52-
{
56+
/*if (includeCommerce && !string.IsNullOrWhiteSpace(commerceDatabaseConnectionString))
57+
{*/
5358
var testSettings = new Dictionary<string, string?>
5459
{
5560
// TODO: Find Constant for connection string!
@@ -58,26 +63,30 @@ public virtual async Task InitializeAsync()
5863
};
5964

6065
configBuilder.AddInMemoryCollection(testSettings);
61-
}
66+
/*}*/
6267
});
6368

69+
// TOOD: Run startup in each test project!
6470
if (includeCommerce && !string.IsNullOrWhiteSpace(commerceDatabaseConnectionString))
6571
{
66-
webHostBuilder.UseStartup<StartupWithCmsAndCommerce>();
72+
//webHostBuilder.UseStartup<StartupWithCmsAndCommerce>();
6773
}
6874
else
6975
{
70-
webHostBuilder.UseStartup<StartupWithCms>();
76+
//webHostBuilder.UseStartup<StartupWithCms>();
7177
}
78+
79+
7280

7381
})
7482
.ConfigureCmsDefaults()
7583
.Build();
84+
85+
// TOOD:Try to remove this as well!
86+
//AssemblyScanner.ExcludedAssemblies.Add("Mediachase");
87+
//AssemblyScanner.ExcludedAssemblies.Add("EPiServer.Commerce");
7688

7789
// Run initialization engine (simulate application startup)
78-
79-
// TODO: Runs all initializable modules even if commerce is not included!
80-
// Solve with custom IAssemblyScanner?
8190
var initializer = _host.Services.GetRequiredService<InitializationEngine>();
8291
if (initializer.InitializationState != InitializationState.Initialized)
8392
initializer.Initialize();

OptimizelyTestContainers.slnx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
<Solution>
2+
<Project Path="Optimizely.TestContainers.Commerce.Tests\Optimizely.TestContainers.Commerce.Tests.csproj" Type="Classic C#" />
3+
<Project Path="Optimizely.TestContainers.Commerce\Optimizely.TestContainers.Commerce.csproj" Type="Classic C#" />
4+
<Project Path="Optimizely.TestContainers.Shared\Optimizely.TestContainers.Shared.csproj" Type="Classic C#" />
25
<Project Path="src/Web/Optimizely.TestContainers.csproj" />
36
<Project Path="test/OptimizelyTestContainers.Tests/OptimizelyTestContainers.Tests.csproj" />
4-
</Solution>
7+
</Solution>

src/Web/Optimizely.TestContainers.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,8 @@
2626
<ItemGroup>
2727
<EmbeddedResource Include="Resources\Translations\**\*" />
2828
</ItemGroup>
29+
30+
<ItemGroup>
31+
<ProjectReference Include="..\..\Optimizely.TestContainers.Commerce.Tests\Optimizely.TestContainers.Commerce.Tests.csproj" />
32+
</ItemGroup>
2933
</Project>

src/Web/Program.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1+
using Optimizely.TestContainers.Commerce.Tests;
2+
13
namespace Optimizely.TestContainers;
24

35
public class Program
46
{
57
public static void Main(string[] args) => CreateHostBuilder(args).Build().Run();
68

7-
// Split Startup into two classes StartupWithCmsAndCommerce and StartupWithCms to be able to test both in isolation
89
public static IHostBuilder CreateHostBuilder(string[] args) =>
910
Host.CreateDefaultBuilder(args)
1011
.ConfigureCmsDefaults()
11-
.ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup<StartupWithCmsAndCommerce>());
12+
.ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup<Startup>());
1213
}

src/Web/StartupWithCms.cs

Lines changed: 0 additions & 43 deletions
This file was deleted.

test/OptimizelyTestContainers.Tests/NewsPageIntegrationTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using EPiServer.Web;
77
using Microsoft.Extensions.DependencyInjection;
88
using Optimizely.TestContainers.Models.Pages;
9+
using Optimizely.TestContainers.Shared;
910

1011
namespace OptimizelyTestContainers.Tests;
1112

0 commit comments

Comments
 (0)