Ejemplo n.º 1
0
        public JournalProjectionDispatcherTest(ITestOutputHelper output)
        {
            var converter = new Converter(output);

            Console.SetOut(converter);

            _world = World.StartWithDefaults("test-journal-projections");

            _accessHolder = new AccessHolder();

            var descriptions = new List <ProjectToDescription>
            {
                ProjectToDescription <OneHappenedProjectionActor> .With <OneHappened>(() =>
                                                                                      new OneHappenedProjectionActor(_accessHolder)),
                ProjectToDescription <TwoHappenedProjectionActor> .With <TwoHappened>(() =>
                                                                                      new TwoHappenedProjectionActor(_accessHolder)),
                ProjectToDescription <AllHappenedProjectionActor>
                .With <OneHappened>(() => new AllHappenedProjectionActor(_accessHolder))
                .AndWith <TwoHappened>()
                .AndWith <ThreeHappened>()
            };

            var dispatcherProtocols =
                _world.Stage.ActorFor(
                    new[] { typeof(IDispatcher), typeof(IProjectionDispatcher) },
                    Definition.Has(() => new TextProjectionDispatcherActor(descriptions)));

            var dispatchers = Protocols.Two <IDispatcher, IProjectionDispatcher>(dispatcherProtocols);

            var dispatcher = dispatchers._1;

            _journal = Journal <string> .Using <InMemoryJournalActor <string> >(_world.Stage, dispatcher);

            EntryAdapterProvider.Instance(_world).RegisterAdapter(new OneHappenedAdapter());
            EntryAdapterProvider.Instance(_world).RegisterAdapter(new TwoHappenedAdapter());
            EntryAdapterProvider.Instance(_world).RegisterAdapter(new ThreeHappenedAdapter());

            _appendInterest = _world.Stage.ActorFor <IAppendResultInterest>(() => new JournalAppendResultInterest());
        }
        public void TestThatDescribedProjectionsRegister()
        {
            var description = ProjectToDescription <DescribedProjection> .With(() => new DescribedProjection(), "op1", "op2");

            var dispatcher =
                World.ActorFor <IDispatcher>(() => new TextProjectionDispatcherActor(new List <ProjectToDescription> {
                description
            }));

            var outcome       = new Outcome(2);
            var accessOutcome = outcome.AfterCompleting(2);

            dispatcher.ControlWith(outcome);

            var state = new TextState("123", typeof(object), 1, "blah1", 1, Metadata.With("", "op1"));

            dispatcher.Dispatch(new Dispatchable("123", DateTimeOffset.Now, state, new List <IEntry>()));

            var state2 = new TextState("1235", typeof(object), 1, "blah2", 1, Metadata.With("", "op2"));

            dispatcher.Dispatch(new Dispatchable("1235", DateTimeOffset.Now, state2, new List <IEntry>()));

            Assert.Equal(2, accessOutcome.ReadFrom <int>("count"));
        }