Skip to content

Commit

Permalink
Finish adding unit tests (#29)
Browse files Browse the repository at this point in the history
* at the begining of each sql functional test it should re-init the container to make sure we start clean
added more sql unit tests

* add ignite migrations tests

* add nswag tests

* add 1 unit test for health check

* add ignite serilog tests

* add Swashbuckle functional and unit tests

* add seq fixture container and seq functional tests

* more unit tests for sql

* export a random port for seq to avoid conflicts

* create SUT for OpenTelemetry (seq)
add an option to send the seq connection string from the fixture to the SUT (dynamic ports and so on)
  • Loading branch information
serban-cristian authored Aug 14, 2024
1 parent a0f40fa commit 3b89401
Show file tree
Hide file tree
Showing 30 changed files with 956 additions and 1 deletion.
63 changes: 63 additions & 0 deletions ES.FX.sln
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,22 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ES.FX.Ignite.AspNetCore.Hea
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ES.FX.Ignite.FluentValidation.Tests.SUT", "tests\ES.FX.Ignite.FluentValidation.Tests.SUT\ES.FX.Ignite.FluentValidation.Tests.SUT.csproj", "{8C7D4F05-178B-49D3-9FDE-4A591D3DB78C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ES.FX.Ignite.Migrations.Tests", "tests\ES.FX.Ignite.Migrations.Tests\ES.FX.Ignite.Migrations.Tests.csproj", "{105EE73D-2C22-4686-BFAC-0D2AA78BBEE4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ES.FX.Ignite.NSwag.Tests", "tests\ES.FX.Ignite.NSwag.Tests\ES.FX.Ignite.NSwag.Tests.csproj", "{4E6AAC13-3099-485F-9E28-94A5315FFC59}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ES.FX.Ignite.NSwag.Tests.SUT", "tests\ES.FX.Ignite.NSwag.Tests.SUT\ES.FX.Ignite.NSwag.Tests.SUT.csproj", "{0E9361C2-F1BA-4549-9842-A38B515830E4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ES.FX.Ignite.Serilog.Tests", "tests\ES.FX.Ignite.Serilog.Tests\ES.FX.Ignite.Serilog.Tests.csproj", "{44A6414B-8AED-4E0E-930B-C710E143F5A3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ES.FX.Ignite.Swashbuckle.Tests", "tests\ES.FX.Ignite.Swashbuckle.Tests\ES.FX.Ignite.Swashbuckle.Tests.csproj", "{43AB7F42-DE28-4492-8424-0F4EF3A058E3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ES.FX.Ignite.Swashbuckle.Tests.SUT", "tests\ES.FX.Ignite.Swashbuckle.Tests.SUT\ES.FX.Ignite.Swashbuckle.Tests.SUT.csproj", "{6C069A3F-F1C7-4852-84B0-210D6F35839C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ES.FX.Shared.Seq.Tests", "tests\ES.FX.Shared.Seq.Tests\ES.FX.Shared.Seq.Tests.csproj", "{3B260066-300E-4AD2-A0F7-BADED21F721D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ES.FX.Ignite.OpenTelemetry.Exporter.Seq.Tests", "tests\ES.FX.Ignite.OpenTelemetry.Exporter.Seq.Tests\ES.FX.Ignite.OpenTelemetry.Exporter.Seq.Tests.csproj", "{DEFC7CD8-D546-4F51-A7D8-48FD938CEF81}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ES.FX.Ignite.Azure.Common", "src\ES.FX.Ignite.Azure.Common\ES.FX.Ignite.Azure.Common.csproj", "{C936CEE8-34B3-435C-970F-200DB84D5177}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ES.FX.Ignite.Azure.Storage.Blobs", "src\ES.FX.Ignite.Azure.Storage.Blobs\ES.FX.Ignite.Azure.Storage.Blobs.csproj", "{03D880C3-F1F1-4746-ADEC-9F59CFD12519}"
Expand All @@ -136,6 +152,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ES.FX.Ignite.Azure.Storage.
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ES.FX.Ignite.Azure.Security.KeyVault.Secrets.Tests", "tests\ES.FX.Ignite.Azure.Security.KeyVault.Secrets.Tests\ES.FX.Ignite.Azure.Security.KeyVault.Secrets.Tests.csproj", "{497C425C-451C-4D46-9693-A609D06D946D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ES.FX.Ignite.OpenTelemetry.Exporter.Seq.Tests.SUT", "tests\ES.FX.Ignite.OpenTelemetry.Exporter.Seq.Tests.SUT\ES.FX.Ignite.OpenTelemetry.Exporter.Seq.Tests.SUT.csproj", "{55694C58-56AF-4FDF-8669-F955534CFBC1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ES.FX.Ignite.StackExchange.Redis", "src\ES.FX.Ignite.StackExchange.Redis\ES.FX.Ignite.StackExchange.Redis.csproj", "{4D59B23E-4E1D-4617-B23A-F8A2D23328DC}"
EndProject
Global
Expand Down Expand Up @@ -332,6 +350,38 @@ Global
{8C7D4F05-178B-49D3-9FDE-4A591D3DB78C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8C7D4F05-178B-49D3-9FDE-4A591D3DB78C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8C7D4F05-178B-49D3-9FDE-4A591D3DB78C}.Release|Any CPU.Build.0 = Release|Any CPU
{105EE73D-2C22-4686-BFAC-0D2AA78BBEE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{105EE73D-2C22-4686-BFAC-0D2AA78BBEE4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{105EE73D-2C22-4686-BFAC-0D2AA78BBEE4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{105EE73D-2C22-4686-BFAC-0D2AA78BBEE4}.Release|Any CPU.Build.0 = Release|Any CPU
{4E6AAC13-3099-485F-9E28-94A5315FFC59}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4E6AAC13-3099-485F-9E28-94A5315FFC59}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4E6AAC13-3099-485F-9E28-94A5315FFC59}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4E6AAC13-3099-485F-9E28-94A5315FFC59}.Release|Any CPU.Build.0 = Release|Any CPU
{0E9361C2-F1BA-4549-9842-A38B515830E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0E9361C2-F1BA-4549-9842-A38B515830E4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0E9361C2-F1BA-4549-9842-A38B515830E4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0E9361C2-F1BA-4549-9842-A38B515830E4}.Release|Any CPU.Build.0 = Release|Any CPU
{44A6414B-8AED-4E0E-930B-C710E143F5A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{44A6414B-8AED-4E0E-930B-C710E143F5A3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{44A6414B-8AED-4E0E-930B-C710E143F5A3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{44A6414B-8AED-4E0E-930B-C710E143F5A3}.Release|Any CPU.Build.0 = Release|Any CPU
{43AB7F42-DE28-4492-8424-0F4EF3A058E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{43AB7F42-DE28-4492-8424-0F4EF3A058E3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{43AB7F42-DE28-4492-8424-0F4EF3A058E3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{43AB7F42-DE28-4492-8424-0F4EF3A058E3}.Release|Any CPU.Build.0 = Release|Any CPU
{6C069A3F-F1C7-4852-84B0-210D6F35839C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6C069A3F-F1C7-4852-84B0-210D6F35839C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6C069A3F-F1C7-4852-84B0-210D6F35839C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6C069A3F-F1C7-4852-84B0-210D6F35839C}.Release|Any CPU.Build.0 = Release|Any CPU
{3B260066-300E-4AD2-A0F7-BADED21F721D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3B260066-300E-4AD2-A0F7-BADED21F721D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3B260066-300E-4AD2-A0F7-BADED21F721D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3B260066-300E-4AD2-A0F7-BADED21F721D}.Release|Any CPU.Build.0 = Release|Any CPU
{DEFC7CD8-D546-4F51-A7D8-48FD938CEF81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DEFC7CD8-D546-4F51-A7D8-48FD938CEF81}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DEFC7CD8-D546-4F51-A7D8-48FD938CEF81}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DEFC7CD8-D546-4F51-A7D8-48FD938CEF81}.Release|Any CPU.Build.0 = Release|Any CPU
{C936CEE8-34B3-435C-970F-200DB84D5177}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C936CEE8-34B3-435C-970F-200DB84D5177}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C936CEE8-34B3-435C-970F-200DB84D5177}.Release|Any CPU.ActiveCfg = Release|Any CPU
Expand Down Expand Up @@ -368,6 +418,10 @@ Global
{497C425C-451C-4D46-9693-A609D06D946D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{497C425C-451C-4D46-9693-A609D06D946D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{497C425C-451C-4D46-9693-A609D06D946D}.Release|Any CPU.Build.0 = Release|Any CPU
{55694C58-56AF-4FDF-8669-F955534CFBC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{55694C58-56AF-4FDF-8669-F955534CFBC1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{55694C58-56AF-4FDF-8669-F955534CFBC1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{55694C58-56AF-4FDF-8669-F955534CFBC1}.Release|Any CPU.Build.0 = Release|Any CPU
{4D59B23E-4E1D-4617-B23A-F8A2D23328DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4D59B23E-4E1D-4617-B23A-F8A2D23328DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4D59B23E-4E1D-4617-B23A-F8A2D23328DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
Expand Down Expand Up @@ -429,6 +483,14 @@ Global
{B8852433-2403-44D4-9F1A-CBC3D2B2D308} = {32548940-0629-46AC-B9BF-E7C41F1C49DE}
{114AEEC9-5002-447A-B8F8-935407D56601} = {32548940-0629-46AC-B9BF-E7C41F1C49DE}
{8C7D4F05-178B-49D3-9FDE-4A591D3DB78C} = {32548940-0629-46AC-B9BF-E7C41F1C49DE}
{105EE73D-2C22-4686-BFAC-0D2AA78BBEE4} = {32548940-0629-46AC-B9BF-E7C41F1C49DE}
{4E6AAC13-3099-485F-9E28-94A5315FFC59} = {32548940-0629-46AC-B9BF-E7C41F1C49DE}
{0E9361C2-F1BA-4549-9842-A38B515830E4} = {32548940-0629-46AC-B9BF-E7C41F1C49DE}
{44A6414B-8AED-4E0E-930B-C710E143F5A3} = {32548940-0629-46AC-B9BF-E7C41F1C49DE}
{43AB7F42-DE28-4492-8424-0F4EF3A058E3} = {32548940-0629-46AC-B9BF-E7C41F1C49DE}
{6C069A3F-F1C7-4852-84B0-210D6F35839C} = {32548940-0629-46AC-B9BF-E7C41F1C49DE}
{3B260066-300E-4AD2-A0F7-BADED21F721D} = {BD8EB348-8F5D-41BB-BA2E-6D5C7A71FAB5}
{DEFC7CD8-D546-4F51-A7D8-48FD938CEF81} = {32548940-0629-46AC-B9BF-E7C41F1C49DE}
{C936CEE8-34B3-435C-970F-200DB84D5177} = {5A5969AF-86CB-489B-B0DE-C0BAADF5B424}
{03D880C3-F1F1-4746-ADEC-9F59CFD12519} = {5A5969AF-86CB-489B-B0DE-C0BAADF5B424}
{EB2D9423-CDFF-4911-95F9-0A77FA7A750C} = {5A5969AF-86CB-489B-B0DE-C0BAADF5B424}
Expand All @@ -438,6 +500,7 @@ Global
{7D7DF31D-78DA-440F-A5E2-311C5CED142C} = {32548940-0629-46AC-B9BF-E7C41F1C49DE}
{ADABA0FD-C43E-4F2C-981F-480C186CFD72} = {32548940-0629-46AC-B9BF-E7C41F1C49DE}
{497C425C-451C-4D46-9693-A609D06D946D} = {32548940-0629-46AC-B9BF-E7C41F1C49DE}
{55694C58-56AF-4FDF-8669-F955534CFBC1} = {32548940-0629-46AC-B9BF-E7C41F1C49DE}
{4D59B23E-4E1D-4617-B23A-F8A2D23328DC} = {5A5969AF-86CB-489B-B0DE-C0BAADF5B424}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="8.0.8" />
<PackageReference Include="Moq" Version="4.20.70" />
<PackageReference Include="xunit" Version="2.9.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
<PrivateAssets>all</PrivateAssets>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
using ES.FX.Ignite.AspNetCore.HealthChecks.UI.Interceptors;
using HealthChecks.UI.Data;
using Microsoft.AspNetCore.Hosting.Server;
using Microsoft.AspNetCore.Hosting.Server.Features;
using Moq;

namespace ES.FX.Ignite.AspNetCore.HealthChecks.UI.Tests.Interceptors
{
public class IPv6LoopbackAddressInterceptorTests
{
[Fact]
public async Task OnCollectExecuting_ShouldFixRelativeHealthCheckAddresses_WhenUsingIPv6LoopbackAddress()
{
var server = new Mock<IServer>();
var addressFeature = new Mock<IServerAddressesFeature>();
addressFeature.Setup(f => f.Addresses).Returns(["http://[::]"]);
server.Setup(s => s.Features.Get<IServerAddressesFeature>()).Returns(addressFeature.Object);

var interceptor = new IPv6LoopbackAddressInterceptor(server.Object);
var configuration = new HealthCheckConfiguration { Uri = "/health" };

await interceptor.OnCollectExecuting(configuration);

Assert.Equal("http://[::1]/health", configuration.Uri);
}

[Fact]
public async Task OnCollectExecuting_ShouldIgnoreNonIP6OrCorrectURI()
{
var uri = "http://192.168.1.1/health";
var server = new Mock<IServer>();
var addressFeature = new Mock<IServerAddressesFeature>();

var interceptor = new IPv6LoopbackAddressInterceptor(server.Object);
var configuration = new HealthCheckConfiguration { Uri = uri };

await interceptor.OnCollectExecuting(configuration);

Assert.Equal(uri, configuration.Uri);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
using ES.FX.Ignite.Microsoft.EntityFrameworkCore.SqlServer.Configuration;
using ES.FX.Ignite.Microsoft.EntityFrameworkCore.HealthChecks;
using ES.FX.Ignite.Microsoft.EntityFrameworkCore.Migrations;
using ES.FX.Ignite.Microsoft.EntityFrameworkCore.SqlServer.Configuration;
using ES.FX.Ignite.Microsoft.EntityFrameworkCore.SqlServer.Hosting;
using ES.FX.Ignite.Microsoft.EntityFrameworkCore.SqlServer.Tests.Context;
using ES.FX.Ignite.Microsoft.EntityFrameworkCore.Tests.Context;
using ES.FX.Migrations.Abstractions;
using ES.FX.Shared.SqlServer.Tests.Fixtures;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Diagnostics.HealthChecks;
using Microsoft.Extensions.Hosting;

namespace ES.FX.Ignite.Microsoft.EntityFrameworkCore.SqlServer.Tests;
Expand All @@ -18,6 +22,8 @@ public class FunctionalTests(SqlServerContainerFixture sqlServerFixture)
[InlineData(true)]
public async Task CanConnect(bool useFactory)
{
await sqlServerFixture.InitializeAsync();

var builder = Host.CreateEmptyApplicationBuilder(null);

if (useFactory)
Expand Down Expand Up @@ -63,4 +69,100 @@ void ConfigureSqlServerDbContextOptionsBuilder(
typeof(TestDbContextDesignTimeFactory).Assembly.FullName);
}
}

[Theory]
[InlineData(false)]
[InlineData(true)]
public async Task HealthChecks(bool useFactory)
{
await sqlServerFixture.InitializeAsync();

var builder = Host.CreateEmptyApplicationBuilder(null);

if (useFactory)
builder.IgniteSqlServerDbContextFactory<TestDbContext>(
configureOptions: ConfigureOptions,
configureSqlServerDbContextOptionsBuilder: ConfigureSqlServerDbContextOptionsBuilder);
else
builder.IgniteSqlServerDbContext<TestDbContext>(
configureOptions: ConfigureOptions,
configureSqlServerDbContextOptionsBuilder: ConfigureSqlServerDbContextOptionsBuilder);

var app = builder.Build();

var context = app.Services.GetRequiredService<TestDbContext>();
Assert.True(await context.Database.CanConnectAsync());

var migrationsHealthChecks = new RelationalDbContextMigrationsHealthCheck<TestDbContext>(context);
var healthCheckContext = new HealthCheckContext();

var healthCheckResult = await migrationsHealthChecks.CheckHealthAsync(healthCheckContext);
Assert.True(healthCheckResult.Status == HealthStatus.Unhealthy);

await context.Database.MigrateAsync();
var pendingMigrations = await context.Database.GetPendingMigrationsAsync();
Assert.Empty(pendingMigrations);

healthCheckResult = await migrationsHealthChecks.CheckHealthAsync(healthCheckContext);
Assert.True(healthCheckResult.Status == HealthStatus.Healthy);
return;

void ConfigureOptions(SqlServerDbContextSparkOptions<TestDbContext> options)
{
options.ConnectionString = sqlServerFixture.GetConnectionString();
}

void ConfigureSqlServerDbContextOptionsBuilder(
SqlServerDbContextOptionsBuilder sqlServerDbContextOptionsBuilder)
{
sqlServerDbContextOptionsBuilder.MigrationsAssembly(
typeof(TestDbContextDesignTimeFactory).Assembly.FullName);
}
}

[Theory]
[InlineData(false)]
[InlineData(true)]
public async Task RelationalDbContextMigrationsTask(bool useFactory)
{
await sqlServerFixture.InitializeAsync();

var builder = Host.CreateEmptyApplicationBuilder(null);

if (useFactory)
builder.IgniteSqlServerDbContextFactory<TestDbContext>(
configureOptions: ConfigureOptions,
configureSqlServerDbContextOptionsBuilder: ConfigureSqlServerDbContextOptionsBuilder);
else
builder.IgniteSqlServerDbContext<TestDbContext>(
configureOptions: ConfigureOptions,
configureSqlServerDbContextOptionsBuilder: ConfigureSqlServerDbContextOptionsBuilder);

builder.AddDbContextMigrationsTask<TestDbContext>();

var app = builder.Build();

var context = app.Services.GetRequiredService<TestDbContext>();
var migrationTask = app.Services.GetRequiredService<IMigrationsTask>();
var pendingMigrations = await context.Database.GetPendingMigrationsAsync();
Assert.NotEmpty(pendingMigrations);

await migrationTask.ApplyMigrations();
pendingMigrations = await context.Database.GetPendingMigrationsAsync();
Assert.Empty(pendingMigrations);

return;

void ConfigureOptions(SqlServerDbContextSparkOptions<TestDbContext> options)
{
options.ConnectionString = sqlServerFixture.GetConnectionString();
}

void ConfigureSqlServerDbContextOptionsBuilder(
SqlServerDbContextOptionsBuilder sqlServerDbContextOptionsBuilder)
{
sqlServerDbContextOptionsBuilder.MigrationsAssembly(
typeof(TestDbContextDesignTimeFactory).Assembly.FullName);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
<PackageReference Include="Moq" Version="4.20.70" />
<PackageReference Include="xunit" Version="2.9.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
<PrivateAssets>all</PrivateAssets>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>

<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
<PackageReference Include="Moq" Version="4.20.70" />
<PackageReference Include="xunit" Version="2.9.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\src\ES.FX.Ignite.Migrations\ES.FX.Ignite.Migrations.csproj" />
</ItemGroup>

<ItemGroup>
<Using Include="Xunit" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
using Microsoft.Extensions.Hosting;
using ES.FX.Ignite.Migrations.Hosting;
using ES.FX.Ignite.Spark.Exceptions;
using Microsoft.Extensions.DependencyInjection;
using ES.FX.Ignite.Migrations.Service;
using ES.FX.Ignite.Migrations.Configuration;

namespace ES.FX.Ignite.Migrations.Tests.Hosting
{
public class MigrationsServiceHostingExtensionsTests
{
[Fact]
public void IgniteDoesNotAllowReconfiguration()
{
var builder = Host.CreateEmptyApplicationBuilder(null);

builder.IgniteMigrationsService();

Assert.Throws<ReconfigurationNotSupportedException>(() => builder.IgniteMigrationsService());
}

[Fact]
public void IgniteShouldAddTheServices()
{
var builder = Host.CreateEmptyApplicationBuilder(null);

builder.IgniteMigrationsService();

var serviceProvider = builder.Build().Services;
var migrationService = serviceProvider.GetRequiredService<IHostedService>();
Assert.True(migrationService is MigrationsService);
Assert.NotNull(serviceProvider.GetRequiredService<MigrationsServiceSparkSettings>());
}
}
}
Loading

0 comments on commit 3b89401

Please sign in to comment.