public void Create(TicketVerificationDto ticketVerificationDto) { var ticketVerification = mapper.Map <TicketVerificationDto, TicketVerification>(ticketVerificationDto); unitOfWork.TicketVerifications.Create(ticketVerification); unitOfWork.Save(); }
public TicketVerificationServiceTests() { var mockTicketVerificationRepository = new Mock <IRepository <TicketVerification, Guid> >(); var mockTicketRepository = new Mock <IRepository <Ticket, Guid> >(); var mockTransportRepository = new Mock <IRepository <Transport, int> >(); var mockTicketService = new Mock <ITicketService>(); var mockStationRepository = new Mock <IRepository <Station, int> >(); var mockRouteStationsRepository = new Mock <IRepository <RouteStation, int> >(); var mockUnitOfWork = new Mock <IUnitOfWork>(); fakeAreas = new List <Area> { new Area { Id = 1, Name = "A" }, new Area { Id = 2, Name = "B" } }; fakeTickets = new List <Ticket> { new Ticket //Normal ticket { Id = Guid.Parse("196d28f2-c6f0-4d70-a872-7a29d5dc79d3"), TicketArea = new TicketArea[] { new TicketArea { AreaId = fakeAreas[0].Id } } }, new Ticket //Expired ticket { Id = Guid.Parse("396d28f2-c6f0-4d70-a872-7a29d5dc79d3"), ActivatedUTCDate = DateTime.Now.AddDays(-2), ExpirationUTCDate = DateTime.Now.AddDays(-1), TicketArea = new TicketArea[] { new TicketArea { AreaId = fakeAreas[1].Id } } } }; fakeStations = new List <Station> { new Station { Id = 1, Latitude = 40.0, Longitude = 40.0, Name = "Station40:40", AreaId = fakeAreas[0].Id, Area = fakeAreas[0] }, //Station in zone A new Station { Id = 2, Latitude = 44.0, Longitude = 36.0, Name = "Station44:36", AreaId = fakeAreas[1].Id, Area = fakeAreas[1] } //Station in zone B }; fakeRoutes = new List <Route>() { new Route { Id = 1, Number = "157A" }, }; fakeRouteStations = new List <RouteStation>() { new RouteStation { Route = fakeRoutes[0], Station = fakeStations[0] }, new RouteStation { Route = fakeRoutes[0], Station = fakeStations[1] }, }; fakeTransports = new List <Transport> { new Transport { Id = 1, CarriersId = 1, VehicleNumber = "TE1111ST", RouteId = fakeRoutes[0].Id, Route = fakeRoutes[0] }, //Normal transport new Transport { Id = 2, CarriersId = 2, VehicleNumber = "TE3333ST", RouteId = Int32.MaxValue } //With wrong route }; fakeTicketVerifications = new List <TicketVerification> { new TicketVerification { Id = Guid.Parse("696d28f2-c6f0-4d70-a872-7a29d5dc79d1"), VerificationUTCDate = new DateTime(2020, 06, 03, 13, 36, 05), TicketId = fakeTickets[0].Id, StationId = fakeStations[0].Id, TransportId = fakeTransports[0].Id }, new TicketVerification { Id = Guid.Parse("696d28f2-c6f0-4d70-a872-7a29d5dc79d3"), VerificationUTCDate = new DateTime(2020, 02, 01, 07, 22, 55), TicketId = fakeTickets[1].Id, StationId = fakeStations[1].Id, TransportId = fakeTransports[0].Id } }; ticketVerificationDto = new TicketVerificationDto { Id = Guid.Parse("696d28f2-c6f0-4d70-a872-7a29d5dc79d4"), TicketId = Guid.Parse("696d28f2-c6f0-4d70-a872-7a29d5dc79d7"), TransportId = 4, StationId = 6, IsVerified = false }; //mock TicketVerification mockTicketVerificationRepository.Setup(m => m.GetAll()).Returns(fakeTicketVerifications.AsQueryable); mockTicketVerificationRepository.Setup(m => m.Get(It.IsAny <Guid>())) .Returns <Guid>(id => fakeTicketVerifications.Single(t => t.Id == id)); mockTicketVerificationRepository.Setup(r => r.Create(It.IsAny <TicketVerification>())) .Callback <TicketVerification>(t => fakeTicketVerifications.Add(ticketVerification = t)); mockUnitOfWork.Setup(m => m.TicketVerifications).Returns(mockTicketVerificationRepository.Object); //mock Tickets mockTicketRepository.Setup(m => m.GetAll()).Returns(fakeTickets.AsQueryable); mockUnitOfWork.Setup(m => m.Tickets).Returns(mockTicketRepository.Object); //mock Transports mockTransportRepository.Setup(m => m.Get(It.IsAny <int>())) .Returns <int>(id => fakeTransports.FirstOrDefault(t => t.Id == id)); mockUnitOfWork.Setup(m => m.Transports).Returns(mockTransportRepository.Object); //mock Stations mockStationRepository.Setup(m => m.GetAll()).Returns(fakeStations.AsQueryable); mockUnitOfWork.Setup(m => m.Stations).Returns(mockStationRepository.Object); //mock RouteStation mockRouteStationsRepository.Setup(m => m.GetAll()).Returns(fakeRouteStations.AsQueryable); mockUnitOfWork.Setup(m => m.RouteStation).Returns(mockRouteStationsRepository.Object); mockTicketService.Setup(x => x.Activate(It.IsAny <Guid>())) .Callback <Guid>(id => { fakeTickets.Single(t => t.Id == id).ActivatedUTCDate = DateTime.Now; fakeTickets.Single(t => t.Id == id).ExpirationUTCDate = DateTime.Now.AddHours(1); }); ticketVerificationService = new TicketVerificationService(mockUnitOfWork.Object, mockTicketService.Object); }
public VerifyTicketResponceDto VerifyTicket(Guid ticketId, int transportId, float longitude, float latitude) { var ticket = unitOfWork .Tickets .GetAll() .Include(t => t.TicketArea) .FirstOrDefault(t => t.Id == ticketId); if (ticket == null) { return(new VerifyTicketResponceDto { IsValid = false, ErrorMessage = "Ticket was not found" }); } if (ticket.ActivatedUTCDate == null) { ticketService.Activate(ticket.Id); } var transport = unitOfWork.Transports.Get(transportId); if (transport == null) { return(new VerifyTicketResponceDto { IsValid = false, ErrorMessage = "Transport was not found" }); } var station = GetNearestStationOnRoute(transport.RouteId, latitude, longitude); if (station == null) { return(new VerifyTicketResponceDto { IsValid = false, ErrorMessage = "Station was not found" }); } VerifyTicketResponceDto result = new VerifyTicketResponceDto { IsValid = true }; //Check for expired ticket if (ticket.ExpirationUTCDate < DateTime.UtcNow) { result = new VerifyTicketResponceDto { IsValid = false, ErrorMessage = "Ticket expired" }; } //Compare ticket areas with train station else if (!ticket.TicketArea.Any(t => t.AreaId == station.Area.Id)) { result = new VerifyTicketResponceDto { IsValid = false, ErrorMessage = "Ticket does not contain the zone" }; } var ticketVerificationDto = new TicketVerificationDto { Id = Guid.NewGuid(), VerificationUTCDate = DateTime.UtcNow, TicketId = ticketId, TransportId = transport.Id, StationId = station.Id, IsVerified = result.IsValid }; Create(ticketVerificationDto); return(result); }