public async Task UnkownMessage_ExpectIgnored()
        {
            var stateManager = new Mock <IActorStateManager>();
            var messageQueue = new Mock <IEventPublisher>();
            FakeDispatchActor testDemoActor = await CreateActor(stateManager.Object, messageQueue.Object, Guid.NewGuid());

            await testDemoActor.Notify(new FakeDispatchUnknownMessage());
        }
        public async Task UnkownCommand_ExpectNotSupportedException()
        {
            var stateManager = new Mock <IActorStateManager>();
            var messageQueue = new Mock <IEventPublisher>();
            FakeDispatchActor testDemoActor = await CreateActor(stateManager.Object, messageQueue.Object, Guid.NewGuid());

            await Invoking(async() => await testDemoActor.Tell(new FakeDispatchUnknownCommand()))
            .Should()
            .ThrowAsync <InvalidOperationException>();
        }
        private async Task <FakeDispatchActor> CreateActor(IActorStateManager actorStateManager, IEventPublisher messageQueue, Guid id)
        {
            var actorTypeInformation = ActorTypeInformation.Get(typeof(FakeDispatchActor));

            FakeDispatchActor actorFactory(ActorService service, ActorId id) =>
            new FakeDispatchActor(service, id, messageQueue, actorStateManager);

            var actorService             = new ActorService(actorTypeInformation, actorFactory);
            FakeDispatchActor actor      = actorFactory(actorService, new ActorId(id.ToString()));
            MethodInfo        OnActivate = actor.GetType().GetMethod("OnActivateAsync", BindingFlags.NonPublic | BindingFlags.Instance);

            await(Task) OnActivate.Invoke(actor, Array.Empty <object>());
            return(actor);
        }
        public async Task CreateCommand_CheckValue()
        {
            var stateManager = new Mock <IActorStateManager>();
            var messageQueue = new Mock <IEventPublisher>();
            var state        = new FakeState {
                FakeGuid = Guid.NewGuid(), FakeString = "hello world", FakeInt = 2000
            };

            stateManager.Setup(manager => manager.SetStateAsync(_stateName, state, It.IsAny <CancellationToken>())).Verifiable();
            FakeDispatchActor testDemoActor = await CreateActor(stateManager.Object, messageQueue.Object, state.FakeGuid);

            await testDemoActor.Tell(new CreateFakeDispatch(state.FakeGuid, state.FakeInt, state.FakeString));

            stateManager.VerifyAll();
        }
        public async Task GetFakeInt_CheckValue()
        {
            var stateManager = new Mock <IActorStateManager>();
            var messageQueue = new Mock <IEventPublisher>();
            var state        = new FakeState {
                FakeGuid = Guid.NewGuid(), FakeString = "hello world", FakeInt = 2000
            };

            stateManager.Setup(manager => manager.GetStateAsync <FakeState>(_stateName, It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(state))
            .Verifiable();
            // stateManager.Setup(manager => manager.SetStateAsync("FakeBase", state, It.IsAny<CancellationToken>())).Verifiable();
            FakeDispatchActor testDemoActor = await CreateActor(stateManager.Object, messageQueue.Object, state.FakeGuid);

            int result = await testDemoActor.Ask(new GetFakeDispatchInt(state.FakeGuid));

            result.Should().Be(state.FakeInt);

            stateManager.VerifyAll();
        }
        public async Task CreateCommand_ExpectCreatedEvent()
        {
            var stateManager = new Mock <IActorStateManager>();
            var messageQueue = new Mock <IEventPublisher>();
            var id           = Guid.NewGuid();
            var state        = new FakeState {
                FakeGuid = Guid.NewGuid(), FakeString = "hello world", FakeInt = 2000
            };
            var events = new List <IEvent>(new[] { new FakeDispatchCreated(state.FakeGuid, state.FakeInt, state.FakeString) });

            messageQueue
            .Setup(messageQueue => messageQueue.Publish(events, It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(id))
            .Verifiable();
            FakeDispatchActor testDemoActor = await CreateActor(stateManager.Object, messageQueue.Object, state.FakeGuid);

            await testDemoActor.Tell(new CreateFakeDispatch(state.FakeGuid, state.FakeInt, state.FakeString));

            stateManager.VerifyAll();
        }