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); }
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))); } }
public async Task UpdateSpeciesReturnsNullIfSpeciesDoesNotExist() { // Given UpdateSpeciesModel model = ModelFactory.UpdateModel(Guid.NewGuid()); // When Domain.Species species = await _commands.Update(model); // Then species.Should().BeNull(); }
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"); }
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>(); }