public void SetNewLocation_GivenVisitorHasNoHistory_ExpectRandomRequested()
        {
            Visitor             visitor  = new Visitor();
            VisitorRideStrategy strategy =
                new VisitorRideStrategy(eventProducerMock.Object, rideClientMock.Object);

            strategy.SetNewLocation(visitor);

            rideClientMock.Verify(client => client.GetRandomRide(), Times.Once);
            rideClientMock.Verify(client => client.GetNextLocation(It.IsAny <Guid>(),
                                                                   It.IsAny <List <Guid> >()), Times.Never);
        }
        public void SetNewLocation_GivenVisitorHasFairyTaleAsLatestLocation_ExpectRandomRequested()
        {
            Visitor visitor  = new Visitor();
            RideDto location = new RideDto();

            location.LocationType = LocationType.FAIRYTALE;
            visitor.VisitedLocations.Add(DateTime.Now, location);
            VisitorRideStrategy strategy =
                new VisitorRideStrategy(eventProducerMock.Object, rideClientMock.Object);

            strategy.SetNewLocation(visitor);

            rideClientMock.Verify(client => client.GetRandomRide(), Times.Once);
            rideClientMock.Verify(client => client.GetNextLocation(It.IsAny <Guid>(),
                                                                   It.IsAny <List <Guid> >()), Times.Never);
        }
        public void StartLocationActivity_GivenCorrectData_ExpectCorrectCalls()
        {
            Visitor visitor = new Visitor();
            RideDto rideDto = new RideDto();

            visitor.TargetLocation = rideDto;
            VisitorRideStrategy strategy =
                new VisitorRideStrategy(eventProducerMock.Object, rideClientMock.Object);

            strategy.StartLocationActivity(visitor);
            var eventPayload = new Dictionary <string, string>
            {
                { "Visitor", visitor.Guid.ToString() },
                { "Ride", rideDto.Guid.ToString() }
            };

            Event producedEvent = new Event(EventType.StepInRideLine, EventSource.Visitor, eventPayload);

            eventProducerMock.Verify(producer => producer.Produce(It.Is <Event>(a => a.Equals(producedEvent))), Times.Once);
        }