예제 #1
0
        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);
            }
        }
예제 #2
0
        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;
 }
예제 #4
0
        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());
        }
예제 #5
0
 public ICommand GetCreateArmyCommand(ArmyPostDto data)
 {
     return(new CreateArmyCommand(armyFactory, armyRepository, currentUserLogin, armyNotificationsService, logger, data));
 }
예제 #6
0
        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());
            }
        }