public void Event_create_animal_creates_a_new_animal() { // Arrange var ruleset = Build.Ruleset("BaseRuleset") .WithAnimalType("HorseId") .HavingAttribute("HappinessId", initialValue: 33) .And.Finish; var e = new CreateAnimalEvent { EventId = "EventId", ActingUserId = "UserId", OwnerUserId = "UserId", AnimalId = "AnimalId", Name = "Boxer", AnimalTypeId = "HorseId", Time = DateTime.UtcNow }; Animal newAnimal = null; Action <ITransaction, Animal> setNewAnimal = (tx, a) => newAnimal = a; _rulesetRepositoryMock.Setup(_ => _.ByIdAsync(It.IsAny <ITransaction>(), ruleset.Id, ruleset.Id)).ReturnsAsync(ruleset); _animalRepositoryMock.Setup(_ => _.ByIdAsync(It.IsAny <ITransaction>(), e.OwnerUserId, e.AnimalId)).ReturnsAsync((Animal)null); _animalRepositoryMock.Setup(_ => _.UpsertAsync(It.IsAny <ITransaction>(), It.IsAny <Animal>())).Callback(setNewAnimal) .Returns(Task.CompletedTask); var client = CreateTestClient(); var stringContent = new StringContent(JsonConvert.SerializeObject(e), Encoding.UTF8, "application/json"); // Act HttpResponseMessage response = client.PutAsync($"event", stringContent).GetAwaiter().GetResult(); // Assert response.EnsureSuccessStatusCode(); Assert.NotNull(newAnimal); Assert.Equal(e.AnimalId, newAnimal.Id); Assert.Equal(e.Name, newAnimal.Name); var animalTypeAttribute = ruleset.AnimalTypes[e.AnimalTypeId].Attributes.First(); Assert.Equal(animalTypeAttribute.Key, newAnimal.Attributes.First().Key); Assert.Equal(animalTypeAttribute.Value.InitialValue, newAnimal.Attributes.First().Value); }
public void Appply_instantiates_a_new_animal() { // ArrangeNa const string ownerUserId = "UserId"; const string animalId = "AnimalId"; const string animalName = "Snowball"; const string animalTypeId = "PigTypeId"; const string attributeId = "AttributeId"; const decimal attributeInitialValue = 30.5M; DateTime time = DateTime.UtcNow; var ruleset = Build.Ruleset() .WithAnimalType(animalTypeId) .HavingAttribute(attributeId, initialValue: attributeInitialValue) .And.Finish; var target = new CreateAnimalEventHandler(); CreateAnimalEvent e = new CreateAnimalEvent { AnimalId = animalId, OwnerUserId = ownerUserId, AnimalTypeId = animalTypeId, Name = animalName, Time = time }; var context = new MockAnimalEventContext(null, ruleset); // Act target.Apply(e, context); // Assert Animal animal = context.Animal; Assert.NotNull(animal); Assert.Equal(animalId, animal.Id); Assert.Equal(ownerUserId, animal.UserId); Assert.Equal(animalTypeId, animal.TypeId); Assert.Equal(time, animal.LastCalculated); Assert.Equal(attributeInitialValue, animal.Attributes[attributeId]); }