public void File_remove_removes_file_and_publishes_event()
        {
            // Arrange
            FakeFileStorage    fileStorage    = new FakeFileStorage();
            FakeFileRepository fileRepository = new FakeFileRepository();
            FakeEventPublisher eventPublisher = new FakeEventPublisher();
            FakeCurrentUser    currentUser    = new FakeCurrentUser();

            File file = new ExampleFileFactory().CreateFile();

            fileRepository.Save(file);
            fileStorage.SaveFile(file, Stream.Null);
            currentUser.Id = file.Owner.Id;

            var commandHandler = new DeleteFileCommandHandler(fileStorage, currentUser, fileRepository, eventPublisher);

            var command = new DeleteFileCommand("fileId");

            // Act
            commandHandler.Handle(command);

            // Assert
            Assert.IsNull(fileRepository.GetById("fileId"));
            Assert.False(fileStorage.Exists(file));

            File publishedEvent = eventPublisher.VerifyPublishedOnce <File>();

            Assert.AreEqual(file, publishedEvent);
        }
        public void File_add_throws_when_owner_now_found()
        {
            // Arrange
            FakeFileStorage         fileStorage         = new FakeFileStorage();
            FakeFileRepository      fileRepository      = new FakeFileRepository();
            FakeEventPublisher      eventPublisher      = new FakeEventPublisher();
            FakeCurrentUserSource   currentUserSource   = new FakeCurrentUserSource();
            FakePostCommitRegistrar postCommitRegistrar = new FakePostCommitRegistrar();

            currentUserSource.CurrentUser = null;

            var commandHandler = new AddFileCommandHandler(
                fileRepository, fileStorage, eventPublisher, postCommitRegistrar, currentUserSource);

            var contentBuffer = Encoding.UTF8.GetBytes("testContent");

            using (Stream fileContent = new MemoryStream(contentBuffer))
            {
                var command = new AddFileCommand("filename", "desc", "text/plain", fileContent);

                // Assert & Act
                Assert.Throws <NotFoundException>(() =>
                {
                    commandHandler.Handle(command);
                    postCommitRegistrar.ExecuteActions();
                });
            }
        }
示例#3
0
 public BooksDataBuilder(IProvideConnection connectionProvider, IFileStorage fileStorage,
                         AuthorsDataBuilder authorBuilder, SeriesDataBuilder seriesDataBuilder,
                         CategoriesDataBuilder categoriesBuilder)
 {
     _connection        = connectionProvider.GetConnection();
     _fileStorage       = fileStorage as FakeFileStorage;
     _authorBuilder     = authorBuilder;
     _seriesBuilder     = seriesDataBuilder;
     _categoriesBuilder = categoriesBuilder;
 }
        public void File_add_adds_file_and_publishes_event()
        {
            // Arrange
            FakeFileStorage         fileStorage         = new FakeFileStorage();
            FakeFileRepository      fileRepository      = new FakeFileRepository();
            FakeEventPublisher      eventPublisher      = new FakeEventPublisher();
            FakeCurrentUserSource   currentUserSource   = new FakeCurrentUserSource();
            FakePostCommitRegistrar postCommitRegistrar = new FakePostCommitRegistrar();

            currentUserSource.CurrentUser = new User("userId", "username");

            var commandHandler = new AddFileCommandHandler(
                fileRepository, fileStorage, eventPublisher, postCommitRegistrar, currentUserSource);

            var contentBuffer = Encoding.UTF8.GetBytes("testContent");

            using (Stream fileContent = new MemoryStream(contentBuffer))
            {
                var command = new AddFileCommand("filename", "desc", "text/plain", fileContent);

                // Act
                commandHandler.Handle(command);
                postCommitRegistrar.ExecuteActions();

                // Assert
                File addedFile = fileRepository.GetByName("filename");

                Assert.IsNotNull(addedFile);
                Assert.AreEqual("filename", addedFile.FileName);
                Assert.AreEqual("desc", addedFile.Description);
                Assert.AreEqual("userId", addedFile.Owner.Id);

                Stream fileStream = fileStorage.ReadFile(addedFile).Result;
                Assert.IsNotNull(fileStream);

                using (var reader = new StreamReader(fileStream))
                    Assert.AreEqual("testContent", reader.ReadToEnd());

                File publishedEvent = eventPublisher.VerifyPublishedOnce <File>();
                Assert.AreEqual(addedFile, publishedEvent);
            }
        }
        public void File_can_be_removed_only_by_owner()
        {
            // Arrange
            FakeFileStorage    fileStorage    = new FakeFileStorage();
            FakeFileRepository fileRepository = new FakeFileRepository();
            FakeEventPublisher eventPublisher = new FakeEventPublisher();
            FakeCurrentUser    currentUser    = new FakeCurrentUser();

            File file = new ExampleFileFactory().CreateFile();

            fileRepository.Save(file);
            fileStorage.SaveFile(file, Stream.Null);
            currentUser.Id = "otherUserId";

            var commandHandler = new DeleteFileCommandHandler(fileStorage, currentUser, fileRepository, eventPublisher);

            var command = new DeleteFileCommand("fileId");

            // Assert & Act
            Assert.Throws <PermissionException>(() => commandHandler.Handle(command));
        }
示例#6
0
        internal static void ShouldHaveNoBookPageImage(int bookId, int pageNumber, int imageId, IDbConnection databaseConnection, FakeFileStorage fileStore)
        {
            var page = databaseConnection.GetBookPageByNumber(bookId, pageNumber);

            page.ImageId.Should().BeNull();

            var image = databaseConnection.GetFileById(imageId);

            image.Should().BeNull();
        }
示例#7
0
        internal static void ShouldHaveNoBookPage(int bookId, long pageId, int?imageId, IDbConnection databaseConnection, FakeFileStorage fileStore)
        {
            var page = databaseConnection.GetBookPageById(bookId, pageId);

            page.Should().BeNull();

            if (imageId != null)
            {
                var image = databaseConnection.GetFileById(imageId.Value);
                image.Should().BeNull();
            }
        }
示例#8
0
        internal static void ShouldHaveAddedBookPageImage(int bookId, int pageNumber, IDbConnection databaseConnection, FakeFileStorage fileStore)
        {
            var page = databaseConnection.GetBookPageByNumber(bookId, pageNumber);

            page.ImageId.Should().BeGreaterThan(0);

            var image = databaseConnection.GetFileById(page.ImageId.Value);

            image.Should().NotBeNull();
        }
示例#9
0
        internal static void ShouldHaveUpdatedBookPageImage(int bookId, int pageNumber, byte[] newImage, IDbConnection databaseConnection, FakeFileStorage fileStore)
        {
            var page = databaseConnection.GetBookPageByNumber(bookId, pageNumber);

            page.ImageId.Should().BeGreaterThan(0);

            var image = databaseConnection.GetFileById(page.ImageId.Value);

            image.Should().NotBeNull();

            var content = fileStore.GetFile(image.FilePath, CancellationToken.None).Result;

            content.Should().BeEquivalentTo(newImage);
        }
示例#10
0
 public SeriesDataBuilder(IProvideConnection connectionProvider, IFileStorage fileStorage)
 {
     _connection  = connectionProvider.GetConnection();
     _fileStorage = fileStorage as FakeFileStorage;
 }