public int NextIdWhenThereNoFiles()
 {
     MockFileStreamer
     .Setup(x => x.GetAllFileNames("Data\\BasicData", "data"))
     .Returns(new List <string>().ToArray());
     return(FileDataWorker.NextId <BasicData>());
 }
        public async Task DiscardChanges()
        {
            await FileDataWorker.DiscardChanges <BasicData>(ExpectedBasicData.Id);

            MockFileStreamer.Verify(x => x.DisposeOfStream("Data\\BasicData\\" + ExpectedBasicData.Id + ".data"));
            MockFileStreamer.Verify(x => x.UnlockFile("Data\\BasicData\\" + ExpectedBasicData.Id + ".data"));
        }
 public async Task <bool> DeleteSoftDeleteReturnsFalse()
 {
     MockFileStreamer
     .Setup(x => x.SoftDelete("SoftDeleteData\\" + ExpectedSoftDeleteData.Id + ".data"))
     .ReturnsAsync(false);
     return(await FileDataWorker.Delete <SoftDeleteData>(ExpectedSoftDeleteData.Id));
 }
 public async Task <bool> DeleteHardDeleteReturnsTrue()
 {
     MockFileStreamer
     .Setup(x => x.Delete("Data\\BasicData\\" + ExpectedBasicData.Id + ".data"))
     .ReturnsAsync(true);
     return(await FileDataWorker.Delete <BasicData>(ExpectedBasicData.Id));
 }
 public async Task <bool> ExistsReturnsFalse()
 {
     MockFileStreamer
     .Setup(x => x.Exists("BasicData\\" + ExpectedBasicData.Id + ".data"))
     .ReturnsAsync(false);
     return(await FileDataWorker.Exists <BasicData>(ExpectedBasicData.Id));
 }
 public async Task ReadFailsToGetLockWithRetry()
 {
     MockFileStreamer
     .Setup(x => x.GetLockForFile(It.IsAny <string>()))
     .ReturnsAsync(false);
     Assert.IsNull(await FileDataWorker.Read <RetryBasicData>(ExpectedRetryBasicData.Id));
     MockFileStreamer.Verify(x => x.ReadDataFromStream <RetryBasicData>(It.IsAny <string>()), Times.Never);
 }
 public async Task ReadFailsDueToReadThrowingAnExceptionWithRetry()
 {
     MockFileStreamer
     .Setup(x => x.ReadDataFromStream <RetryBasicData>(It.IsAny <string>()))
     .Throws <Exception>();
     Assert.IsNull(await FileDataWorker.Read <RetryBasicData>(ExpectedRetryBasicData.Id));
     MockFileStreamer.Verify(x => x.UnlockFile("Data\\RetryBasicData\\" + ExpectedRetryBasicData.Id + ".data"),
                             Times.Exactly(3));
 }
        public void Setup()
        {
            Randomizer        = Randomizer.CreateRandomizer();
            ExpectedBasicData = new BasicData
            {
                Id = Randomizer.Next()
            };
            ExpectedRetryBasicData = new RetryBasicData
            {
                Id = Randomizer.Next()
            };
            ExpectedSoftDeleteData = new SoftDeleteData
            {
                Id = Randomizer.Next()
            };

            MockFileStreamer = new Mock <IFileStreamer>();
            MockFileStreamer
            .Setup(x => x.GetLockForFile("Data\\BasicData\\" + ExpectedBasicData.Id + ".data"))
            .ReturnsAsync(true);
            MockFileStreamer
            .Setup(x => x.WriteDataToStream("Data\\BasicData\\" + ExpectedBasicData.Id + ".data",
                                            ExpectedBasicData))
            .ReturnsAsync(true);
            MockFileStreamer
            .Setup(x => x.CloseStream("Data\\BasicData\\" + ExpectedBasicData.Id + ".data"))
            .ReturnsAsync(true);
            MockFileStreamer
            .Setup(x => x.ReadDataFromStream <BasicData>("Data\\BasicData\\" + ExpectedBasicData.Id + ".data"))
            .ReturnsAsync(ExpectedBasicData);
            MockFileStreamer
            .Setup(x => x.GetLockForFile("Data\\RetryBasicData\\" + ExpectedRetryBasicData.Id + ".data"))
            .ReturnsAsync(true);
            MockFileStreamer
            .Setup(x => x.WriteDataToStream("Data\\RetryBasicData\\" + ExpectedRetryBasicData.Id + ".data",
                                            ExpectedRetryBasicData))
            .ReturnsAsync(true);
            MockFileStreamer
            .Setup(x => x.ReadDataFromStream <RetryBasicData>("Data\\RetryBasicData\\" + ExpectedRetryBasicData.Id +
                                                              ".data"))
            .ReturnsAsync(ExpectedRetryBasicData);
            MockFileStreamer
            .Setup(x => x.GetAllFileNames("Data\\BasicData", "data"))
            .Returns(new List <string>
            {
                ExpectedBasicData.Id.ToString()
            }.ToArray());
            MockFileStreamer
            .Setup(x => x.GetAllFileNames("Data\\RetryBasicData", "data"))
            .Returns(new List <string>
            {
                ExpectedRetryBasicData.Id.ToString()
            }.ToArray());

            FileDataWorker = new FileDataWorker(MockFileStreamer.Object);
        }
 public int NextIdWhenThereAreFilesButThereNumberIsLessThanOne()
 {
     MockFileStreamer
     .Setup(x => x.GetAllFileNames("Data\\BasicData", "data"))
     .Returns(new List <string>
     {
         "0"
     }.ToArray());
     return(FileDataWorker.NextId <BasicData>());
 }
        public async Task <bool> WriteFailsToGetLock()
        {
            MockFileStreamer
            .Setup(x => x.GetLockForFile(It.IsAny <string>()))
            .ReturnsAsync(false);
            var result = await FileDataWorker.Write(ExpectedBasicData.Id, ExpectedBasicData);

            MockFileStreamer.Verify(x => x.GetLockForFile(It.IsAny <string>()), Times.Once);
            return(result);
        }
        public async Task <bool> RestoreSoftDeleteDataReturnsFalse()
        {
            MockFileStreamer
            .Setup(x => x.Undelete("Data\\SoftDeleteData\\" + ExpectedSoftDeleteData.Id + ".data"))
            .ReturnsAsync(false);
            var result = await FileDataWorker.Undelete <SoftDeleteData>(ExpectedSoftDeleteData.Id);

            MockFileStreamer.Verify(x => x.Undelete("Data\\SoftDeleteData\\" + ExpectedSoftDeleteData.Id + ".data"),
                                    Times.Once);
            return(result);
        }
        public async Task RollbackWithRetry()
        {
            MockFileStreamer
            .SetupSequence(x => x.GetLockForFile(It.IsAny <string>()))
            .ReturnsAsync(false)
            .ReturnsAsync(true);
            await FileDataWorker.Rollback(ExpectedBasicData.Id, ExpectedBasicData);

            MockFileStreamer
            .Verify(x => x.GetLockForFile(It.IsAny <string>()), Times.Exactly(2));
            MockFileStreamer
            .Verify(x => x.CloseStream(It.IsAny <string>()), Times.Once);
        }
        public async Task <bool> WriteSuccessfulFirstTime()
        {
            var result = await FileDataWorker.Write(ExpectedBasicData.Id, ExpectedBasicData);

            MockFileStreamer.Verify(x => x.GetLockForFile("Data\\BasicData\\" + ExpectedBasicData.Id + ".data"),
                                    Times.Once);
            MockFileStreamer.Verify(
                x => x.WriteDataToStream("Data\\BasicData\\" + ExpectedBasicData.Id + ".data", ExpectedBasicData),
                Times.Once);
            MockFileStreamer.Verify(x => x.UnlockFile("Data\\BasicData\\" + ExpectedBasicData.Id + ".data"),
                                    Times.Never);
            return(result);
        }
        public async Task ReadAllSuccessful()
        {
            var dataSet = FileDataWorker.ReadAll <BasicData>();
            var results = new List <BasicData>();

            await foreach (var data in dataSet)
            {
                results.Add(data);
            }
            Assert.AreSame(ExpectedBasicData, results.ElementAt(0));
            MockFileStreamer.Verify(x => x.UnlockFile("Data\\BasicData\\" + ExpectedBasicData.Id + ".data"),
                                    Times.Once);
        }
 public async Task ReadSuccessfulWithRetry()
 {
     MockFileStreamer
     .SetupSequence(x =>
                    x.ReadDataFromStream <RetryBasicData>("Data\\RetryBasicData\\" + ExpectedRetryBasicData.Id +
                                                          ".data"))
     .Throws <Exception>()
     .ReturnsAsync(ExpectedRetryBasicData);
     Assert.AreSame(ExpectedRetryBasicData,
                    await FileDataWorker.Read <RetryBasicData>(ExpectedRetryBasicData.Id));
     MockFileStreamer.Verify(x => x.UnlockFile("Data\\RetryBasicData\\" + ExpectedRetryBasicData.Id + ".data"),
                             Times.Exactly(2));
 }
        public async Task <bool> WriteAndCommitFailsToGetLock()
        {
            MockFileStreamer
            .Setup(x => x.GetLockForFile(It.IsAny <string>()))
            .ReturnsAsync(false);
            var result = await FileDataWorker.WriteAndCommit(ExpectedBasicData.Id, ExpectedBasicData);

            MockFileStreamer.Verify(x => x.GetLockForFile(It.IsAny <string>()), Times.Once);
            MockFileStreamer.Verify(x => x.CloseStream("BasicData\\" + ExpectedBasicData.Id + ".data"), Times.Never);
            MockFileStreamer.Verify(x => x.DisposeOfStream("BasicData\\" + ExpectedBasicData.Id + ".data"),
                                    Times.Never);
            return(result);
        }
        public async Task ReadAllFailsToGetLockWithRetry()
        {
            MockFileStreamer
            .Setup(x => x.GetLockForFile(It.IsAny <string>()))
            .ReturnsAsync(false);
            var dataSet = FileDataWorker.ReadAll <BasicData>();
            var results = new List <BasicData>();

            await foreach (var data in dataSet)
            {
                results.Add(data);
            }
            MockFileStreamer.Verify(x => x.ReadDataFromStream <RetryBasicData>(It.IsAny <string>()), Times.Never);
        }
        public async Task ReadAllFailsDueToReadThrowingAnExceptionWithRetry()
        {
            MockFileStreamer
            .Setup(x => x.ReadDataFromStream <RetryBasicData>(It.IsAny <string>()))
            .Throws <Exception>();
            var dataSet = FileDataWorker.ReadAll <RetryBasicData>();
            var results = new List <RetryBasicData>();

            await foreach (var data in dataSet)
            {
                results.Add(data);
            }
            MockFileStreamer.Verify(x => x.UnlockFile("Data\\RetryBasicData\\" + ExpectedRetryBasicData.Id + ".data"),
                                    Times.Exactly(3));
        }
        public async Task <bool> CommitFailsToCloseStreamDueToException()
        {
            MockFileStreamer
            .Setup(x => x.CloseStream(It.IsAny <string>()))
            .Throws <Exception>();
            var result = await FileDataWorker.Commit <BasicData>(ExpectedBasicData.Id);

            MockFileStreamer
            .Verify(x => x.CloseStream(It.IsAny <string>()), Times.Once);
            MockFileStreamer
            .Verify(x => x.DisposeOfStream("Data\\BasicData\\" + ExpectedBasicData.Id + ".data"), Times.Once);
            MockFileStreamer
            .Verify(x => x.UnlockFile("Data\\BasicData\\" + ExpectedBasicData.Id + ".data"), Times.Once);
            return(result);
        }
        public async Task <bool> CommitSuccessful()
        {
            MockFileStreamer
            .Setup(x => x.CloseStream(It.IsAny <string>()))
            .ReturnsAsync(true);
            var result = await FileDataWorker.Commit <BasicData>(ExpectedBasicData.Id);

            MockFileStreamer
            .Verify(x => x.CloseStream("Data\\BasicData\\" + ExpectedBasicData.Id + ".data"), Times.Once);
            MockFileStreamer
            .Verify(x => x.DisposeOfStream("Data\\BasicData\\" + ExpectedBasicData.Id + ".data"), Times.Never);
            MockFileStreamer
            .Verify(x => x.UnlockFile("Data\\BasicData\\" + ExpectedBasicData.Id + ".data"), Times.Once);
            return(result);
        }
        public async Task ReadAllWhenThereAreNoFiles()
        {
            MockFileStreamer
            .Setup(x => x.GetAllFileNames("Data\\BasicData", "data"))
            .Returns(new List <string>().ToArray());
            var dataSet = FileDataWorker.ReadAll <BasicData>();
            var results = new List <BasicData>();

            await foreach (var data in dataSet)
            {
                results.Add(data);
            }
            Assert.IsEmpty(results);
            MockFileStreamer.Verify(x => x.ReadDataFromStream <BasicData>(It.IsAny <string>()), Times.Never);
        }
        public async Task <bool> CommitFailsToCloseStreamWithRetry()
        {
            MockFileStreamer
            .Setup(x => x.CloseStream(It.IsAny <string>()))
            .ReturnsAsync(false);
            var result = await FileDataWorker.Commit <RetryBasicData>(ExpectedRetryBasicData.Id);

            MockFileStreamer
            .Verify(x => x.CloseStream(It.IsAny <string>()), Times.Exactly(3));
            MockFileStreamer
            .Verify(x => x.DisposeOfStream("Data\\RetryBasicData\\" + ExpectedRetryBasicData.Id + ".data"),
                    Times.Once);
            MockFileStreamer
            .Verify(x => x.UnlockFile("Data\\RetryBasicData\\" + ExpectedRetryBasicData.Id + ".data"), Times.Once);
            return(result);
        }
        public async Task <bool> WriteFailsToWriteDataToStreamDueToException()
        {
            MockFileStreamer
            .Setup(x => x.WriteDataToStream(It.IsAny <string>(), It.IsAny <BasicData>()))
            .Throws <Exception>();
            var result = await FileDataWorker.Write(ExpectedBasicData.Id, ExpectedBasicData);

            MockFileStreamer.Verify(x => x.GetLockForFile("Data\\BasicData\\" + ExpectedBasicData.Id + ".data"),
                                    Times.Once);
            MockFileStreamer.Verify(
                x => x.WriteDataToStream("Data\\BasicData\\" + ExpectedBasicData.Id + ".data", ExpectedBasicData),
                Times.Once);
            MockFileStreamer.Verify(x => x.UnlockFile("Data\\BasicData\\" + ExpectedBasicData.Id + ".data"),
                                    Times.Once);
            return(result);
        }
        public async Task <bool> WriteFailsToWriteDataToStreamWithRetry()
        {
            MockFileStreamer
            .Setup(x => x.WriteDataToStream(It.IsAny <string>(), It.IsAny <RetryBasicData>()))
            .ReturnsAsync(false);
            var result = await FileDataWorker.Write(ExpectedRetryBasicData.Id, ExpectedRetryBasicData);

            MockFileStreamer.Verify(
                x => x.GetLockForFile("Data\\RetryBasicData\\" + ExpectedRetryBasicData.Id + ".data"),
                Times.Exactly(3));
            MockFileStreamer.Verify(
                x => x.WriteDataToStream("Data\\RetryBasicData\\" + ExpectedRetryBasicData.Id + ".data",
                                         ExpectedRetryBasicData), Times.Exactly(3));
            MockFileStreamer.Verify(x => x.UnlockFile("Data\\RetryBasicData\\" + ExpectedRetryBasicData.Id + ".data"),
                                    Times.Exactly(3));
            return(result);
        }
        public async Task ReadAllSuccessfulWithRetry()
        {
            MockFileStreamer
            .SetupSequence(x =>
                           x.ReadDataFromStream <RetryBasicData>("Data\\RetryBasicData\\" + ExpectedRetryBasicData.Id + ".data"))
            .Throws <Exception>()
            .ReturnsAsync(ExpectedRetryBasicData);
            var dataSet = FileDataWorker.ReadAll <RetryBasicData>();
            var results = new List <RetryBasicData>();

            await foreach (var data in dataSet)
            {
                results.Add(data);
            }
            MockFileStreamer.Verify(x => x.UnlockFile("Data\\RetryBasicData\\" + ExpectedRetryBasicData.Id + ".data"),
                                    Times.Exactly(2));
        }
        public async Task <bool> WriteSuccessfulAfterRetry()
        {
            MockFileStreamer
            .SetupSequence(x => x.WriteDataToStream("Data\\RetryBasicData\\" + ExpectedRetryBasicData.Id + ".data",
                                                    ExpectedRetryBasicData))
            .ReturnsAsync(false)
            .ReturnsAsync(true);
            var result = await FileDataWorker.Write(ExpectedRetryBasicData.Id, ExpectedRetryBasicData);

            MockFileStreamer.Verify(
                x => x.GetLockForFile("Data\\RetryBasicData\\" + ExpectedRetryBasicData.Id + ".data"),
                Times.Exactly(2));
            MockFileStreamer.Verify(
                x => x.WriteDataToStream("Data\\RetryBasicData\\" + ExpectedRetryBasicData.Id + ".data",
                                         ExpectedRetryBasicData), Times.Exactly(2));
            MockFileStreamer.Verify(x => x.UnlockFile("Data\\RetryBasicData\\" + ExpectedRetryBasicData.Id + ".data"),
                                    Times.Exactly(1));
            return(result);
        }
        public void NextIdWhenThereAreFilesAndThereNumberIsGraterThanOne()
        {
            var result = FileDataWorker.NextId <BasicData>();

            Assert.AreEqual(ExpectedBasicData.Id + 1, result);
        }
 public async Task ReadSuccessful()
 {
     Assert.AreSame(ExpectedBasicData, await FileDataWorker.Read <BasicData>(ExpectedBasicData.Id));
     MockFileStreamer.Verify(x => x.UnlockFile("Data\\BasicData\\" + ExpectedBasicData.Id + ".data"),
                             Times.Once);
 }