Skip to content

Commit 9c6b529

Browse files
authored
Merge pull request #39 from linkdotnet/feature/smoke-test
Added Smoke Test
2 parents f4a9e31 + 57027ef commit 9c6b529

File tree

5 files changed

+51
-5
lines changed

5 files changed

+51
-5
lines changed

LinkDotNet.Blog.IntegrationTests/LinkDotNet.Blog.IntegrationTests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<ItemGroup>
99
<PackageReference Include="bunit" Version="1.3.42" />
1010
<PackageReference Include="FluentAssertions" Version="6.2.0" />
11+
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.0" />
1112
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="6.0.0" />
1213
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0-preview-20211130-02" />
1314
<PackageReference Include="Moq" Version="4.16.1" />
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
using System.Threading.Tasks;
2+
using FluentAssertions;
3+
using LinkDotNet.Blog.Web;
4+
using Microsoft.AspNetCore.Mvc.Testing;
5+
using Xunit;
6+
7+
namespace LinkDotNet.Blog.IntegrationTests
8+
{
9+
public class SmokeTest : IClassFixture<WebApplicationFactory<Program>>
10+
{
11+
private readonly WebApplicationFactory<Program> factory;
12+
13+
public SmokeTest(WebApplicationFactory<Program> factory)
14+
{
15+
this.factory = factory.WithWebHostBuilder(builder =>
16+
{
17+
builder.UseSetting("PersistenceProvider", "InMemory");
18+
});
19+
}
20+
21+
[Fact]
22+
public async Task ShouldBootUpApplication()
23+
{
24+
var client = factory.CreateClient();
25+
26+
var result = await client.GetAsync("/");
27+
28+
result.IsSuccessStatusCode.Should().BeTrue();
29+
}
30+
}
31+
}

LinkDotNet.Blog.Web/LinkDotNet.Blog.Web.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@
3636
<AdditionalFiles Include="..\stylecop.json" Link="stylecop.json" />
3737
</ItemGroup>
3838

39+
<ItemGroup>
40+
<InternalsVisibleTo Include="LinkDotNet.Blog.IntegrationTests" />
41+
</ItemGroup>
42+
3943
<ItemGroup>
4044
<None Update="Shared\Giscus.razor.js">
4145
<DependentUpon>Giscus.razor</DependentUpon>

LinkDotNet.Blog.Web/Program.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
namespace LinkDotNet.Blog.Web;
1010

11-
public static class Program
11+
public class Program
1212
{
1313
public static void Main(string[] args)
1414
{
Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using LinkDotNet.Blog.Domain;
22
using LinkDotNet.Blog.Infrastructure.Persistence;
3-
using LinkDotNet.Blog.Infrastructure.Persistence.Sql;
43
using Microsoft.Extensions.Caching.Memory;
54
using Microsoft.Extensions.Configuration;
65
using Microsoft.Extensions.DependencyInjection;
@@ -11,27 +10,38 @@ public static class StorageProviderExtensions
1110
{
1211
public static void AddStorageProvider(this IServiceCollection services, IConfiguration configuration)
1312
{
13+
services.AddMemoryCache();
14+
1415
var persistenceProvider = PersistenceProvider.Create(configuration["PersistenceProvider"]);
1516

1617
if (persistenceProvider == PersistenceProvider.InMemory)
1718
{
1819
services.UseInMemoryAsStorageProvider();
20+
services.RegisterCachedRepository<Infrastructure.Persistence.InMemory.Repository<BlogPost>>();
1921
}
2022
else if (persistenceProvider == PersistenceProvider.RavenDb)
2123
{
2224
services.UseRavenDbAsStorageProvider();
25+
services.RegisterCachedRepository<Infrastructure.Persistence.RavenDb.Repository<BlogPost>>();
2326
}
2427
else if (persistenceProvider == PersistenceProvider.SqliteServer)
2528
{
2629
services.UseSqliteAsStorageProvider();
30+
services.RegisterCachedRepository<Infrastructure.Persistence.Sql.Repository<BlogPost>>();
2731
}
2832
else if (persistenceProvider == PersistenceProvider.SqlServer)
2933
{
3034
services.UseSqlAsStorageProvider();
35+
services.RegisterCachedRepository<Infrastructure.Persistence.Sql.Repository<BlogPost>>();
3136
}
37+
}
3238

33-
services.AddMemoryCache();
34-
services.AddScoped<Repository<BlogPost>>();
35-
services.AddScoped<IRepository<BlogPost>>(provider => new CachedRepository<BlogPost>(provider.GetRequiredService<Repository<BlogPost>>(), provider.GetRequiredService<IMemoryCache>()));
39+
private static void RegisterCachedRepository<TRepo>(this IServiceCollection services)
40+
where TRepo : class, IRepository<BlogPost>
41+
{
42+
services.AddScoped<TRepo>();
43+
services.AddScoped<IRepository<BlogPost>>(provider => new CachedRepository<BlogPost>(
44+
provider.GetRequiredService<TRepo>(),
45+
provider.GetRequiredService<IMemoryCache>()));
3646
}
3747
}

0 commit comments

Comments
 (0)