예제 #1
0
        public void PersistentFSM_must_persist_snapshot()
        {
            var dummyReportActorRef = CreateTestProbe().Ref;

            var fsmRef = Sys.ActorOf(WebStoreCustomerFSM.Props(Name, dummyReportActorRef));

            Watch(fsmRef);

            var shirt = new Item("1", "Shirt", 59.99F);
            var shoes = new Item("2", "Shoes", 89.99F);
            var coat  = new Item("3", "Coat", 119.99F);

            fsmRef.Tell(new GetCurrentCart());
            fsmRef.Tell(new AddItem(shirt));
            fsmRef.Tell(new GetCurrentCart());
            fsmRef.Tell(new AddItem(shoes));
            fsmRef.Tell(new GetCurrentCart());
            fsmRef.Tell(new AddItem(coat));
            fsmRef.Tell(new GetCurrentCart());
            fsmRef.Tell(new Buy());
            fsmRef.Tell(new GetCurrentCart());

            ExpectMsg <EmptyShoppingCart>();

            ExpectMsg <NonEmptyShoppingCart>().Items.Should().ContainInOrder(shirt);
            ExpectMsg <NonEmptyShoppingCart>().Items.Should().ContainInOrder(shirt, shoes);
            ExpectMsg <NonEmptyShoppingCart>().Items.Should().ContainInOrder(shirt, shoes, coat);

            ExpectMsg <NonEmptyShoppingCart>().Items.Should().ContainInOrder(shirt, shoes, coat);
            ExpectNoMsg(1.Seconds());

            fsmRef.Tell(PoisonPill.Instance);
            ExpectTerminated(fsmRef);

            var recoveredFsmRef = Sys.ActorOf(WebStoreCustomerFSM.Props(Name, dummyReportActorRef));

            recoveredFsmRef.Tell(new GetCurrentCart());
            ExpectMsg <NonEmptyShoppingCart>().Items.Should().ContainInOrder(shirt, shoes, coat);

            Watch(recoveredFsmRef);
            recoveredFsmRef.Tell(PoisonPill.Instance);
            ExpectTerminated(recoveredFsmRef);

            var persistentEventsStreamer = Sys.ActorOf(PersistentEventsStreamer.Props(Name, TestActor));

            ExpectMsg <SnapshotOffer>();

            Watch(persistentEventsStreamer);
            persistentEventsStreamer.Tell(PoisonPill.Instance);
            ExpectTerminated(persistentEventsStreamer);
        }
예제 #2
0
        public void PersistentFSM_must_not_persist_state_change_event_when_staying_in_the_same_state()
        {
            var dummyReportActorRef = CreateTestProbe().Ref;

            var fsmRef = Sys.ActorOf(WebStoreCustomerFSM.Props(Name, dummyReportActorRef));

            Watch(fsmRef);

            var shirt = new Item("1", "Shirt", 59.99F);
            var shoes = new Item("2", "Shoes", 89.99F);
            var coat  = new Item("3", "Coat", 119.99F);

            fsmRef.Tell(new GetCurrentCart());
            fsmRef.Tell(new AddItem(shirt));
            fsmRef.Tell(new GetCurrentCart());
            fsmRef.Tell(new AddItem(shoes));
            fsmRef.Tell(new GetCurrentCart());
            fsmRef.Tell(new AddItem(coat));
            fsmRef.Tell(new GetCurrentCart());

            ExpectMsg <EmptyShoppingCart>();

            ExpectMsg <NonEmptyShoppingCart>().Items.Should().ContainInOrder(shirt);
            ExpectMsg <NonEmptyShoppingCart>().Items.Should().ContainInOrder(shirt, shoes);
            ExpectMsg <NonEmptyShoppingCart>().Items.Should().ContainInOrder(shirt, shoes, coat);

            fsmRef.Tell(PoisonPill.Instance);
            ExpectTerminated(fsmRef);

            var persistentEventsStreamer = Sys.ActorOf(PersistentEventsStreamer.Props(Name, TestActor));

            ExpectMsg <ItemAdded>().Item.Should().Be(shirt);
            ExpectMsg <PersistentFSM.StateChangeEvent>();

            ExpectMsg <ItemAdded>().Item.Should().Be(shoes);
            ExpectMsg <PersistentFSM.StateChangeEvent>();

            ExpectMsg <ItemAdded>().Item.Should().Be(coat);
            ExpectMsg <PersistentFSM.StateChangeEvent>();

            Watch(persistentEventsStreamer);
            persistentEventsStreamer.Tell(PoisonPill.Instance);
            ExpectTerminated(persistentEventsStreamer);
        }