public void TestDefault()
        {
            var projectId    = Guid.NewGuid();
            var client1Id    = Guid.NewGuid();
            var workspace1Id = Guid.NewGuid();
            var client2Id    = Guid.NewGuid();
            var workspace2Id = Guid.NewGuid();

            // Data before server push
            var merger = new ProjectMerger(new ProjectData()
            {
                Id               = projectId,
                RemoteId         = null,
                RemoteRejected   = false,
                DeletedAt        = null,
                IsDirty          = true,
                ModifiedAt       = new DateTime(2014, 1, 10, 10, 0, 0, DateTimeKind.Utc),
                Name             = "Initial",
                Color            = 100000,
                IsActive         = true,
                IsBillable       = false,
                IsPrivate        = false,
                IsTemplate       = false,
                UseTasksEstimate = false,
                ClientId         = client1Id,
                WorkspaceId      = workspace1Id,
            });

            // Data from server
            merger.Add(new ProjectData()
            {
                Id               = projectId,
                RemoteId         = 1,
                RemoteRejected   = false,
                DeletedAt        = null,
                IsDirty          = false,
                ModifiedAt       = new DateTime(2014, 1, 10, 10, 0, 1, DateTimeKind.Utc),
                Name             = "Initial",
                Color            = 0,
                IsActive         = true,
                IsBillable       = false,
                IsPrivate        = false,
                IsTemplate       = false,
                UseTasksEstimate = false,
                ClientId         = client2Id,
                WorkspaceId      = workspace2Id,
            });

            // Data changed by user in the mean time
            merger.Add(new ProjectData()
            {
                Id               = projectId,
                RemoteId         = null,
                RemoteRejected   = false,
                DeletedAt        = null,
                IsDirty          = true,
                ModifiedAt       = new DateTime(2014, 1, 10, 10, 0, 2, DateTimeKind.Utc),
                Name             = "Changed",
                Color            = 1,
                IsActive         = true,
                IsBillable       = false,
                IsPrivate        = false,
                IsTemplate       = false,
                UseTasksEstimate = false,
                ClientId         = client1Id,
                WorkspaceId      = Guid.NewGuid(),
            });

            // Merged version
            AssertPropertiesEqual(new ProjectData()
            {
                Id               = projectId,
                RemoteId         = 1,
                RemoteRejected   = false,
                DeletedAt        = null,
                IsDirty          = true,
                ModifiedAt       = new DateTime(2014, 1, 10, 10, 0, 2, DateTimeKind.Utc),
                Name             = "Changed",
                Color            = 1,
                IsActive         = true,
                IsBillable       = false,
                IsPrivate        = false,
                IsTemplate       = false,
                UseTasksEstimate = false,
                ClientId         = client2Id,
                WorkspaceId      = workspace2Id,
            }, merger.Result);
        }
        public void TestDefault ()
        {
            var projectId = Guid.NewGuid ();
            var client1Id = Guid.NewGuid ();
            var workspace1Id = Guid.NewGuid ();
            var client2Id = Guid.NewGuid ();
            var workspace2Id = Guid.NewGuid ();

            // Data before server push
            var merger = new ProjectMerger (new ProjectData () {
                Id = projectId,
                RemoteId = null,
                RemoteRejected = false,
                DeletedAt = null,
                IsDirty = true,
                ModifiedAt = new DateTime (2014, 1, 10, 10, 0, 0, DateTimeKind.Utc),
                Name = "Initial",
                Color = 100000,
                IsActive = true,
                IsBillable = false,
                IsPrivate = false,
                IsTemplate = false,
                UseTasksEstimate = false,
                ClientId = client1Id,
                WorkspaceId = workspace1Id,
            });

            // Data from server
            merger.Add (new ProjectData () {
                Id = projectId,
                RemoteId = 1,
                RemoteRejected = false,
                DeletedAt = null,
                IsDirty = false,
                ModifiedAt = new DateTime (2014, 1, 10, 10, 0, 1, DateTimeKind.Utc),
                Name = "Initial",
                Color = 0,
                IsActive = true,
                IsBillable = false,
                IsPrivate = false,
                IsTemplate = false,
                UseTasksEstimate = false,
                ClientId = client2Id,
                WorkspaceId = workspace2Id,
            });

            // Data changed by user in the mean time
            merger.Add (new ProjectData () {
                Id = projectId,
                RemoteId = null,
                RemoteRejected = false,
                DeletedAt = null,
                IsDirty = true,
                ModifiedAt = new DateTime (2014, 1, 10, 10, 0, 2, DateTimeKind.Utc),
                Name = "Changed",
                Color = 1,
                IsActive = true,
                IsBillable = false,
                IsPrivate = false,
                IsTemplate = false,
                UseTasksEstimate = false,
                ClientId = client1Id,
                WorkspaceId = Guid.NewGuid (),
            });

            // Merged version
            AssertPropertiesEqual (new ProjectData () {
                Id = projectId,
                RemoteId = 1,
                RemoteRejected = false,
                DeletedAt = null,
                IsDirty = true,
                ModifiedAt = new DateTime (2014, 1, 10, 10, 0, 2, DateTimeKind.Utc),
                Name = "Changed",
                Color = 1,
                IsActive = true,
                IsBillable = false,
                IsPrivate = false,
                IsTemplate = false,
                UseTasksEstimate = false,
                ClientId = client2Id,
                WorkspaceId = workspace2Id,
            }, merger.Result);
        }