public void MergeFileDeletionChange(IObjectRepositoryLoader loader, ObjectRepository sut, Page page, Signature signature, string message, Func <RepositoryDescription, IComputeTreeChanges> computeTreeChangesFactory) { // master: A---C---D // \ / // newBranch: B---' // Arrange var repositoryDescription = RepositoryFixture.GetRepositoryDescription(); sut.SaveInNewRepository(signature, message, repositoryDescription); // A // Act sut.Branch("newBranch"); var updateName = page.With(p => p.Fields.Delete(page.Fields[1])); sut.Commit(updateName.Repository, signature, message); // B sut.Checkout("master"); var updateDescription = page.With(p => p.Description == "modified description"); var commitC = sut.Commit(updateDescription.Repository, signature, message); // C var loaded = loader.LoadFrom <ObjectRepository>(RepositoryFixture.GetRepositoryDescription()); var mergeCommit = loaded.Merge("newBranch").Apply(signature); // D // Assert var changes = computeTreeChangesFactory(RepositoryFixture.GetRepositoryDescription()) .Compare(commitC, mergeCommit); Assert.That(changes, Has.Count.EqualTo(1)); Assert.That(changes[0].Status, Is.EqualTo(ChangeKind.Deleted)); Assert.That(changes[0].Old.Id, Is.EqualTo(page.Fields[1].Id)); }
public void MergeSamePropertyConflict(IObjectRepositoryLoader loader, ObjectRepository sut, Page page, Signature signature, string message, Func <RepositoryDescription, IComputeTreeChanges> computeTreeChangesFactory) { // master: A---C---D // \ / // newBranch: B---' // Arrange var repositoryDescription = RepositoryFixture.GetRepositoryDescription(); sut.SaveInNewRepository(signature, message, repositoryDescription); // A // Act sut.Branch("newBranch"); var updateName = page.With(p => p.Name == "modified name"); sut.Commit(updateName.Repository, signature, message); // B sut.Checkout("master"); var updateNameOther = page.With(p => p.Name == "yet again modified name"); var commitC = sut.Commit(updateNameOther.Repository, signature, message); // C var loaded = loader.LoadFrom <ObjectRepository>(RepositoryFixture.GetRepositoryDescription()); var merge = loaded.Merge("newBranch"); var chunk = merge.ModifiedChunks.Single(); chunk.Resolve(JToken.FromObject("merged name")); var mergeCommit = merge.Apply(signature); // D // Assert var changes = computeTreeChangesFactory(RepositoryFixture.GetRepositoryDescription()) .Compare(commitC, mergeCommit); Assert.That(changes, Has.Count.EqualTo(1)); Assert.That(changes[0].Status, Is.EqualTo(ChangeKind.Modified)); Assert.That(changes[0].Old.Name, Is.EqualTo("yet again modified name")); Assert.That(changes[0].New.Name, Is.EqualTo("merged name")); }
public void MergeTwoDifferentPropertiesWithMigrationChanged(IFixture fixture, IObjectRepositoryLoader loader, ObjectRepository sut, Page page, Signature signature, string message) { // master: A-----D-----E---F // \ / / // \ ,---' / // \ / x / // newBranch: B---C---' (B contains a non-idempotent migration) // Arrange var repositoryDescription = RepositoryFixture.GetRepositoryDescription(); sut.SaveInNewRepository(signature, message, repositoryDescription); // A // B, C sut.Branch("newBranch"); var updatedInstance = sut.With(i => i.Migrations.Add(fixture.Create <Migration>())); sut.Commit(updatedInstance.Repository, signature, message); // B var loaded = loader.LoadFrom <ObjectRepository>(RepositoryFixture.GetRepositoryDescription()); var updateName = loaded.Applications[1].Pages[1].With(p => p.Name == "modified name"); loaded.Commit(updateName.Repository, signature, message); // C // D sut.Checkout("master"); var updateDescription = page.With(p => p.Description == "modified description"); sut.Commit(updateDescription.Repository, signature, message); // D loaded = loader.LoadFrom <ObjectRepository>(RepositoryFixture.GetRepositoryDescription()); // E var mergeStep1 = loaded.Merge("newBranch"); Assert.That(mergeStep1.IsPartialMerge, Is.True); mergeStep1.Apply(signature); // E // F loaded = loader.LoadFrom <ObjectRepository>(RepositoryFixture.GetRepositoryDescription()); var mergeStep2 = loaded.Merge("newBranch"); Assert.That(mergeStep2.IsPartialMerge, Is.False); mergeStep2.Apply(signature); // F }
public void MergeSamePropertyDetectsConflicts(IObjectRepositoryLoader loader, ObjectRepository sut, Page page, Signature signature, string message) { // master: A---C---D // \ / // newBranch: B---' // Arrange var repositoryDescription = RepositoryFixture.GetRepositoryDescription(); sut.SaveInNewRepository(signature, message, repositoryDescription); // A // Act sut.Branch("newBranch"); var updateName = page.With(p => p.Name == "modified name"); sut.Commit(updateName.Repository, signature, message); // B sut.Checkout("master"); var updateNameOther = page.With(p => p.Name == "yet again modified name"); sut.Commit(updateNameOther.Repository, signature, message); // C var loaded = loader.LoadFrom <ObjectRepository>(RepositoryFixture.GetRepositoryDescription()); Assert.Throws <RemainingConflictsException>(() => loaded.Merge("newBranch").Apply(signature)); }