public void Execute()
        {
            var document = Session.Load<Document>(_request.Id);

            var subscriber = new Subscriber(_request.ConnectionId);
            document.AddSubscriber(subscriber);

            subscriber.SubscriberNotifiedOfUpdate +=
                (o, e) => _request.Connection.Send(_request.ConnectionId, e);
        }
        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 AddSubscriber(Subscriber subscriber)
 {
     Subcribers.Add(subscriber);
 }
        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);
        }