public void AddTransformerReturns400_WhenTransformerWarsException()
        {
            TransformerRequest transformerContract = new TransformerRequest();

            transformerContract.Name = "Optimus";

            _mockWarsService.Setup(warService => warService.AddTransformer(transformerContract)).Throws(new TransformerWarsException());
            var controller = new TransformerController(_mockWarsService.Object, _mockLogger.Object);
            var result     = controller.Put(transformerContract);

            Assert.Equal(400, ((Microsoft.AspNetCore.Mvc.BadRequestObjectResult)(result.Result.Result)).StatusCode);
        }
 public async Task <ActionResult <Models.DB.Transformer> > Put([FromBody] TransformerRequest transformer)
 {
     try
     {
         return(await _warService.AddTransformer(transformer));
     }
     catch (TransformerWarsException ex)
     {
         _logger.LogError(ex, "Error Adding Transformer");
         return(BadRequest(ex.Message));
     }
 }
        public void AddTransformerReturnsActionResult_WithAddedTransformers()
        {
            TransformerRequest transformerContract = new TransformerRequest();

            transformerContract.Name = "Optimus";

            Models.DB.Transformer transformer = new Transformer();
            transformer.Name = "Optimus";

            _mockWarsService.Setup(warService => warService.AddTransformer(transformerContract)).ReturnsAsync(transformer).Verifiable();
            var controller = new TransformerController(_mockWarsService.Object, _mockLogger.Object);
            var result     = controller.Put(transformerContract);

            var viewResult = Assert.IsType <Task <ActionResult <Transformer> > >(result).Result;

            Assert.Equal(transformerContract.Name, viewResult.Value.Name);
        }
        public async Task <Models.DB.Transformer> AddTransformer(TransformerRequest transformer)
        {
            _logger.LogInformation("WarService.AddTransformer");
            _logger.LogInformation("Insert transformer {transformer}", transformer.Name);
            var transformerWithSameName = _dbcontext.Transformers.Where(x => x.Name == transformer.Name);

            if (transformerWithSameName.Count() > 0)
            {
                throw new TransformerWarsException("Duplicate name found in Transformer#" + transformerWithSameName.FirstOrDefault().TransformerId);
            }
            var transformerWithSameRank = _dbcontext.Transformers.Where(x => x.Rank == transformer.Rank && x.AllegianceTypeId == (int)transformer.AllegianceType);

            if (transformerWithSameRank.Count() > 0)
            {
                throw new TransformerWarsException("Duplicate rank in Transformer#" + transformerWithSameRank.FirstOrDefault().TransformerId);
            }
            var dbTransformer = transformer.GetDBObject();

            _dbcontext.Transformers.Add(dbTransformer);
            await _dbcontext.SaveChangesAsync();

            return(dbTransformer);
        }
        public async Task <Models.DB.Transformer> UpdateTransformer(int id, TransformerRequest transformer)
        {
            _logger.LogInformation("WarService.UpdateTransformer");
            _logger.LogInformation("Update transformer {id}", id);
            var dbTransformer = await _dbcontext.Transformers.FindAsync(id);

            if (dbTransformer == null)
            {
                throw new TransformerWarsException("Unable to find Transformer#" + id);
            }
            var transformerWithSameName = _dbcontext.Transformers.Where(x => x.Name == transformer.Name && x.TransformerId != dbTransformer.TransformerId);

            if (transformerWithSameName.Count() > 0)
            {
                throw new TransformerWarsException("Duplicate name found in Transformer#" + transformerWithSameName.FirstOrDefault().TransformerId);
            }
            var transformerWithSameRank = _dbcontext.Transformers.Where(x => x.Rank == transformer.Rank && x.AllegianceTypeId == (int)transformer.AllegianceType && x.TransformerId != dbTransformer.TransformerId);

            if (transformerWithSameRank.Count() > 0)
            {
                throw new TransformerWarsException("Duplicate rank in Transformer#" + transformerWithSameRank.FirstOrDefault().TransformerId);
            }
            dbTransformer.AllegianceTypeId = (int)transformer.AllegianceType;
            dbTransformer.Courage          = transformer.Courage;
            dbTransformer.Endurance        = transformer.Endurance;
            dbTransformer.Firepower        = transformer.Firepower;
            dbTransformer.Intelligence     = transformer.Intelligence;
            dbTransformer.Name             = transformer.Name;
            dbTransformer.Rank             = transformer.Rank;
            dbTransformer.Skill            = transformer.Skill;
            dbTransformer.Speed            = transformer.Speed;
            dbTransformer.Strength         = transformer.Strength;
            await _dbcontext.SaveChangesAsync();

            return(dbTransformer);
        }
 public async Task <ActionResult <Models.DB.Transformer> > Post([FromRoute] int id, [FromBody] TransformerRequest transformer)
 {
     try
     {
         return(await _warService.UpdateTransformer(id, transformer));
     }
     catch (TransformerWarsException ex)
     {
         _logger.LogError(ex, "Error Getting Transformer#" + id);
         return(BadRequest(ex.Message));
     }
 }