public TrainingRoomController(ITrainingRoomService trainingRoomService, ITrainingSessionService trainingSessionService) : base(trainingRoomService) { _trainingSessionService = trainingSessionService; }
public async Task Initialize() { IServiceCollection serviceCollection = new ServiceCollection(); serviceCollection.AddLogging(builder => builder.AddConsole()); serviceCollection.AddAutoMapper(Assembly.GetAssembly(typeof(TrainingRoomStartupExtensions))); #region Database // NOTE: to verify if the test works in memory use code below.. //serviceCollection.AddOptions(); //serviceCollection.Configure<DbConfiguration>(dbConfig => //{ // //InMemory by default // dbConfig.UseLazyLoading = true; // dbConfig.ConnectionString = ""; // dbConfig.DbProvider = ""; //}); //serviceCollection.AddSingleton<IFactory<TrainingRoomDbContext>, TrainingRoomDatabaseFactory>(); //serviceCollection.AddTransient<TrainingRoomDbContext>(p => p.GetService<IFactory<TrainingRoomDbContext>>().Create()); SqliteConnection = new SqliteConnection("Data Source=:memory:"); SqliteConnection.Open(); serviceCollection.AddDbContext <TrainingRoomDbContext>(optionsBuilder => { optionsBuilder.UseSqlite(SqliteConnection); optionsBuilder.EnableSensitiveDataLogging(); }); #endregion Database #region Validators serviceCollection.AddTransient <IEntityValidator <TrainingRoom>, TrainingRoomValidator>(); serviceCollection.AddTransient <IEntityValidator <TrainingSession>, TrainingSessionValidator>(); serviceCollection.AddTransient <IEntityValidator <TrainingRoomSettings>, TrainingRoomSettingsValidator>(); #endregion Validators #region Repositories serviceCollection.AddTransient <IRepository <TrainingRoom>, Repository <TrainingRoom, TrainingRoomDbContext> >(); serviceCollection.AddTransient <ITrainingSessionRepository, TrainingSessionRepository>(); serviceCollection.AddTransient <IRepository <TrainingRoomSettings>, Repository <TrainingRoomSettings, TrainingRoomDbContext> >(); #endregion Repositories #region Services serviceCollection.AddTransient <ITrainingRoomService, Application.Services.TrainingRoomService>(); serviceCollection.AddTransient <ITrainingSessionService, Application.Services.TrainingSessionService>(); UserId = Guid.NewGuid(); const string username = "******"; serviceCollection.AddSingleton <IUserService, UserServiceMock>(p => new UserServiceMock(UserId, username)); #endregion Services GenericServiceProvider = serviceCollection.BuildServiceProvider().ToGenericServiceProvider(); Logger = GenericServiceProvider.GetService <ILogger <TrainingSessionServiceTests> >(); Logger.LogInformation("Started initialization!"); TrainingSessionService = GenericServiceProvider.GetService <ITrainingSessionService>(); TrainingRoomDbContext context = GenericServiceProvider.GetService <TrainingRoomDbContext>(); await context.Database.EnsureCreatedAsync(); ITrainingRoomService trainingRoomService = GenericServiceProvider.GetService <ITrainingRoomService>(); IUserService userService = GenericServiceProvider.GetService <IUserService>(); TrainingRoomDto trainingRoomDto = new TrainingRoomDto() { Id = Guid.NewGuid(), Name = "Cool room", OwnerId = UserId, Owner = await userService.FindUserAsync(UserId), Generation = 0, TrainingRoomSettings = new TrainingRoomSettingsDto() { Id = Guid.NewGuid(), OrganismCount = (uint)OrganismCount, InputCount = 2, OutputCount = 1, SpeciesExcessGeneWeight = 1, SpeciesDisjointGeneWeight = 1, SpeciesAverageWeightDiffWeight = 0.4, Threshold = 3, AddConnectionChance = 0.05, AddNodeChance = 0.03, CrossOverChance = 0.75, InterSpeciesChance = 0.001, MutationChance = 1, MutateWeightChance = 0.8, WeightReassignChance = 0.1, TopAmountToSurvive = 0.5, EnableConnectionChance = 0.25, Seed = 1, MaxStagnantTime = 15, ChampionCloneMinSpeciesSize = 5 }, AuthorizedTrainers = new List <TrainerDto>(), TrainingSessions = new List <TrainingSessionDto>() }; (bool success, Guid id) = await trainingRoomService.CreateAsync(trainingRoomDto); Logger.LogInformation($"Created a training room: {success} id: {id}"); TrainingRoomId = id; Logger.LogInformation("Finished initialization!"); }