public static async Task Create(bool dropExisting = false) { if (!WebTestConfig.IsActive()) { Debug.WriteLine("Creating temp database aborted. Test mode is not active."); return; } try { if (new TestDatabaseGenerator().Process(Config, dropExisting)) { try { await(WebTestConfig.ReferenceDataCreator?.Invoke() ?? Task.CompletedTask); } catch (Exception ex) { throw new Exception("Failed to run the reference data.", ex); } } Status = CreationStatus.Created; } catch { Status = CreationStatus.Failed; throw; } finally { DatabaseChangeWatcher.Restart(); } }
public static IApplicationBuilder UseWebTest(this IApplicationBuilder app, Func <Task> createReferenceData, Action <IWebTestConfig> config = null) { if (!WebTestConfig.IsActive()) { return(app); } WebTestConfig.ReferenceDataCreator = createReferenceData; var settings = new WebTestConfig(); config?.Invoke(settings); if (settings.AddDefaultHandlers) { settings.AddDatabaseManager().AddSnapshot().AddTimeInjector().AddSqlProfile(); } app.UseMiddleware <WebTestMiddleware>(); Task.Factory.RunSync(() => TempDatabase.Create(enforceRestart: false, mustRenew: false)); return(app); }
public static async Task InitializeTempDatabase <TDatabaseManager>(this IApplicationBuilder app, Func <Task> createReferenceData) where TDatabaseManager : DatabaseManager, new() { if (!WebTestConfig.IsActive()) { return; } TempDatabase.Config.DatabaseManager = new TDatabaseManager(); WebTestConfig.ReferenceDataCreator = createReferenceData; await TempDatabase.AwaitReadiness(); }
public static async Task Create(bool enforceRestart, bool mustRenew) { if (!WebTestConfig.IsActive()) { Debug.WriteLine("Creating temp database aborted. Test mode is not active."); return; } IsDatabaseBeingCreated = true; var createdNew = false; try { SqlConnection.ClearAllPools(); if (enforceRestart) { TempDatabaseInitiated = null; } if (TempDatabaseInitiated.HasValue) { return; } var generator = new TestDatabaseGenerator(isTempDatabaseOptional: true, mustRenew: mustRenew); TempDatabaseInitiated = generator.Process(); createdNew = generator.CreatedNewDatabase; await Database.Instance.Refresh(); SqlConnection.ClearAllPools(); } finally { IsDatabaseBeingCreated = false; } if (createdNew) { // A new database is created. Add the reference data try { await(WebTestConfig.ReferenceDataCreator?.Invoke() ?? Task.CompletedTask); } catch (Exception ex) { throw new Exception("Failed to run the reference data.", ex); } } }
public static IApplicationBuilder UseWebTest(this IApplicationBuilder app, Action <IDevCommandsConfig> config = null) { if (!WebTestConfig.IsActive()) { return(app); } config?.Invoke(TempDatabase.Config); if (TempDatabase.Config.AddDefaultHandlers) { TempDatabase.Config.AddDatabaseManager() .AddTimeInjector() .AddSqlProfile() .AddClearDatabaseCache(); } app.UseMiddleware <WebTestMiddleware>(); return(app); }