private async Task TryCreateArmyAsync(ArmyPostDto data) { try { var command = commands.GetCreateArmyCommand(data); await command.ExecuteAsync(); } catch (EntityNotFoundException e) { ModelState.AddModelError("validation", e.Message); } catch (QuantityException e) { ModelState.AddModelError("validation", e.Message); } catch (SquadException e) { if (!e.IsQuantity) { throw; } ModelState.AddModelError("validation", e.Message); } catch (ArmyException e) { if (!e.IsSquads && !e.IsCost) { throw; } ModelState.AddModelError("validation", e.Message); } }
public async Task CreateArmy_WithoutSquads_BadRequest() { var services = CreateServiceProvider(); var controller = services.GetService <CreateArmyController>(); var data = new ArmyPostDto(); var nullArrayResult = await controller.CreateAsync(data); data.Squads = new SquadPostDto[0]; var emptyArrayResult = await controller.CreateAsync(data); Assert.IsAssignableFrom <BadRequestObjectResult>(nullArrayResult); Assert.IsAssignableFrom <BadRequestObjectResult>(emptyArrayResult); }
public CreateArmyCommand(IArmyFactory armyFactory, IArmies armyRepository, IGetCurrentUserLoginStrategy currentUserLogin, IArmyNotificationService armyNotificationsService, ILog logger, ArmyPostDto data) { this.armyFactory = armyFactory; this.armyRepository = armyRepository; this.currentUserLogin = currentUserLogin; this.armyNotificationsService = armyNotificationsService; this.logger = logger; this.data = data; }
public async Task <IActionResult> CreateAsync([FromBody] ArmyPostDto data) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } await TryCreateArmyAsync(data); if (!ModelState.IsValid) { return(BadRequest(ModelState)); } return(Ok()); }
public ICommand GetCreateArmyCommand(ArmyPostDto data) { return(new CreateArmyCommand(armyFactory, armyRepository, currentUserLogin, armyNotificationsService, logger, data)); }
public async Task CreateArmy_FromControllerData_NotificationIsSentWithExpectedFields() { var services = CreateServiceProvider(); var controller = services.GetService <CreateArmyController>(); var data = new ArmyPostDto(); var mockOfArmyNotificationsService = services.GetService <Mock <IArmyNotificationService> >(); mockOfArmyNotificationsService.Setup(service => service.NotifyThatCreatedAsync(It.IsAny <ArmyNotificationDto>())) .Callback <ArmyNotificationDto>(ValidateResult) .Returns(Task.CompletedTask); await controller.CreateAsync(new ArmyPostDto { Squads = new[] { new SquadPostDto { Type = "SquadOne", Quantity = 1, Weapons = new[] { "WeaponOne" }, Armors = new[] { "ArmorOne" } } } }); void ValidateResult(ArmyNotificationDto dto) { dto.OwnerLogin.Should() .BeSameAs("UserOne"); dto.Squads.Should() .ContainSingle() .Which .Should() .BeEquivalentTo(new { Type = "SquadOne", Quantity = 1, Weapons = new { Name = "WeaponOne", Offence = new[] { new { Max = 10, Min = 1, Tags = new[] { "TagOne" } } }, Tags = new[] { "TagTwo" } }, Armors = new { Name = "ArmorOne", Cost = 2, Defence = new[] { new { Max = 6, Min = 4, Tags = new[] { "TagOne" } } }, Tags = new[] { "TagTwo" } }, Tags = new[] { "TagOne" } }, options => options.ExcludingMissingMembers()); } }