public void StoreProjectSnapshotStoresTheSnapShotAsXmlInRelativeFolder()
        {
            // Arrange
            var folder         = "somewhereElse";
            var snapshotsDir   = Path.Combine("workingDir", folder);
            var snapshotFile   = Path.Combine(snapshotsDir, "log20100101120000Lbuild.1.0.snapshot");
            var outputStream   = new MemoryStream();
            var resultMock     = InitialiseResultMock("workingDir");
            var snapShotMock   = InitialiseSnapshot();
            var fileSystemMock = InitialiseFileSystemMockForOutput(snapshotFile, outputStream);
            var dataStore      = new JsonFolderDataStore
            {
                FileSystem      = fileSystemMock,
                SnapshotsFolder = folder
            };

            this.mocks.ReplayAll();

            // Act
            dataStore.StoreProjectSnapshot(resultMock, snapShotMock);

            // Assert
            this.mocks.VerifyAll();
            VerifyOutput(defaultJson, outputStream);
        }
        public void LoadProjectSnapshotLoadsExistingSnapshot()
        {
            // Arrange
            var logFile        = "log20100101120000Lbuild.1.0";
            var snapshotsDir   = Path.Combine("workingDir", defaultFolder);
            var snapshotFile   = Path.Combine(snapshotsDir, logFile + ".snapshot");
            var outputStream   = new MemoryStream();
            var fileSystemMock = InitialiseFileSystemMockForInput(snapshotFile, defaultJson);
            var projectMock    = InitialiseProjectMock("workingDir");
            var dataStore      = new JsonFolderDataStore
            {
                FileSystem = fileSystemMock
            };

            this.mocks.ReplayAll();

            // Act
            var snapshot = dataStore.LoadProjectSnapshot(projectMock, logFile + ".xml");

            // Assert
            this.mocks.VerifyAll();
            Assert.IsNotNull(snapshot);
            Assert.AreEqual("TestProject", snapshot.Name);
            Assert.AreEqual(
                DateTime.Parse("2010-01-01T12:00:00.00000+00:00", CultureInfo.InvariantCulture).ToUniversalTime(),
                snapshot.TimeStarted);
            Assert.AreEqual(ItemBuildStatus.CompletedSuccess, snapshot.Status);
        }
        public void LoadProjectSnapshotReturnsNullForMissingSnapshot()
        {
            // Arrange
            var logFile        = "log20100101120000Lbuild.1.0";
            var snapshotsDir   = Path.Combine("workingDir", defaultFolder);
            var snapshotFile   = Path.Combine(snapshotsDir, logFile + ".snapshot");
            var outputStream   = new MemoryStream();
            var fileSystemMock = InitialiseFileSystemMockForInput(snapshotFile, null);
            var projectMock    = InitialiseProjectMock("workingDir");
            var dataStore      = new JsonFolderDataStore
            {
                FileSystem = fileSystemMock
            };

            this.mocks.ReplayAll();

            // Act
            var snapshot = dataStore.LoadProjectSnapshot(projectMock, logFile + ".xml");

            // Assert
            this.mocks.VerifyAll();
            Assert.IsNull(snapshot);
        }