public void Ensure_When_We_Construct_A_Revision_It_Contains_A_Reference_To_The_Previous_Revision()
 {
     var previousRevision = new TestRevision("Test");
     var patches = new diff_match_patch().patch_make("Test", "Test2");
     var revison = new BasicRevision(previousRevision, patches);
     Assert.That(revison.PreviousRevisionAppliedTo != null);
 }
 public void Ensure_When_We_Construct_A_Revision_We_Can_Retrieve_The_Current_Document_Content_From_The_Revision_Object()
 {
     var previousRevision = new TestRevision("Test");
     var patches = new diff_match_patch().patch_make("Test", "Test2");
     var revison = new BasicRevision(previousRevision, patches);
     Assert.That(revison.GenerateEditedContent() != null);
 }
 public void Ensure_We_Can_Construct_A_Basic_Revision()
 {
     var previousRevision = new TestRevision("Test");
     var patches = new diff_match_patch().patch_make("Test", "Test2");
     var revison = new BasicRevision(previousRevision, patches);
     Assert.That(revison != null);
 }
 public void Ensure_When_We_Construct_A_Revision_And_Retreive_The_Current_Document_That_It_Contains_Changes_From_The_Latest_Revision()
 {
     var previousRevision = new TestRevision("Test");
     var patches = new diff_match_patch().patch_make("Test", "Test2");
     var revison = new BasicRevision(previousRevision,patches);
     var content = revison.GenerateEditedContent();
     Assert.That(content, Is.EqualTo("Test2"));
 }
 public void Given_A_Merging_Revision_With_Two_Mergeable_Revisions_Ensure_That_When_We_Retrieve_The_Current_Document_It_Contains_The_Merge()
 {
     var originalRevision = new TestRevision("Test\nTest");
     var revisionOne = new BasicRevision(originalRevision, Patches.Make(originalRevision.GenerateEditedContent(), "Test\nTest3"));
     var revisionTwo = new BasicRevision(originalRevision, Patches.Make(originalRevision.GenerateEditedContent(), "Test2\nTest"));
     var revision = new MergingRevision(originalRevision, new List<IRevision> {revisionOne, revisionTwo});
     Assert.That(revision.GenerateEditedContent(), Is.EqualTo("Test2\nTest3"));
 }
 public void Execute()
 {
     var document = Session.Load<Document>(_documentEditRequest.DocumentId);
     var parentRevision = document.LoadRevision(_documentEditRequest.ParentRevisionId);
     if(parentRevision == null)
         throw new InvalidDataException("Cannot load the revision specified by this DocumentEditRequest");
     var revision = new BasicRevision(parentRevision, _documentEditRequest.Patches.ToList(), _documentEditRequest.RevisionId);
     document.Edit(revision);
 }
        public void Ensure_We_Can_Construct_A_Merging_Revision()
        {
            var originalRevision = new TestRevision("Test\nTest");
            var revisionOne = new BasicRevision(originalRevision,
                                                Patches.Make(originalRevision.GenerateEditedContent(), "Test\nTest3"));

            var revisionTwo = new BasicRevision(originalRevision,
                                                Patches.Make(originalRevision.GenerateEditedContent(), "Test2\nTest"));
            var revision = new MergingRevision(originalRevision, new List<IRevision> { revisionOne, revisionTwo });
            Assert.That(revision != null);
        }
 public void Given_Two_Un_Mergeable_Revisions_Ensure_that_When_We_Construct_The_MergingRevision_Ensure_It_Is_Marked_As_In_Conflict()
 {
     var originalRevision = new TestRevision("Test\nTest");
     var revisionOne = new BasicRevision(originalRevision,
                                         Patches.Make(originalRevision.GenerateEditedContent(),
                                                      "The quick brown fox jumped over the lazy dog\nTest"));
     var revisionTwo = new BasicRevision(originalRevision,
                                         Patches.Make(originalRevision.GenerateEditedContent(),
                                                      "Waiter, there's a fly in my soup\nTest"));
     var revision = new MergingRevision(originalRevision, new List<IRevision> { revisionOne, revisionTwo });
     Assert.That(revision.RevisionsConflict);
 }
 public void Given_A_Merging_Revision_With_Two_Un_Mergeable_Revisions_Ensure_that_When_We_Retrieve_The_Current_Document_We_Recieve_An_Exception()
 {
     var originalRevision = new TestRevision("Test\nTest");
     var revisionOne = new BasicRevision(originalRevision,
                                         Patches.Make(originalRevision.GenerateEditedContent(),
                                                      "The quick brown fox jumped over the lazy dog\nTest"));
     var revisionTwo = new BasicRevision(originalRevision,
                                         Patches.Make(originalRevision.GenerateEditedContent(),
                                                      "Waiter, there's a fly in my soup\nTest"));
     var revision = new MergingRevision(originalRevision, new List<IRevision> {revisionOne, revisionTwo});
     Assert.Throws<ConflictException>(() => revision.GenerateEditedContent());
 }
 public void Given_A_Merging_Revision_With_Two_Un_Mergeable_Revisions_Ensure_that_If_We_Set_A_Revision_For_Resolution_And_Then_Call_GenerateEditedContent_It_Returns_The_Resolution_Revision()
 {
     var originalRevision = new TestRevision("Test\nTest");
     var revisionOne = new BasicRevision(originalRevision,
                                         Patches.Make(originalRevision.GenerateEditedContent(),
                                                      "The quick brown fox jumped over the lazy dog\nTest"));
     var revisionTwo = new BasicRevision(originalRevision,
                                         Patches.Make(originalRevision.GenerateEditedContent(),
                                                      "Waiter, there's a fly in my soup\nTest"));
     var revision = new MergingRevision(originalRevision, new List<IRevision> { revisionOne, revisionTwo });
     revision.ResolveConflict(new TestRevision("The quick brown fox jumped over the lazy dog\nWaiter, there's a fly in my soup\nTest"));
     Assert.That(revision.GenerateEditedContent(),
                 Is.EqualTo(
                     "The quick brown fox jumped over the lazy dog\nWaiter, there's a fly in my soup\nTest"));
 }
        public void Ensure_That_When_We_Save_And_Then_Reload_a_Document_That_The_NextRevision_Applied_Property_On_Its_Revisios_Is_Populated()
        {
            Document document;
            using (var session = DocumentStore.OpenSession())
            {
                document = new Document("Test");
                var revision = new BasicRevision(document.CurrentRevision, Patches.Make(document.Contents, "Test2"));
                document.Edit(revision);
                session.Store(document);

                session.SaveChanges();
            }

            using (var session = DocumentStore.OpenSession())
            {
                var loadedDoc = session.Load<Document>(document.Id);
                Assert.That(loadedDoc.CurrentRevision.PreviousRevisionAppliedTo.NextRevisionApplied, Is.EqualTo(loadedDoc.CurrentRevision));
            }
        }
        public void Ensure_That_If_We_Add_Two_Revisions_With_The_Same_Previous_Revision_The_Document_Handles_The_Merge()
        {
            var document = new Document("I went to the store to get mom some milk");

            var revisionOne = new BasicRevision(document.CurrentRevision,
                                                Patches.Make("I went to the store to get mom some milk",
                                                             "I went to the store to get mom some milk and crackers"));
            var revisionTwo = new BasicRevision(document.CurrentRevision,
                                                Patches.Make("I went to the store to get mom some milk",
                                                             "I ran to the store to get mom some milk"));

            document.Edit(revisionTwo);
            document.Edit(revisionOne);

            Assert.That(document.CurrentRevision.GenerateEditedContent(),
                        Is.EqualTo("I ran to the store to get mom some milk and crackers"));
        }
        public void Given_We_Have_A_Document_With_A_Merging_Revision_As_The_Parent_Of_The_Current_Revision_Ensure_That_When_The_Document_Is_Edited_With_A_Revision_Targeting_One_Of_The_Merged_Revisions_The_New_Revision_Is_Merged_In()
        {
            var document = new Document("I went to the store to get some milk");
            var revisionsToMerge = new[]
                {
                    "I ran to the store to get some milk",
                    "I went to the store to get some milk and crackers"
                }.Select(s => new BasicRevision(document.CurrentRevision, Patches.Make(document.Contents, s))).ToList();

            foreach (var basicRevision in revisionsToMerge)
                document.Edit(basicRevision);

            var postMergeRevision = new BasicRevision(document.CurrentRevision,
                                                      Patches.Make(document.Contents,
                                                                   "I ran to the store to get mom some milk and crackers"));
            document.Edit(postMergeRevision);

            var lateRevisionsParent = revisionsToMerge.First();
            var lateRevision = new BasicRevision(lateRevisionsParent,
                                                 Patches.Make(lateRevisionsParent.GenerateEditedContent(),
                                                              "I ran to the corner store to get some milk"));

            document.Edit(lateRevision);

            Assert.That(document.Contents, Is.EqualTo("I ran to the corner store to get mom some milk and crackers"));
        }
        public void Given_We_Have_Added_A_Subscriber_To_A_Document_Ensure_That_When_The_Document_Merges_Two_Revisions_The_Subscriber_Is_Notified_With_The_Merging_Revision()
        {
            var document = new Document("I went to the store");
            var subscriber = new Subscriber(Guid.NewGuid().ToString());
            document.AddSubscriber(subscriber);

            var revision1 = new BasicRevision(document.CurrentRevision, Patches.Make(document.Contents, "I went to the store to get some milk"));
            var revision2 = new BasicRevision(document.CurrentRevision, Patches.Make(document.Contents, "I went to the corner store"));
            IList<Patch> notifiedPatch = null;
            subscriber.SubscriberNotifiedOfUpdate +=
                (o, e) => notifiedPatch = e.patches;
            document.Edit(revision1);
            document.Edit(revision2);
            var patch = document.CurrentRevision.BuildPatch();

            Assert.That(notifiedPatch.Select(p=> p.ToString()), Is.EquivalentTo(patch.Select(p=> p.ToString())));
        }
        public void Given_We_Have_Added_A_Subscriber_To_A_Document_Ensure_That_When_A_Document_Is_Edited_The_Subscriber_Is_Notified()
        {
            var document = new Document("Test");
            var subscriber = new Subscriber(Guid.NewGuid().ToString());
            document.AddSubscriber(subscriber);

            var revision = new BasicRevision(document.CurrentRevision, Patches.Make(document.Contents, "Test 2"));
            var eventFired = false;
            subscriber.SubscriberNotifiedOfUpdate += (o, e) => eventFired = true;
            document.Edit(revision);

            Assert.That(eventFired);
        }
        public void Ensure_We_Can_Add_A_Revision_To_A_Document_And_Then_Retrive_The_New_Document_Contents()
        {
            var document = new Document();
            var patch = Patches.Make("", "This is a test");
            var revision = new BasicRevision(document.CurrentRevision, patch);

            document.Edit(revision);
            Assert.That(document.CurrentRevision.GenerateEditedContent(), Is.EqualTo("This is a test"));
        }