public void StoreProjectSnapshotStoresTheSnapShotAsXmlInRelativeFolder()
        {
            // Arrange
            var expected = "<projectSnapshot/>";
            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 = InitialiseSnapshotMock(expected);
            var fileSystemMock = InitialiseFileSystemMockForOutput(snapshotFile, outputStream);
            var dataStore = new XmlFolderDataStore
                {
                    FileSystem = fileSystemMock,
                    SnapshotsFolder = folder
                };
            this.mocks.ReplayAll();

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

            // Assert
            this.mocks.VerifyAll();
            VerifyOutput(expected, outputStream);
        }
        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 XmlFolderDataStore
                {
                    FileSystem = fileSystemMock
                };
            this.mocks.ReplayAll();

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

            // Assert
            this.mocks.VerifyAll();
            Assert.IsNull(snapshot);
        }
        public void LoadProjectSnapshotLoadsExistingSnapshot()
        {
            // Arrange
            var logFile = "log20100101120000Lbuild.1.0";
            var projectSnapshot = "<projectStatusSnapshot xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" name=\"UnitTest\" status=\"CompletedSuccess\">" +
                    "<timeStarted>2010-01-01T12:00:00.00000+00:00</timeStarted>" +
                    "<timeCompleted>2010-01-01T12:00:01.00000+00:00</timeCompleted>" +
                    "<childItems />" +
                    "<timeOfSnapshot>2010-01-01T12:00:01.00000+00:00</timeOfSnapshot>" +
                "</projectStatusSnapshot>";
            var snapshotsDir = Path.Combine("workingDir", defaultFolder);
            var snapshotFile = Path.Combine(snapshotsDir, logFile + ".snapshot");
            var outputStream = new MemoryStream();
            var fileSystemMock = InitialiseFileSystemMockForInput(snapshotFile, projectSnapshot);
            var projectMock = InitialiseProjectMock("workingDir");
            var dataStore = new XmlFolderDataStore
                {
                    FileSystem = fileSystemMock
                };
            this.mocks.ReplayAll();

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

            // Assert
            this.mocks.VerifyAll();
            Assert.IsNotNull(snapshot);
            Assert.AreEqual("UnitTest", snapshot.Name);
            Assert.AreEqual(
                DateTime.Parse("2010-01-01T12:00:00.00000+00:00", CultureInfo.InvariantCulture), 
                snapshot.TimeStarted);
            Assert.AreEqual(ItemBuildStatus.CompletedSuccess, snapshot.Status);
        }