Exemple #1
0
        public async Task <Domain.Species> Update(UpdateSpeciesModel model)
        {
            Domain.Species species = await _database.Species.FindAsync(model.Id);

            if (species is null)
            {
                return(null);
            }

            IQueryable <Domain.Species> anyWithNameAndLatinName =
                from existingSpeciesWithNameAndLatinName in _database.Species
                where (existingSpeciesWithNameAndLatinName.Name == model.Name) &&
                (existingSpeciesWithNameAndLatinName.LatinName == model.LatinName) &&
                (existingSpeciesWithNameAndLatinName.Id != model.Id)
                select existingSpeciesWithNameAndLatinName;

            if (await anyWithNameAndLatinName.AnyAsync())
            {
                throw new SpeciesWithNameAlreadyExistsException(model.Name);
            }

            _mapper.Map(model, species);
            _database.Species.Update(species);
            await _database.SaveAsync();

            return(species);
        }
Exemple #2
0
        public async Task <ActionResult> Put(Guid id, [FromBody] UpdateSpeciesViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            try
            {
                UpdateSpeciesModel updateSpeciesModel = _mapper.Map <UpdateSpeciesModel>(model);
                updateSpeciesModel.Id = id;

                Species species = await _commands.Update(updateSpeciesModel);

                if (species is null)
                {
                    return(NotFound());
                }

                return(Ok(_mapper.Map <SpeciesDetailsViewModel>(species)));
            }
            catch (Exception ex) when(ex is ResourceStateException)
            {
                return(Conflict(new ErrorViewModel(ex)));
            }
        }
Exemple #3
0
        public async Task UpdateSpeciesReturnsNullIfSpeciesDoesNotExist()
        {
            // Given
            UpdateSpeciesModel model = ModelFactory.UpdateModel(Guid.NewGuid());

            // When
            Domain.Species species = await _commands.Update(model);

            // Then
            species.Should().BeNull();
        }
Exemple #4
0
        public async Task UpdateSpeciesReturnsSpeciesOnSuccess()
        {
            // Given
            Domain.Species     species   = ModelFactory.DomainModel("Basil");
            Guid               speciesId = SeedDatabase(species);
            UpdateSpeciesModel model     = ModelFactory.UpdateModel(speciesId);

            // When
            species = await _commands.Update(model);

            // Then
            species.Should().NotBeNull();
            species.Name.Should().Be("Pepper");
        }
Exemple #5
0
        public void UpdateSpeciesThrowsExceptionOnNameConflict()
        {
            // Given
            Domain.Species existingSpecies = ModelFactory.DomainModel();
            SeedDatabase(existingSpecies);
            Domain.Species     updatedSpecies   = ModelFactory.DomainModel("Species B");
            Guid               updatedSpeciesId = SeedDatabase(updatedSpecies);
            UpdateSpeciesModel model            = ModelFactory.UpdateModel(updatedSpeciesId);

            // When
            Func <Task> updateSpecies = async() => await _commands.Update(model);

            // Then
            updateSpecies.Should().Throw <SpeciesWithNameAlreadyExistsException>();
        }