public void unassign_all_loction_when_formation_is_deleted()
        {
            // given
            var trainingId = Guid.NewGuid();

            var locationId1 = Guid.NewGuid();
            var locationId2 = Guid.NewGuid();

            var sessionId1 = Guid.NewGuid();
            var sessionId2 = Guid.NewGuid();
            var sessionId3 = Guid.NewGuid();
            var sessionId4 = Guid.NewGuid();
            var sessionId5 = Guid.NewGuid();
            var sessionId6 = Guid.NewGuid();

            //var formateurId = Guid.NewGuid();

            var dispatcher  = new EventDispatcher();
            var mockHandler = new MockHandler <LocationUnassigned, SessionDeleted, TrainingDeleted>();

            dispatcher.Register(mockHandler);

            var eventStore = new FakeEventStore();

            eventStore.Save(new LocationCreated(locationId1, 1, "Paris", "test", 5));
            eventStore.Save(new LocationCreated(locationId2, 1, "Lyon", "test", 3));
            eventStore.Save(new SessionPlanned(sessionId1, 1, trainingId, new DateTime(2017, 10, 21), 2, 2, locationId1, null));
            eventStore.Save(new SessionPlanned(sessionId2, 2, trainingId, new DateTime(2017, 11, 21), 2, 2, locationId1, null));
            eventStore.Save(new SessionPlanned(sessionId3, 3, trainingId, new DateTime(2017, 12, 21), 2, 2, locationId1, null));
            eventStore.Save(new SessionPlanned(sessionId4, 1, trainingId, new DateTime(2017, 10, 21), 2, 2, locationId2, null));
            eventStore.Save(new SessionPlanned(sessionId5, 2, trainingId, new DateTime(2017, 11, 21), 2, 2, locationId2, null));
            eventStore.Save(new SessionPlanned(sessionId6, 3, trainingId, new DateTime(2017, 12, 21), 2, 2, locationId2, null));
            eventStore.Save(new LocationAssigned(locationId1, 1, new DateTime(2017, 10, 21), 2));
            eventStore.Save(new LocationAssigned(locationId1, 2, new DateTime(2017, 11, 21), 2));
            eventStore.Save(new LocationAssigned(locationId1, 3, new DateTime(2017, 12, 21), 2));
            eventStore.Save(new LocationAssigned(locationId2, 4, new DateTime(2017, 10, 21), 2));
            eventStore.Save(new LocationAssigned(locationId2, 5, new DateTime(2017, 11, 21), 2));
            eventStore.Save(new LocationAssigned(locationId2, 6, new DateTime(2017, 12, 21), 2));
            eventStore.Save(new TrainingCreated(trainingId, 1, "Formation de test", 1, Color.Empty.ToArgb()));
            var eventBus = new EventBus(dispatcher, eventStore);

            var sessionQueries = new FakeSessionQueries();

            sessionQueries.AddSession(trainingId, sessionId1, new DateTime(2017, 10, 21), 2, locationId1, null);
            sessionQueries.AddSession(trainingId, sessionId2, new DateTime(2017, 11, 21), 2, locationId1, null);
            sessionQueries.AddSession(trainingId, sessionId3, new DateTime(2017, 12, 21), 2, locationId1, null);
            sessionQueries.AddSession(trainingId, sessionId4, new DateTime(2017, 10, 21), 2, locationId2, null);
            sessionQueries.AddSession(trainingId, sessionId5, new DateTime(2017, 11, 21), 2, locationId2, null);
            sessionQueries.AddSession(trainingId, sessionId6, new DateTime(2017, 12, 21), 2, locationId2, null);

            // when
            new DeleteTraining(eventBus, sessionQueries).Execute(trainingId);

            // then
            mockHandler.AllEvents.OfType <SessionDeleted>().Should().HaveCount(6);
            mockHandler.AllEvents.OfType <LocationUnassigned>().Should().HaveCount(6);
            mockHandler.AllEvents.OfType <TrainingDeleted>().Should().HaveCount(1);
        }
        public void unassign_all_trainer_when_training_is_deleted()
        {
            // given
            var trainingId = Guid.NewGuid();

            var trainerId1 = Guid.NewGuid();
            var trainerId2 = Guid.NewGuid();

            var sessionId1 = Guid.NewGuid();
            var sessionId2 = Guid.NewGuid();
            var sessionId3 = Guid.NewGuid();
            var sessionId4 = Guid.NewGuid();
            var sessionId5 = Guid.NewGuid();
            var sessionId6 = Guid.NewGuid();

            var locationId = Guid.NewGuid();

            var dispatcher  = new EventDispatcher();
            var mockHandler = new MockHandler <TrainerUnassigned, SessionDeleted, TrainingDeleted>();

            dispatcher.Register(mockHandler);

            var eventStore = new FakeEventStore();

            eventStore.Save(new TrainerCreated(trainerId1, 1, "BOUDOUX", "Aurelien", "*****@*****.**"));
            eventStore.Save(new TrainerCreated(trainerId2, 1, "Creutzfeldt", "Jacob", "*****@*****.**"));
            eventStore.Save(new SessionPlanned(sessionId1, 1, trainingId, new DateTime(2017, 10, 21), 2, 2, locationId, trainerId1));
            eventStore.Save(new SessionPlanned(sessionId2, 2, trainingId, new DateTime(2017, 11, 21), 2, 2, locationId, trainerId1));
            eventStore.Save(new SessionPlanned(sessionId3, 3, trainingId, new DateTime(2017, 12, 21), 2, 2, locationId, trainerId1));
            eventStore.Save(new SessionPlanned(sessionId4, 1, trainingId, new DateTime(2017, 10, 21), 2, 2, locationId, trainerId2));
            eventStore.Save(new SessionPlanned(sessionId5, 2, trainingId, new DateTime(2017, 11, 21), 2, 2, locationId, trainerId2));
            eventStore.Save(new SessionPlanned(sessionId6, 3, trainingId, new DateTime(2017, 12, 21), 2, 2, locationId, trainerId2));
            eventStore.Save(new TrainerAssigned(trainerId1, 1, new DateTime(2017, 10, 21), 2));
            eventStore.Save(new TrainerAssigned(trainerId1, 2, new DateTime(2017, 11, 21), 2));
            eventStore.Save(new TrainerAssigned(trainerId1, 3, new DateTime(2017, 12, 21), 2));
            eventStore.Save(new TrainerAssigned(trainerId2, 4, new DateTime(2017, 10, 21), 2));
            eventStore.Save(new TrainerAssigned(trainerId2, 5, new DateTime(2017, 11, 21), 2));
            eventStore.Save(new TrainerAssigned(trainerId2, 6, new DateTime(2017, 12, 21), 2));
            eventStore.Save(new TrainingCreated(trainingId, 1, "Formation de test", 1, Color.Empty.ToArgb()));
            var eventBus = new EventBus(dispatcher, eventStore);

            var sessionQueries = new FakeSessionQueries();

            sessionQueries.AddSession(trainingId, sessionId1, new DateTime(2017, 10, 21), 2, null, trainerId1);
            sessionQueries.AddSession(trainingId, sessionId2, new DateTime(2017, 11, 21), 2, null, trainerId1);
            sessionQueries.AddSession(trainingId, sessionId3, new DateTime(2017, 12, 21), 2, null, trainerId1);
            sessionQueries.AddSession(trainingId, sessionId4, new DateTime(2017, 10, 21), 2, null, trainerId2);
            sessionQueries.AddSession(trainingId, sessionId5, new DateTime(2017, 11, 21), 2, null, trainerId2);
            sessionQueries.AddSession(trainingId, sessionId6, new DateTime(2017, 12, 21), 2, null, trainerId2);

            // when
            new DeleteTraining(eventBus, sessionQueries).Execute(trainingId);

            // then
            mockHandler.AllEvents.OfType <SessionDeleted>().Should().HaveCount(6);
            mockHandler.AllEvents.OfType <TrainerUnassigned>().Should().HaveCount(6);
            mockHandler.AllEvents.OfType <TrainingDeleted>().Should().HaveCount(1);
        }