Skip to content

Commit 54fdc6b

Browse files
committed
Updated project and test configuration to run migrations automatically
1 parent fa065c6 commit 54fdc6b

File tree

13 files changed

+40
-34
lines changed

13 files changed

+40
-34
lines changed

Core.Marten/Config.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,11 @@ private static void SetStoreOptions(StoreOptions options, Config config,
5353
{
5454
options.Connection(config.ConnectionString);
5555
options.AutoCreateSchemaObjects = AutoCreate.CreateOrUpdate;
56-
options.Events.DatabaseSchemaName = config.WriteModelSchema;
57-
options.DatabaseSchemaName = config.ReadModelSchema;
56+
57+
var schemaName = Environment.GetEnvironmentVariable("SchemaName");
58+
options.Events.DatabaseSchemaName = schemaName ?? config.WriteModelSchema;
59+
options.DatabaseSchemaName = schemaName ?? config.ReadModelSchema;
60+
5861
options.UseDefaultSerialization(nonPublicMembersStorage: NonPublicMembersStorage.NonPublicSetters,
5962
enumStorage: EnumStorage.AsString);
6063
options.PLV8Enabled = false;

Core.Testing/ApiFixture.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ public abstract class ApiFixture: IAsyncLifetime
3131

3232
protected ApiFixture()
3333
{
34+
Environment.SetEnvironmentVariable("SchemaName", GetType().Name.ToLower());
35+
3436
Sut = CreateTestContext();
3537
}
3638

Core.Testing/TestWebHostBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public static IWebHostBuilder Create(Dictionary<string, string> configuration, A
1515
configureServices ??= _ => { };
1616

1717
return new WebHostBuilder()
18-
.UseEnvironment("Tests")
18+
.UseEnvironment("Development")
1919
.UseContentRoot(projectDir)
2020
.UseConfiguration(new ConfigurationBuilder()
2121
.SetBasePath(projectDir)

Sample/MeetingsManagement/MeetingsManagement.IntegrationTests/Meetings/CreateMeetingTests.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ public CreateMeetingTests(CreateMeetingFixture fixture)
4545
}
4646

4747
[Fact]
48-
[Trait("Category", "Exercise")]
4948
public async Task CreateCommand_ShouldReturn_CreatedStatus_With_MeetingId()
5049
{
5150
var commandResponse = fixture.CommandResponse;
@@ -58,7 +57,6 @@ public async Task CreateCommand_ShouldReturn_CreatedStatus_With_MeetingId()
5857
}
5958

6059
[Fact]
61-
[Trait("Category", "Exercise")]
6260
public void CreateCommand_ShouldPublish_MeetingCreateEvent()
6361
{
6462
// assert MeetingCreated event was produced to external bus
@@ -70,7 +68,6 @@ public void CreateCommand_ShouldPublish_MeetingCreateEvent()
7068
}
7169

7270
[Fact]
73-
[Trait("Category", "Exercise")]
7471
public async Task CreateCommand_ShouldUpdateReadModel()
7572
{
7673
// prepare query

Sample/MeetingsManagement/MeetingsManagement.IntegrationTests/Meetings/ScheduleMeetingTests.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ public ScheduleMeetingTests(ScheduleMeetingFixture fixture)
5353
}
5454

5555
[Fact]
56-
[Trait("Category", "Exercise")]
5756
public async Task CreateMeeting_ShouldReturn_CreatedStatus_With_MeetingId()
5857
{
5958
var commandResponse = fixture.CreateMeetingCommandResponse.EnsureSuccessStatusCode();
@@ -64,7 +63,6 @@ public async Task CreateMeeting_ShouldReturn_CreatedStatus_With_MeetingId()
6463
}
6564

6665
[Fact]
67-
[Trait("Category", "Exercise")]
6866
public async Task ScheduleMeeting_ShouldSucceed()
6967
{
7068
var commandResponse = fixture.ScheduleMeetingCommandResponse.EnsureSuccessStatusCode();
@@ -75,7 +73,6 @@ public async Task ScheduleMeeting_ShouldSucceed()
7573
}
7674

7775
[Fact]
78-
[Trait("Category", "Exercise")]
7976
public async Task ScheduleMeeting_ShouldUpdateReadModel()
8077
{
8178
//send query

Sample/Warehouse/Warehouse.Api.Tests/Products/GettingProductDetails/GetProductDetailsTests.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
using System;
2-
using System.Collections.Generic;
32
using System.Net;
43
using System.Threading.Tasks;
54
using Core.Testing;
65
using FluentAssertions;
76
using Microsoft.AspNetCore.Hosting;
87
using Warehouse.Products.GettingProductDetails;
9-
using Warehouse.Products.GettingProducts;
108
using Warehouse.Products.RegisteringProduct;
119
using Xunit;
1210

Sample/Warehouse/Warehouse.Api.Tests/WarehouseTestWebHostBuilder.cs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
using Castle.Core.Configuration;
2-
using Core.WebApi.Middlewares.ExceptionHandling;
1+
using Core.WebApi.Middlewares.ExceptionHandling;
32
using Microsoft.AspNetCore.Builder;
43
using Microsoft.AspNetCore.Hosting;
54
using Microsoft.EntityFrameworkCore;
@@ -18,8 +17,6 @@ public static IWebHostBuilder Configure(IWebHostBuilder webHostBuilder, string s
1817
.ConfigureServices(services =>
1918
{
2019
services.AddRouting()
21-
.AddAuthorization()
22-
.AddCors()
2320
.AddWarehouseServices()
2421
.AddTransient<DbContextOptions<WarehouseDBContext>>(s =>
2522
{
@@ -33,15 +30,13 @@ public static IWebHostBuilder Configure(IWebHostBuilder webHostBuilder, string s
3330
})
3431
.Configure(app =>
3532
{
36-
app.UseHttpsRedirection()
37-
.UseMiddleware(typeof(ExceptionHandlingMiddleware))
33+
app.UseMiddleware(typeof(ExceptionHandlingMiddleware))
3834
.UseRouting()
39-
.UseAuthorization()
40-
.UseEndpoints(endpoints => { endpoints.UseWarehouseEndpoints(); });
35+
.UseEndpoints(endpoints => { endpoints.UseWarehouseEndpoints(); })
36+
.ConfigureWarehouse();
4137

4238
// Kids, do not try this at home!
4339
var database = app.ApplicationServices.GetRequiredService<WarehouseDBContext>().Database;
44-
database.Migrate();
4540
database.ExecuteSqlRaw("TRUNCATE TABLE \"Product\"");
4641
});
4742

Sample/Warehouse/Warehouse.Api/Program.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,17 @@
1212
.ConfigureServices(services =>
1313
{
1414
services.AddRouting()
15-
.AddCors()
16-
.AddAuthorization()
1715
.AddWarehouseServices();
1816
})
1917
.Configure(app =>
2018
{
21-
app.UseHttpsRedirection()
22-
.UseMiddleware(typeof(ExceptionHandlingMiddleware))
19+
app.UseMiddleware(typeof(ExceptionHandlingMiddleware))
2320
.UseRouting()
24-
.UseAuthorization()
2521
.UseEndpoints(endpoints =>
2622
{
2723
endpoints.UseWarehouseEndpoints();
28-
});
24+
})
25+
.ConfigureWarehouse();
2926
});
3027
})
3128
.Build();

Sample/Warehouse/Warehouse/Configuration.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using Microsoft.AspNetCore.Routing;
1+
using System;
2+
using Microsoft.AspNetCore.Builder;
3+
using Microsoft.AspNetCore.Routing;
24
using Microsoft.EntityFrameworkCore;
35
using Microsoft.Extensions.DependencyInjection;
46
using Warehouse.Products;
@@ -16,5 +18,17 @@ public static IServiceCollection AddWarehouseServices(this IServiceCollection se
1618

1719
public static IEndpointRouteBuilder UseWarehouseEndpoints(this IEndpointRouteBuilder endpoints)
1820
=> endpoints.UseProductsEndpoints();
21+
22+
public static IApplicationBuilder ConfigureWarehouse(this IApplicationBuilder app)
23+
{
24+
var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
25+
26+
if (environment == "Development")
27+
{
28+
app.ApplicationServices.GetRequiredService<WarehouseDBContext>().Database.Migrate();
29+
}
30+
31+
return app;
32+
}
1933
}
2034
}

Sample/Warehouse/Warehouse/Core/Extensions/HttpExtensions.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
using System;
22
using System.ComponentModel;
3-
using System.Diagnostics.CodeAnalysis;
43
using System.Net;
54
using System.Threading.Tasks;
65
using Microsoft.AspNetCore.Http;
6+
using Microsoft.AspNetCore.Http.Headers;
77
using Microsoft.Extensions.Primitives;
8+
using Microsoft.Net.Http.Headers;
89

910
namespace Warehouse.Core.Extensions
1011
{
@@ -79,8 +80,12 @@ public static async Task<T> FromBody<T>(this HttpContext context)
7980
public static Task OK<T>(this HttpContext context, T result)
8081
=> context.ReturnJSON(result);
8182

82-
public static Task Created<T>(this HttpContext context, T result)
83-
=> context.ReturnJSON(result, HttpStatusCode.Created);
83+
public static Task Created<T>(this HttpContext context, T id, string? location = null)
84+
{
85+
context.Response.Headers[HeaderNames.Location] = location ?? $"{context.Request.Path}{id}";
86+
87+
return context.ReturnJSON(id, HttpStatusCode.Created);
88+
}
8489

8590
public static void NotFound(this HttpContext context)
8691
=> context.Response.StatusCode = (int)HttpStatusCode.NotFound;

0 commit comments

Comments
 (0)