public void TestThatItRoutes()
        {
            var messagesToSend = 63;
            var until          = TestUntil.Happenings(messagesToSend);

            var erpsToTest = new[] { ERPSystemCode.Alpha, ERPSystemCode.Beta, ERPSystemCode.Charlie };

            var routerTestActorProtocols = World.ActorFor(
                new[] { typeof(IInvoiceSubmitter), typeof(IInvoiceSubmitterSubscription) },
                typeof(InvoiceSubmissionRouter),
                until);

            var routerProtocols = Protocols.Two <IInvoiceSubmitter, IInvoiceSubmitterSubscription>(routerTestActorProtocols);

            var routerAsInvoiceSubmitter             = routerProtocols._1;
            var routerAsInvoiceSubmitterSubscription = routerProtocols._2;

            var alphaSubmitterTestActor = TestWorld.ActorFor <IInvoiceSubmitter>(typeof(ERPSpecificInvoiceSubmitter), ERPSystemCode.Alpha, until);

            routerAsInvoiceSubmitterSubscription.Subscribe(alphaSubmitterTestActor.ActorAs <IInvoiceSubmitter>());

            var betaSubmitterTestActor = TestWorld.ActorFor <IInvoiceSubmitter>(typeof(ERPSpecificInvoiceSubmitter), ERPSystemCode.Beta, until);

            routerAsInvoiceSubmitterSubscription.Subscribe(betaSubmitterTestActor.ActorAs <IInvoiceSubmitter>());

            var charlieSubmitterTestActor = TestWorld.ActorFor <IInvoiceSubmitter>(typeof(ERPSpecificInvoiceSubmitter), ERPSystemCode.Charlie, until);

            routerAsInvoiceSubmitterSubscription.Subscribe(charlieSubmitterTestActor.ActorAs <IInvoiceSubmitter>());

            var random     = new Random();
            var countByERP = new int[erpsToTest.Length];

            Array.Fill(countByERP, 0);

            for (var i = 0; i < messagesToSend; ++i)
            {
                var erpIndex = random.Next(3);
                var erp      = erpsToTest[erpIndex];
                var invoice  = Invoice.With(erp, i, RandomMoney(random));
                routerAsInvoiceSubmitter.SubmitInvoice(invoice);
                countByERP[erpIndex] += 1;
            }

            until.Completes();

            var alphaSubmitter = (ERPSpecificInvoiceSubmitter)alphaSubmitterTestActor.ActorInside;

            Assert.Equal(countByERP[0], alphaSubmitter.submitted.Count);
            foreach (var invoice in alphaSubmitter.submitted)
            {
                Assert.Equal(ERPSystemCode.Alpha, invoice.erp);
            }

            var betaSubmitter = (ERPSpecificInvoiceSubmitter)betaSubmitterTestActor.ActorInside;

            Assert.Equal(countByERP[1], betaSubmitter.submitted.Count);
            foreach (var invoice in betaSubmitter.submitted)
            {
                Assert.Equal(ERPSystemCode.Beta, invoice.erp);
            }

            var charlieSubmitter = (ERPSpecificInvoiceSubmitter)charlieSubmitterTestActor.ActorInside;

            Assert.Equal(countByERP[2], charlieSubmitter.submitted.Count);
            foreach (var invoice in charlieSubmitter.submitted)
            {
                Assert.Equal(ERPSystemCode.Charlie, invoice.erp);
            }
        }
예제 #2
0
 public void SetUp()
 {
     _world         = new TestWorld();
     _entityManager = _world.GetEntityManager();
 }
예제 #3
0
 public TestMailbox()
 {
     world = TestWorld.Instance !;
     queue = new ConcurrentQueue <IMessage>();
     suspendedOverrides = new AtomicReference <Stack <List <Type> > >(new Stack <List <Type> >());
 }
예제 #4
0
 public TestMailbox()
 {
     world = TestWorld.Instance;
 }