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 async Task Handle_Invalid_Throws()
        {
            // arrange
            var id      = new Guid("a87887ec-df44-4607-9e6f-28f361670f9b");
            var request = new DeleteFileCommand(id);

            var repositoryMock = new Mock <IRepository <File> >();

            repositoryMock.Setup(x => x.Delete(It.IsAny <Guid>(), CancellationToken.None)).ThrowsAsync(new Exception());

            var handler = new DeleteFileCommandHandler(repositoryMock.Object);

            // act
            await Assert.ThrowsAsync <DeleteException>(() => handler.Handle(request, CancellationToken.None));

            // assert
            repositoryMock.Verify(x => x.Delete(It.IsAny <Guid>(), CancellationToken.None), Times.Once);
            repositoryMock.VerifyNoOtherCalls();
        }
        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));
        }
        public async Task Handle_Valid_Deletes()
        {
            // arrange
            var id                = new Guid("a87887ec-df44-4607-9e6f-28f361670f9b");
            var request           = new DeleteFileCommand(id);
            var inputGuidToAssert = Guid.Empty;

            var repositoryMock = new Mock <IRepository <File> >();
            var insertSetup    = repositoryMock.Setup(x => x.Delete(It.IsAny <Guid>(), CancellationToken.None));

            insertSetup.Callback((Guid guid, CancellationToken token) => inputGuidToAssert = guid);

            var handler = new DeleteFileCommandHandler(repositoryMock.Object);

            // act
            await handler.Handle(request, CancellationToken.None);

            // assert
            repositoryMock.Verify(x => x.Delete(id, CancellationToken.None), Times.Once);
            repositoryMock.VerifyNoOtherCalls();
            Assert.Equal(id, inputGuidToAssert);
        }
Example #5
0
 public DeleteFileCommandHandlerTests()
 {
     _fileRepositoryMock    = new Mock <IFileRepository>();
     _fileSystemServiceMock = new Mock <IFileSystemService>();
     _handler = new DeleteFileCommandHandler(_fileRepositoryMock.Object, _fileSystemServiceMock.Object);
 }