public async Task ProcessAsync_ValidSubjectWhichDoesntRequireContentUpdate_DoesNotChangeContentAndReturnsValidProcessingResult() { var documentRepositoryMock = new Mock <IDocumentRepository>(); var archivistFactoryMock = new Mock <IArchivistFactory>(); var subject = new UpdateDocumentSubject { Content = "this is new content", ContentUpdateRequired = false, Id = "test_update" }; var documentToUpdate = new Document { Content = "this is old content", Id = subject.Id }; documentRepositoryMock.Setup(it => it.FindDocumentAsync(subject.Id)).ReturnsAsync(documentToUpdate); archivistFactoryMock.Setup(it => it.CreateArchivistChain(It.IsAny <DocumentProcessingAction[]>())).Returns(new DoNothingArchivist()); var strategy = new UpdateDocumentStrategy(documentRepositoryMock.Object, archivistFactoryMock.Object); var result = await strategy.ProcessAsync(subject, new[] { new DocumentProcessingAction() }); Assert.NotNull(result); Assert.IsType <DocumentView <DocumentProcessingResultContent> >(result); var documentView = (DocumentView <DocumentProcessingResultContent>)result; Assert.Equal(DocumentViewType.Ok, documentView.Type); Assert.Equal(DocumentProcessingResultType.Added, documentView.Content.ProcessingResultType); documentRepositoryMock.Verify(it => it.UpdateAsync(documentToUpdate), Times.Once); Assert.Equal("this is old content", documentToUpdate.Content); }
public async Task ProcessAsync_ValidSubjecWithProcessingParameters_CreatesAndCallArchivistChain() { var documentRepositoryStub = new Mock <IDocumentRepository>(); var archivistFactoryStub = new Mock <IArchivistFactory>(); var archivistMock = new Mock <IArchivist>(); var subject = new UpdateDocumentSubject { Id = "test" }; archivistMock.Setup(it => it.Rethink(null)).Returns((Document)null); documentRepositoryStub.Setup(it => it.FindDocumentAsync(subject.Id)).ReturnsAsync(new Document()); archivistFactoryStub.Setup(it => it.CreateArchivistChain(It.IsAny <DocumentProcessingAction[]>())).Returns(archivistMock.Object); var strategy = new UpdateDocumentStrategy(documentRepositoryStub.Object, archivistFactoryStub.Object); await strategy.ProcessAsync(subject, new[] { new DocumentProcessingAction() }); archivistMock.Verify(it => it.Rethink(It.IsAny <Document>()), Times.Once); }
public async Task ProcessAsync_SubjectWithInvalidId_ReturnsWarningProcessingResult() { var documentRepositoryStub = new Mock <IDocumentRepository>(); var archivistFactoryStub = new Mock <IArchivistFactory>(); var subject = new UpdateDocumentSubject { Id = "test" }; documentRepositoryStub.Setup(it => it.FindDocumentAsync(subject.Id)).ReturnsAsync((Document)null); var strategy = new UpdateDocumentStrategy(documentRepositoryStub.Object, archivistFactoryStub.Object); var result = await strategy.ProcessAsync(subject, null); Assert.NotNull(result); Assert.IsType <DocumentView <DocumentProcessingResultContent> >(result); var documentView = (DocumentView <DocumentProcessingResultContent>)result; Assert.Equal(DocumentViewType.Warning, documentView.Type); Assert.Equal(DocumentProcessingResultType.UpdateFailed, documentView.Content.ProcessingResultType); Assert.Equal($"Document '{subject.Id}' not found.", documentView.Content.Description); }