public async Task Get_returns_the_current_ruleset(int oldRulesetTimeDeltaMin, int newRulesetTimeDeltaMin, string expectedRulesetId) { // Arrange var transactionMock = new Mock <ITransaction>(); var transactionManagerMock = new Mock <ITransactionManager>(); var rulesetRepositoryMock = new Mock <IRepository <Ruleset> >(); var scheduleRepositoryMock = new Mock <IRepository <VersionSchedule> >(); Ruleset oldRuleset = Build.Ruleset("OldRuleset"); Ruleset newRuleset = Build.Ruleset("NewRuleset") .WithAnimalAction("AnimalAction") .And.WithAnimalType("AnimalType") .And.Finish; var rulesetSchedule = new VersionSchedule { BranchId = "Default", Records = new[] { new VersionScheduleRecord { VersionId = "1", RulesetId = "OldRuleset", Start = DateTime.UtcNow + TimeSpan.FromMinutes(oldRulesetTimeDeltaMin) }, new VersionScheduleRecord { VersionId = "2", RulesetId = "NewRuleset", Start = DateTime.UtcNow + TimeSpan.FromMinutes(newRulesetTimeDeltaMin) }, } }; transactionManagerMock.Setup(_ => _.CreateTransaction()).Returns(transactionMock.Object); rulesetRepositoryMock.Setup(_ => _.ByIdAsync(transactionMock.Object, oldRuleset.Id, oldRuleset.Id)).ReturnsAsync(oldRuleset); rulesetRepositoryMock.Setup(_ => _.ByIdAsync(transactionMock.Object, newRuleset.Id, newRuleset.Id)).ReturnsAsync(newRuleset); scheduleRepositoryMock.Setup(_ => _.ByIdAsync(transactionMock.Object, rulesetSchedule.BranchId, rulesetSchedule.BranchId)).ReturnsAsync(rulesetSchedule); var server = new TestServer(new WebHostBuilder() .ConfigureServices(services => services .AddAnimalFarmCommonServices() .ReplaceSingleton <ILogger>(new Mock <ILogger>().Object) .AddSingleton(transactionManagerMock.Object) .AddSingleton(rulesetRepositoryMock.Object) .AddSingleton(scheduleRepositoryMock.Object) .AddSingleton(new RulesetScheduleProvider("Default", scheduleRepositoryMock.Object))) .UseStartup <Startup>()); var client = server.CreateClient(); // Act HttpResponseMessage response = await client.GetAsync(""); // Assert response.EnsureSuccessStatusCode(); var returnedRuleset = JsonConvert.DeserializeObject <Ruleset>(await response.Content.ReadAsStringAsync()); Assert.NotNull(returnedRuleset); Assert.Equal(expectedRulesetId, returnedRuleset.Id); }
public AnimalServiceWebHostTests() { var rulesetSchedule = new VersionSchedule { BranchId = "Default", Records = new[] { new VersionScheduleRecord { VersionId = "1", RulesetId = "BaseRuleset", Start = new DateTime(2000, 1, 1) } } }; _scheduleRepositoryMock.Setup(_ => _.ByIdAsync(It.IsAny <ITransaction>(), rulesetSchedule.BranchId, rulesetSchedule.BranchId)).ReturnsAsync(rulesetSchedule); }
public async Task GetActiveRulesetRecordsAsync_returns_correct() { // Arrange var rulesetSchedule = new VersionSchedule { BranchId = "Default", Records = new[] { new VersionScheduleRecord { VersionId = "1", RulesetId = "First", Start = new DateTime(2018, 1, 1) }, new VersionScheduleRecord { VersionId = "2", RulesetId = "Second", Start = new DateTime(2018, 2, 1) }, new VersionScheduleRecord { VersionId = "3", RulesetId = "Third", Start = new DateTime(2018, 3, 1) }, new VersionScheduleRecord { VersionId = "3", RulesetId = "Fourth", Start = new DateTime(2018, 4, 1) } } }; var transactionMock = new Mock <ITransaction>(); var repositoryMock = new Mock <IRepository <VersionSchedule> >(); repositoryMock.Setup(_ => _.ByIdAsync(transactionMock.Object, rulesetSchedule.BranchId, rulesetSchedule.BranchId)) .ReturnsAsync(rulesetSchedule); var target = new RulesetScheduleProvider(rulesetSchedule.BranchId, repositoryMock.Object); // Act var result = await target.GetActiveRulesetRecordsAsync(transactionMock.Object, new DateTime(2018, 1, 10), new DateTime(2018, 3, 10)); // Assert Assert.NotNull(result); Assert.Equal(2, result.Count); }
public void Get_animal_updates_animal_to_the_latest_ruleset() { // Arrange var timestamp = new DateTime(2018, 5, 28); var animal = new Animal { Id = "AnimalId", Name = "Boxer", TypeId = "HorseId", UserId = "UserId", Attributes = new Dictionary <string, decimal> { { "HappinessId", 10 } }, LastCalculated = timestamp }; Ruleset oldRuleset = Build.Ruleset("OldRuleset") .WithAnimalType("HorseId") .HavingAttribute("HappinessId", initialValue: 33, ratio: 5) .And.Finish; Ruleset newRuleset = Build.Ruleset("NewRuleset") .WithAnimalType("HorseId") .HavingAttribute("HappinessId", initialValue: 33, ratio: 5) .HavingAttribute("EqualityId", initialValue: 40) .And.Finish; var rulesetSchedule = new VersionSchedule { BranchId = "Default", Records = new[] { new VersionScheduleRecord { VersionId = "1", RulesetId = "OldRuleset", Start = timestamp + TimeSpan.FromMinutes(-10) }, new VersionScheduleRecord { VersionId = "2", RulesetId = "NewRuleset", Start = timestamp + TimeSpan.FromMinutes(1) }, } }; _animalRepositoryMock.Setup(_ => _.ByIdAsync(It.IsAny <ITransaction>(), animal.UserId, animal.Id)).ReturnsAsync(animal); _rulesetRepositoryMock.Setup(_ => _.ByIdAsync(It.IsAny <ITransaction>(), oldRuleset.Id, oldRuleset.Id)).ReturnsAsync(oldRuleset); _rulesetRepositoryMock.Setup(_ => _.ByIdAsync(It.IsAny <ITransaction>(), newRuleset.Id, newRuleset.Id)).ReturnsAsync(newRuleset); _scheduleRepositoryMock.Setup(_ => _.ByIdAsync(It.IsAny <ITransaction>(), rulesetSchedule.BranchId, rulesetSchedule.BranchId)).ReturnsAsync(rulesetSchedule); var client = CreateTestClient(); // Act HttpResponseMessage response = client.GetAsync($"{animal.UserId}/{animal.Id}").GetAwaiter().GetResult(); // Assert response.EnsureSuccessStatusCode(); var responseContentString = response.Content.ReadAsStringAsync().GetAwaiter().GetResult(); var returnedAnimal = JsonConvert.DeserializeObject <Animal>(responseContentString); Assert.NotNull(returnedAnimal); Assert.Equal(15, returnedAnimal.Attributes["HappinessId"]); Assert.Equal(40, returnedAnimal.Attributes["EqualityId"]); }
private async Task <IEnumerable <VersionScheduleRecord> > GetRecords(ITransaction transaction) { VersionSchedule schedule = await _scheduleRepository.ByIdAsync(transaction, _branchId, _branchId); return(schedule.Records.OrderByDescending(r => r.Start)); }