public async Task AddAsync_GivenValidInput_AppendsDocumentToList(
            [Frozen] Mock <IDocumentRepository> documentRepoMock,
            [Frozen] Mock <IDocumentListRepository> documentListRepoMock,
            DocumentService sut,
            string userFileName,
            string mimeType,
            ByteSize size,
            string newDocumentId,
            [Frozen] Mock <IList <DalDocument> > existingDocuments,
            MemoryStream content)
        {
            using (content)
            {
                // Arrange
                documentRepoMock.Setup(repo =>
                                       repo.AddAsync(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <Stream>()))
                .ReturnsAsync(newDocumentId);

                documentListRepoMock.Setup(repo => repo.GetAsync())
                .ReturnsAsync(existingDocuments.Object);

                // Act
                await sut.AddAsync(userFileName, mimeType, size, content);

                // Verify
                DalDocument expectedDocument = new DalDocument
                {
                    Id          = newDocumentId,
                    Name        = userFileName,
                    SizeInBytes = size.Bytes
                };
                existingDocuments.Verify(list => list.Add(It.Is <DalDocument>(actualDocument => Equals(actualDocument, expectedDocument))));
            }
        }
        public async Task AddDocumentTest()
        {
            var documentRepositoryMock = new Mock <IDocumentRepository>();

            documentRepositoryMock.Setup(p => p.AddAsync(It.IsAny <DocumentEntity>()))
            .Returns(() => Task.FromResult(0));

            var documentContentServiceMock      = new Mock <IDocumentContentService>();
            var documentCollaboratorServiceMock = new Mock <IDocumentCollaboratorService>();

            var documentService = new DocumentService(
                documentRepositoryMock.Object,
                documentContentServiceMock.Object,
                documentCollaboratorServiceMock.Object,
                MockObjects.GetMapper());

            const string userId     = "userId";
            var          dateBefore = DateTime.UtcNow;

            var document = await documentService.AddAsync(userId);

            Assert.NotNull(document);
            Assert.Equal(userId, document.UserId);
            Assert.Equal("New Document", document.Name);
            Assert.False(string.IsNullOrEmpty(document.Id));
            Assert.True(dateBefore < document.Created);
            Assert.True(document.Created < DateTime.UtcNow);

            documentRepositoryMock.Verify(p => p.AddAsync(It.IsAny <DocumentEntity>()), Times.Once);
        }
        public async Task AddAsync_GivenValidInput_CreatesDocument(
            [Frozen] Mock <IDocumentRepository> documentRepoMock,
            DocumentService sut,
            string userFileName,
            string mimeType,
            ByteSize size,
            string newDocumentId,
            MemoryStream content)
        {
            using (content)
            {
                // Arrange
                documentRepoMock.Setup(repo => repo.AddAsync(mimeType, userFileName, content))
                .ReturnsAsync(newDocumentId)
                .Verifiable();

                // Act
                string documentId = await sut.AddAsync(userFileName, mimeType, size, content);

                // Verify
                documentRepoMock.Verify();
                documentId.Should().Be(documentId);
            }
        }