public void should_effect_correct_setup_systems_once()
        {
            var dummyGroup             = new Group(typeof(TestComponentOne), typeof(TestComponentTwo));
            var mockPoolManager        = Substitute.For <IPoolManager>();
            var pool                   = mockPoolManager.GetPool();
            var mockEventSystem        = Substitute.For <IEventSystem>();
            var mockSetupSystemHandler = Substitute.For <ISetupSystemHandler>();
            var fakeSystem             = Substitute.For <ISetupSystem>();

            fakeSystem.TargetGroup.Returns(dummyGroup);

            var systemExecutor = new SystemExecutor(mockPoolManager, mockEventSystem,
                                                    null, null, mockSetupSystemHandler, null, null);

            systemExecutor.AddSystem(fakeSystem);

            var entity = new Entity(Guid.NewGuid(), pool, mockEventSystem);

            entity.AddComponent(new TestComponentOne());
            systemExecutor.OnEntityComponentAdded(new ComponentAddedEvent(entity, new TestComponentOne()));

            entity.AddComponent(new TestComponentTwo());
            systemExecutor.OnEntityComponentAdded(new ComponentAddedEvent(entity, new TestComponentTwo()));

            entity.AddComponent(new TestComponentThree());
            systemExecutor.OnEntityComponentAdded(new ComponentAddedEvent(entity, new TestComponentThree()));

            mockSetupSystemHandler.Received(1).ProcessEntity(Arg.Is(fakeSystem), Arg.Is(entity));
        }