public async Task <bool> UpdateEventWriteDataToStreamFails()
 {
     return(await WriteDataToStreamFails(
                async() => await FileAuditWorker.UpdateEvent(ExpectedData, OldExpectedData),
                x => x.UpdateLog(It.IsAny <AuditableData>(), It.IsAny <AuditableData>(), It.IsAny <AuditLog>()),
                UpdateExpectedAuditLog, Times.Exactly(3), Times.Exactly(4)));
 }
        public async Task DiscardChanges()
        {
            await FileAuditWorker.DiscardEvents(ExpectedData);

            MockFileStreamer.Verify(x => x.DisposeOfStream("Data\\AuditableData\\" + ExpectedData.Id + ".audit"));
            MockFileStreamer.Verify(x => x.UnlockFile("Data\\AuditableData\\" + ExpectedData.Id + ".audit"));
        }
 public async Task <bool> RollbackEventWriteDataToStreamFailsDueToException()
 {
     return(await WriteDataToStreamFailsDueToException(
                async() => await FileAuditWorker.RollbackEvent(ExpectedData),
                x => x.RollbackLog(It.IsAny <AuditableData>(), It.IsAny <AuditLog>()),
                RollbackExpectedAuditLog, Times.Exactly(3), Times.Exactly(4)));
 }
 public async Task <bool> UpdateEventGenerateAuditFailsDueToException()
 {
     return(await GenerateAuditFailsDueToException(
                async() => await FileAuditWorker.UpdateEvent(ExpectedData, OldExpectedData),
                x => x.UpdateLog(It.IsAny <AuditableData>(), It.IsAny <AuditableData>(), It.IsAny <AuditLog>()),
                Times.Exactly(4)));
 }
 public async Task <bool> UpdateEventGetLockForFileFails()
 {
     return(await GetLockForFileFails(
                async() => await FileAuditWorker.UpdateEvent(ExpectedData, OldExpectedData),
                x => x.UpdateLog(It.IsAny <AuditableData>(), It.IsAny <AuditableData>(), It.IsAny <AuditLog>()),
                Times.Exactly(6)));
 }
 public async Task <bool> CreationEventWriteDataToStreamFailsDueToException()
 {
     return(await WriteDataToStreamFailsDueToException(
                async() => await FileAuditWorker.CreationEvent(ExpectedData),
                x => x.NewLog(It.IsAny <AuditableData>()),
                CreateExpectedAuditLog, Times.Exactly(3), Times.Exactly(3)));
 }
        public async Task ReadAllEventsSuccessful()
        {
            var result = await FileAuditWorker.ReadAllEvents <AuditableData>(ExpectedData.Id);

            MockFileStreamer.Verify(x => x.GetLockForFile(It.IsAny <string>()), Times.Once);
            MockFileStreamer.Verify(x => x.UnlockFile(It.IsAny <string>()), Times.Once);
            MockFileStreamer.Verify(x => x.ReadDataFromStream <AuditLog>(It.IsAny <string>()), Times.Once);
            Assert.AreSame(CreateExpectedAuditLog, result);
        }
        public async Task <bool> CommitEventsSuccess()
        {
            var result = await FileAuditWorker.CommitEvents(ExpectedData);

            MockFileStreamer.Verify(x => x.DisposeOfStream(It.IsAny <string>()), Times.Never);
            MockFileStreamer.Verify(x => x.UnlockFile("Data\\AuditableData\\" + ExpectedData.Id + ".audit"),
                                    Times.Once);
            return(result);
        }
        public async Task <AuditLog> ReadAllEventsReadDataFromStreamFailsDueToException()
        {
            MockFileStreamer
            .Setup(x => x.ReadDataFromStream <AuditLog>(It.IsAny <string>()))
            .Throws <Exception>();
            var result = await FileAuditWorker.ReadAllEvents <AuditableData>(ExpectedData.Id);

            MockFileStreamer.Verify(x => x.GetLockForFile(It.IsAny <string>()), Times.Exactly(3));
            MockFileStreamer.Verify(x => x.UnlockFile(It.IsAny <string>()), Times.Exactly(3));
            MockFileStreamer.Verify(x => x.ReadDataFromStream <AuditLog>(It.IsAny <string>()), Times.Exactly(3));
            return(result);
        }
        public async Task <AuditLog> ReadAllEventsGetLockForFileFails()
        {
            MockFileStreamer
            .Setup(x => x.GetLockForFile(It.IsAny <string>()))
            .ReturnsAsync(false);
            var result = await FileAuditWorker.ReadAllEvents <AuditableData>(ExpectedData.Id);

            MockFileStreamer.Verify(x => x.GetLockForFile(It.IsAny <string>()), Times.Exactly(3));
            MockFileStreamer.Verify(x => x.UnlockFile(It.IsAny <string>()), Times.Never);
            MockFileStreamer.Verify(x => x.ReadDataFromStream <AuditLog>(It.IsAny <string>()), Times.Never);
            return(result);
        }
        public void Setup()
        {
            Randomizer = Randomizer.CreateRandomizer();

            ExpectedData = new AuditableData
            {
                Id     = Randomizer.Next(),
                Value1 = Randomizer.GetString(),
                Value2 = Randomizer.Next()
            };
            OldExpectedData = new AuditableData
            {
                Id     = Randomizer.Next(),
                Value1 = Randomizer.GetString(),
                Value2 = Randomizer.Next()
            };
            CreateExpectedAuditLog   = new AuditLog();
            UpdateExpectedAuditLog   = new AuditLog();
            DeleteExpectedAuditLog   = new AuditLog();
            UndeleteExpectedAuditLog = new AuditLog();
            RollbackExpectedAuditLog = new AuditLog();

            MockFileStreamer = new Mock <IFileStreamer>();
            MockFileStreamer
            .Setup(x => x.GetLockForFile("Data\\AuditableData\\" + ExpectedData.Id + ".audit"))
            .ReturnsAsync(true);
            MockFileStreamer
            .Setup(x => x.Exists("Data\\AuditableData\\" + ExpectedData.Id + ".audit"))
            .ReturnsAsync(true);
            MockFileStreamer
            .Setup(x => x.ReadDataFromStream <AuditLog>("Data\\AuditableData\\" + ExpectedData.Id + ".audit"))
            .ReturnsAsync(CreateExpectedAuditLog);
            MockFileStreamer
            .Setup(x => x.CloseStream("Data\\AuditableData\\" + ExpectedData.Id + ".audit"))
            .ReturnsAsync(true);
            MockAuditGenerator = new Mock <IAuditGenerator>();
            MockAuditGenerator
            .Setup(x => x.NewLog(ExpectedData))
            .Returns(CreateExpectedAuditLog);
            MockAuditGenerator
            .Setup(x => x.UpdateLog(ExpectedData, OldExpectedData, CreateExpectedAuditLog))
            .Returns(UpdateExpectedAuditLog);
            MockAuditGenerator
            .Setup(x => x.DeleteLog(ExpectedData, CreateExpectedAuditLog))
            .Returns(DeleteExpectedAuditLog);
            MockAuditGenerator
            .Setup(x => x.UndeleteLog(ExpectedData, CreateExpectedAuditLog))
            .Returns(UndeleteExpectedAuditLog);
            MockAuditGenerator
            .Setup(x => x.RollbackLog(ExpectedData, CreateExpectedAuditLog))
            .Returns(RollbackExpectedAuditLog);
            FileAuditWorker = new FileAuditWorker(MockFileStreamer.Object, MockAuditGenerator.Object);
        }
        public async Task <bool> CommitEventsCloseStreamFailsDueToException()
        {
            MockFileStreamer
            .Setup(x => x.CloseStream(It.IsAny <string>()))
            .Throws <Exception>();
            var result = await FileAuditWorker.CommitEvents(ExpectedData);

            MockFileStreamer.Verify(x => x.DisposeOfStream("Data\\AuditableData\\" + ExpectedData.Id + ".audit"),
                                    Times.Once);
            MockFileStreamer.Verify(x => x.UnlockFile("Data\\AuditableData\\" + ExpectedData.Id + ".audit"),
                                    Times.Once);
            return(result);
        }
 public async Task <bool> RollbackEventSuccess()
 {
     return(await SuccessEvent(async() => await FileAuditWorker.RollbackEvent(ExpectedData),
                               x => x.RollbackLog(ExpectedData, CreateExpectedAuditLog),
                               RollbackExpectedAuditLog, Times.Exactly(2), Times.Once()));
 }
 public async Task <bool> UpdateEventSuccess()
 {
     return(await SuccessEvent(async() => await FileAuditWorker.UpdateEvent(ExpectedData, OldExpectedData),
                               x => x.UpdateLog(ExpectedData, OldExpectedData, CreateExpectedAuditLog),
                               UpdateExpectedAuditLog, Times.Exactly(2), Times.Once()));
 }
 public async Task <bool> CreationEventSuccess()
 {
     return(await SuccessEvent(async() => await FileAuditWorker.CreationEvent(ExpectedData),
                               x => x.NewLog(ExpectedData),
                               CreateExpectedAuditLog, Times.Once(), Times.Never()));
 }
 public async Task <bool> CreationEventGetLockForFileFails()
 {
     return(await GetLockForFileFails(async() => await FileAuditWorker.CreationEvent(ExpectedData),
                                      x => x.NewLog(It.IsAny <AuditableData>()), Times.Exactly(3)));
 }