Ejemplo n.º 1
0
        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"]);
        }
Ejemplo n.º 5
0
        private async Task <IEnumerable <VersionScheduleRecord> > GetRecords(ITransaction transaction)
        {
            VersionSchedule schedule = await _scheduleRepository.ByIdAsync(transaction, _branchId, _branchId);

            return(schedule.Records.OrderByDescending(r => r.Start));
        }