public void Add_throws_db_update_exception_when_item_with_provided_term_name_already_exists() { var itemForAdd = new GlossaryItemAddDto { Term = "Existing term", Definition = "Test definition" }; var existingGlossaryItem = new GlossaryItem { Term = "Existing term", Definition = "Test definition" }; _mapperMock .Setup(e => e.Map <GlossaryItemAddDto, GlossaryItem>(itemForAdd)) .Returns(existingGlossaryItem); _unitOfWorkMock.Setup(e => e.Commit()) .Throws(new DbUpdateException()); _glossaryRepositoryMock.Setup(e => e.AddAsync(existingGlossaryItem)) .Returns(Task.CompletedTask); _glossaryItemsService = new GlossaryItemsService(_glossaryRepositoryMock.Object, _unitOfWorkMock.Object, _mapperMock.Object); Assert.ThrowsAsync <DbUpdateException>(async() => await _glossaryItemsService.AddAsync(itemForAdd)); _unitOfWorkMock.Verify(e => e.Commit(), Times.Once); }
public async Task Add_item_success() { var itemToAdd = new GlossaryItem { Id = 3, Term = "alkaline", Definition = "Definition test" }; var itemToAddDto = new GlossaryItemAddDto { Term = "alkaline", Definition = "Updated definition" }; var itemAfterAddDto = new GlossaryItemDto { Id = 3, Term = "alkaline", Definition = "Updated definition" }; _glossaryRepositoryMock.Setup(e => e.AddAsync(itemToAdd)) .Returns(Task.CompletedTask); _unitOfWorkMock.Setup(e => e.Commit()); _mapperMock .Setup(e => e.Map <GlossaryItemAddDto, GlossaryItem>(itemToAddDto)) .Returns(itemToAdd); _mapperMock .Setup(e => e.Map <GlossaryItem, GlossaryItemDto>(itemToAdd)) .Returns(itemAfterAddDto); var result = await _glossaryItemsService.AddAsync(itemToAddDto); _glossaryRepositoryMock.Verify(e => e.AddAsync(itemToAdd), Times.Once); _unitOfWorkMock.Verify(e => e.Commit(), Times.Once); _mapperMock.Verify(e => e.Map <GlossaryItemAddDto, GlossaryItem>(itemToAddDto)); _mapperMock.Verify(e => e.Map <GlossaryItem, GlossaryItemDto>(itemToAdd)); Assert.AreEqual(itemAfterAddDto, result); }
public async Task <GlossaryItemDto> AddAsync(GlossaryItemAddDto glossaryItemDto) { try { var item = _mapper.Map <GlossaryItemAddDto, GlossaryItem>(glossaryItemDto); await _glossaryRepository.AddAsync(item); _unitOfWork.Commit(); var glossaryItemResultDto = _mapper.Map <GlossaryItem, GlossaryItemDto>(item); return(glossaryItemResultDto); } catch (DbUpdateException ex) { var innerException = ex.InnerException as SqlException; if (innerException != null && innerException.Number == 2601) { throw new DuplicateRecordException($"Term '{glossaryItemDto.Term}' already exists"); } else { throw; } } }
public async Task <IActionResult> Post(GlossaryItemAddDto glossaryItem) { var addedItem = await _glossaryService.AddAsync(glossaryItem); return(Ok(addedItem)); }