示例#1
0
        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);
        }
示例#2
0
        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));
        }