static void Main(string[] args) { Console.WriteLine("Demo-ObserverPattern - Observers of the Planet Express Newsletter (May or may not be inspired by Futurama).\n"); // single source for deferring content creation var subscribableContentFactory = new SubscribableContentFactory(); var subscriberFactory = new SubscriberFactory(); var personalityFactory = new PersonalityFactory(); // create new content for observers to subscribe to var content = subscribableContentFactory.CreateContent <PlanetExpressNewsletter>(); // we all have personalities y'know - the constants were nice at first, but this is gawdy var personalityOfFry = personalityFactory.Create <SubscriberPersonalization>(Constant.Fry.Name, Constant.Fry.OnSubMessage, Constant.Fry.OnUnsubMessage, Constant.Fry.OnContentReceived); var personalityOfBender = personalityFactory.Create <SubscriberPersonalization>(Constant.Bender.Name, Constant.Bender.OnSubMessage, Constant.Bender.OnUnsubMessage, Constant.Bender.OnContentReceived); var personalityOfZoidberg = personalityFactory.Create <SubscriberPersonalization>(Constant.Zoidberg.Name, Constant.Zoidberg.OnSubMessage, Constant.Zoidberg.OnUnsubMessage, Constant.Zoidberg.OnContentReceived); // subscriber - subscribe to content var fry = subscriberFactory.Create <Person>(personalityOfFry, content); var bender = subscriberFactory.Create <Robot>(personalityOfBender, content); // subscribable content - emit change content.Publish(Constant.Announcements.GoodNewsEveryone); // subscriber - subscribe to content explicitly var zoidberg = subscriberFactory.Create <Decapodian>(personalityOfZoidberg); // Decapodian: a lobster-esque alien content.AddSubscriber(zoidberg); // hey, why not zoidberg?! // subscribable content - emit change content.Publish(Constant.Announcements.IsThisThingOn); // subscriber - unsubscribe from content content.RemoveSubscriber(bender); // subscribable content - emit change content.Publish(Constant.Announcements.GoodNewsButNotOnTv); // Pausing the console for inspection Console.ReadLine(); }
public void CreateThrowsArgumentExceptionWhenEmailNull() { // ARRANGE var expectedExceptionMessage = "Must have email address to create subscriber. (Parameter 'emailAddress')"; var subjectUnderTest = new SubscriberFactory(); // ACT // ASSERT var ex = Assert.Throws <ArgumentException>( () => subjectUnderTest.Create(null) ); Assert.That(ex.Message, Is.EqualTo(expectedExceptionMessage)); }
public void CanCreateSubscriber() { // ARRANGE var expectedEmailAddress = "*****@*****.**"; var subjectUnderTest = new SubscriberFactory(); // ACT var result = subjectUnderTest.Create(expectedEmailAddress); // ASSERT Assert.That(result, Is.Not.Null); Assert.That(result, Is.InstanceOf(typeof(ISubscriber))); Assert.That(result.EmailAddress, Is.EqualTo(expectedEmailAddress)); }