public async Task Consume_EventDoesNotExistSomehow_IgnoresEvent()
        {
            SetupAnEntireClub();
            var e = CreateEvent();

            var @event = new TimeslotReservedEvent()
            {
                EventId = Guid.NewGuid(),
            };

            await SendEvent(@event);

            await _publishEndpoint.Received(0).Publish(
                Arg.Any <EventCreatedEvent>());
        }
        public async Task Consume(ConsumeContext <VerifyChangedTimeslotEvent> context)
        {
            var bookingsToRemove = _roomContext.Bookings.Where(b => b.EventId == context.Message.EventId);

            _roomContext.Bookings.RemoveRange(bookingsToRemove);
            foreach (var roomId in context.Message.RoomIds)
            {
                var room = await _roomContext.Rooms
                           .Include(room => room.Bookings)
                           .FirstOrDefaultAsync(room => room.RoomId == roomId);

                if (room == null)
                {
                    await FailureResponse(context, "Room does not exist");

                    return;
                }
                var booking = new Booking()
                {
                    EventId   = context.Message.EventId,
                    EndTime   = context.Message.EndTime,
                    StartTime = context.Message.StartTime
                };
                room.Bookings = room.Bookings.Where(b => b.EventId != context.Message.EventId).ToList();
                room.Bookings.Add(booking);
                _roomContext.Rooms.Update(room);
            }

            try
            {
                var @event = new TimeslotReservedEvent()
                {
                    EventId = context.Message.EventId,
                };
                await _eventService.SaveEventAndDbContextChangesAsync(@event);

                await _eventService.PublishEventAsync(@event);
            }
            catch
            {
                await FailureResponse(context, "Timeslot already reserved");
            }
        }
        public async Task Consume_EventDoesExist_ChangesStatus()
        {
            SetupAnEntireClub();
            var e = CreateEvent();

            var @event = new TimeslotReservedEvent()
            {
                EventId = e.EventId,
            };

            await SendEvent(@event);

            using (var context = _factory.CreateContext())
            {
                var dbEvent = context.Events.Find(e.EventId);
                Assert.That(dbEvent.Status, Is.EqualTo(EventStatus.Confirmed));
            }

            await _publishEndpoint.Received(1).Publish(
                Arg.Any <EventCreatedEvent>());
        }