diff --git a/quetzalcoatl-auth/Bootstrapper/Bootstrapper.csproj b/quetzalcoatl-auth/Bootstrapper/Bootstrapper.csproj
index 4a77b90..e8d2536 100644
--- a/quetzalcoatl-auth/Bootstrapper/Bootstrapper.csproj
+++ b/quetzalcoatl-auth/Bootstrapper/Bootstrapper.csproj
@@ -9,6 +9,7 @@
+
@@ -19,6 +20,7 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
all
+
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/quetzalcoatl-auth/Bootstrapper/Program.cs b/quetzalcoatl-auth/Bootstrapper/Program.cs
index 9052b06..add1d9b 100644
--- a/quetzalcoatl-auth/Bootstrapper/Program.cs
+++ b/quetzalcoatl-auth/Bootstrapper/Program.cs
@@ -1,3 +1,7 @@
+using Domain.Consts;
+using DotNetEnv;
+using DotNetEnv.Configuration;
+
Log.Logger = new LoggerConfiguration()
.MinimumLevel
.Override("Microsoft", LogEventLevel.Information)
@@ -13,6 +17,13 @@
var builder = WebApplication.CreateBuilder(args);
+ if (builder.Environment.IsEnvironment(SystemConsts.TestingEnvironment))
+ {
+ _ = builder.Configuration
+ .AddDotNetEnv(".env.template", LoadOptions.TraversePath())
+ .Build();
+ }
+
builder.Services.Configure(builder.Configuration.GetSection(nameof(JwtConfig)));
builder.Services.Configure(builder.Configuration.GetSection(nameof(AdminConfig)));
@@ -28,7 +39,16 @@
};
var dsnConnectionString = builder.Configuration.GetConnectionString("DefaultConnection");
- builder.Services.AddHealthChecks().AddSqlServer(dsnConnectionString!);
+ if (builder.Environment.IsEnvironment(SystemConsts.TestingEnvironment))
+ {
+ builder.Services.AddEntityFrameworkInMemoryDatabase();
+ }
+ else
+ {
+ builder.Services
+ .AddHealthChecks()
+ .AddSqlServer(dsnConnectionString!);
+ }
builder
.Host
@@ -45,7 +65,15 @@
.Services
.AddDbContext(options =>
{
- options.UseSqlServer(dsnConnectionString);
+ if (builder.Environment.IsEnvironment(SystemConsts.TestingEnvironment))
+ {
+ options.UseInMemoryDatabase("InMemoryDbForTesting");
+ }
+ else
+ {
+ options.UseSqlServer(dsnConnectionString);
+ }
+
options.UseTriggers(
triggerOptions => triggerOptions.AddTrigger()
);
@@ -69,11 +97,11 @@
.Services
.AddCors(options =>
{
- options.AddDefaultPolicy(builder =>
+ options.AddDefaultPolicy(corsPolicyBuilder =>
{
- builder
+ corsPolicyBuilder
.WithOrigins(
- corsOrigins ?? new[] { "http://localhost:10000", "https://pantheonix.live" }
+ corsOrigins ?? ["http://localhost:10000", "https://pantheonix.live"]
)
.AllowAnyMethod()
.AllowAnyHeader()
@@ -83,23 +111,19 @@
.AddFastEndpoints(options =>
{
options.DisableAutoDiscovery = true;
- options.Assemblies = new[]
- {
+ options.Assemblies =
+ [
typeof(IApiMarker).Assembly,
typeof(IApplicationMarker).Assembly
- };
+ ];
})
.AddSingleton(tokenValidationParameters)
.AddAuthenticationJwtBearer(opt =>
{
- opt.SigningKey = jwtConfig!.SecretKey;
+ opt.SigningKey = jwtConfig.SecretKey;
})
- .AddAutoMapper(typeof(IApiMarker), typeof(IApplicationMarker))
- .AddSwaggerDocument(settings =>
- {
- settings.Title = "Quetzalcoatl Auth API";
- settings.Version = "v1";
- });
+ .AddAuthorization()
+ .AddAutoMapper(typeof(IApiMarker), typeof(IApplicationMarker));
var app = builder.Build();
@@ -108,11 +132,14 @@
await app.UseSeedData();
}
- app.MapHealthChecks(
- "/_health",
- new HealthCheckOptions { ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse, }
- )
- .RequireHost("*:5210");
+ if (!app.Environment.IsEnvironment(SystemConsts.TestingEnvironment))
+ {
+ app.MapHealthChecks(
+ "/_health",
+ new HealthCheckOptions { ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse, }
+ )
+ .RequireHost("*:5210");
+ }
app.UseSerilogRequestLogging()
.UseDefaultExceptionHandler()
diff --git a/quetzalcoatl-auth/Domain/Consts/SystemConsts.cs b/quetzalcoatl-auth/Domain/Consts/SystemConsts.cs
new file mode 100644
index 0000000..85dc8f3
--- /dev/null
+++ b/quetzalcoatl-auth/Domain/Consts/SystemConsts.cs
@@ -0,0 +1,6 @@
+namespace Domain.Consts;
+
+public static class SystemConsts
+{
+ public const string TestingEnvironment = "TESTING";
+}
\ No newline at end of file