예제 #1
0
        public void PassCorrectTripInfo_ToTripService()
        {
            // Arrange
            var mockedTripService     = new Mock <ITripService>();
            var mockedTagService      = new Mock <ITagService>();
            var mockedCarService      = new Mock <ICarService>();
            var mockedMappingProvider = new Mock <IMappingProvider>();

            var controller = new TripController(
                mockedTripService.Object,
                mockedTagService.Object,
                mockedCarService.Object,
                mockedMappingProvider.Object);

            string loggedUserId = "LoggedusrId";

            controller.GetLoggedUserId = () => loggedUserId;

            var viewModel = new CreateTripViewModel()
            {
                HourOfDeparture = "12:14"
            };

            var tripCreationInfo = new TripCreationInfo();

            mockedMappingProvider.Setup(x => x.Map <CreateTripViewModel, TripCreationInfo>(viewModel))
            .Returns(tripCreationInfo);

            // Act and Assert
            controller.WithCallTo(x => x.Create(viewModel))
            .ShouldRedirectTo(x => x.Create());

            mockedTripService.Verify(x => x.CreateTrip(tripCreationInfo), Times.Once);
        }
예제 #2
0
        public void NotCallCreateCityFromCityService_WhenOriginAndDestinationNamesExistInDB()
        {
            // Arrange
            var mockedTripRepo          = new Mock <IProjectableRepositoryEf <Trip> >();
            var mockedUserTripRepo      = new Mock <IProjectableRepositoryEf <UsersTrips> >();
            var mockedCityService       = new Mock <ICityService>();
            var mockedTagService        = new Mock <ITagService>();
            var mockedDateTimpeProvider = new Mock <IDateTimeProvider>();
            var mockedMappingProvider   = new Mock <IMappingProvider>();
            var mockedUnitOfWork        = new Mock <IUnitOfWorkEF>();

            var tripService = new TripService(
                () => mockedUnitOfWork.Object,
                mockedUserTripRepo.Object,
                mockedCityService.Object,
                mockedMappingProvider.Object,
                mockedTagService.Object,
                mockedTripRepo.Object,
                mockedDateTimpeProvider.Object);

            var tripCreatingInfo = new TripCreationInfo()
            {
                OriginName = "Sofia", DestinationName = "Pazardzhik"
            };

            City originCity = new City()
            {
                Name = tripCreatingInfo.OriginName
            };

            mockedCityService.Setup(x => x.GetCityByName(tripCreatingInfo.DestinationName))
            .Returns(originCity);

            City destinationCity = new City()
            {
                Name = tripCreatingInfo.DestinationName
            };

            mockedCityService.Setup(x => x.GetCityByName(tripCreatingInfo.OriginName))
            .Returns(destinationCity);

            mockedMappingProvider.Setup(x => x.Map <TripCreationInfo, Trip>(tripCreatingInfo)).Returns(new Trip());

            // Act
            tripService.CreateTrip(tripCreatingInfo);

            // Assert
            mockedCityService.Verify(x => x.CreateCity(tripCreatingInfo.DestinationName), Times.Never);
            mockedCityService.Verify(x => x.CreateCity(tripCreatingInfo.OriginName), Times.Never);
        }
예제 #3
0
        public void AtachOnlySelectedTagsToTheModel()
        {
            // Arrange
            var mockedTripService     = new Mock <ITripService>();
            var mockedTagService      = new Mock <ITagService>();
            var mockedCarService      = new Mock <ICarService>();
            var mockedMappingProvider = new Mock <IMappingProvider>();

            var controller = new TripController(
                mockedTripService.Object,
                mockedTagService.Object,
                mockedCarService.Object,
                mockedMappingProvider.Object);

            string loggedUserId = "LoggedusrId";

            controller.GetLoggedUserId = () => loggedUserId;

            var viewModel = new CreateTripViewModel()
            {
                HourOfDeparture = "12:14",
                Tags            = new List <TagViewModel>()
                {
                    new TagViewModel()
                    {
                        Id = 1, IsSelected = true
                    }, new TagViewModel()
                    {
                        Id = 2, IsSelected = false
                    },
                }
            };

            var tripCreationInfo = new TripCreationInfo();

            mockedMappingProvider.Setup(x => x.Map <CreateTripViewModel, TripCreationInfo>(viewModel))
            .Returns(tripCreationInfo);

            // Act and Assert
            controller.WithCallTo(x => x.Create(viewModel))
            .ShouldRedirectTo(x => x.Create());

            mockedTripService.Verify(x => x.CreateTrip(tripCreationInfo), Times.Once);
            Assert.AreEqual(1, tripCreationInfo.TagIds.Count());
        }
예제 #4
0
        public void CreateTrip(TripCreationInfo tripInfo)
        {
            var origin = this.cityService.GetCityByName(tripInfo.OriginName);

            if (origin == null)
            {
                origin = this.cityService.CreateCity(tripInfo.OriginName);
            }

            var destination = this.cityService.GetCityByName(tripInfo.DestinationName);

            if (destination == null)
            {
                destination = this.cityService.CreateCity(tripInfo.DestinationName);
            }

            var tags = this.tagService.GetTagsByIds(tripInfo.TagIds) as ICollection <Tag>;

            using (var uow = base.UnitOfWork())
            {
                var trip = this.mappingProvider.Map <TripCreationInfo, Trip>(tripInfo);

                trip.Tags        = tags;
                trip.Origin      = origin;
                trip.Destination = destination;
                trip.DateCreated = this.dateTimeProvider.Now;

                var userTrips = new UsersTrips()
                {
                    Trip             = trip,
                    UserId           = tripInfo.DriverId,
                    UserTripStatusId = (int)UserTripStatusType.Owner
                };

                trip.TripsUsers = new List <UsersTrips>()
                {
                    userTrips
                };

                this.tripRepo.Add(trip);

                uow.Commit();
            }
        }
예제 #5
0
        public void CallCreateNewCity_WhenOriginCityFromTheInputIsNotPresentInTheDb()
        {
            // Arrange
            var mockedTripRepo          = new Mock <IProjectableRepositoryEf <Trip> >();
            var mockedUserTripRepo      = new Mock <IProjectableRepositoryEf <UsersTrips> >();
            var mockedCityService       = new Mock <ICityService>();
            var mockedTagService        = new Mock <ITagService>();
            var mockedDateTimpeProvider = new Mock <IDateTimeProvider>();
            var mockedMappingProvider   = new Mock <IMappingProvider>();
            var mockedUnitOfWork        = new Mock <IUnitOfWorkEF>();

            var tripService = new TripService(
                () => mockedUnitOfWork.Object,
                mockedUserTripRepo.Object,
                mockedCityService.Object,
                mockedMappingProvider.Object,
                mockedTagService.Object,
                mockedTripRepo.Object,
                mockedDateTimpeProvider.Object);

            var tripCreatingInfo = new TripCreationInfo()
            {
                OriginName = "Sofia", DestinationName = "Pazardzhik"
            };

            City city = null;

            mockedCityService.Setup(x => x.GetCityByName(tripCreatingInfo.OriginName))
            .Returns(city);

            mockedMappingProvider.Setup(x => x.Map <TripCreationInfo, Trip>(tripCreatingInfo)).Returns(new Trip());

            // Act
            tripService.CreateTrip(tripCreatingInfo);

            // Assert
            mockedCityService.Verify(x => x.CreateCity(tripCreatingInfo.OriginName), Times.Once);
        }
예제 #6
0
        public void CreateTripWithAllPropertiesFromMethodParameter()
        {
            // Arrange
            var mockedTripRepo          = new Mock <IProjectableRepositoryEf <Trip> >();
            var mockedUserTripRepo      = new Mock <IProjectableRepositoryEf <UsersTrips> >();
            var mockedCityService       = new Mock <ICityService>();
            var mockedTagService        = new Mock <ITagService>();
            var mockedDateTimpeProvider = new Mock <IDateTimeProvider>();
            var mockedMappingProvider   = new Mock <IMappingProvider>();
            var mockedUnitOfWork        = new Mock <IUnitOfWorkEF>();

            var tripService = new TripService(
                () => mockedUnitOfWork.Object,
                mockedUserTripRepo.Object,
                mockedCityService.Object,
                mockedMappingProvider.Object,
                mockedTagService.Object,
                mockedTripRepo.Object,
                mockedDateTimpeProvider.Object);

            var tripCreatingInfo = new TripCreationInfo()
            {
                OriginName      = "Sofia",
                DestinationName = "Pazardzhik",
                TagIds          = new List <int>(),
                Description     = "test",
                Price           = 4,
                CarId           = 1,
                TotalSeats      = 2,
                TimeOfDeparture = DateTime.Now,
                DriverId        = "1"
            };

            City originCity = new City()
            {
                Name = tripCreatingInfo.OriginName
            };

            mockedCityService.Setup(x => x.GetCityByName(tripCreatingInfo.DestinationName))
            .Returns(originCity);

            City destinationCity = new City()
            {
                Name = tripCreatingInfo.DestinationName
            };

            mockedCityService.Setup(x => x.GetCityByName(tripCreatingInfo.OriginName))
            .Returns(destinationCity);

            var foundTags = new List <Tag>();

            mockedTagService.Setup(x => x.GetTagsByIds(tripCreatingInfo.TagIds)).Returns(foundTags);

            var dateCreated = DateTime.Now;

            mockedDateTimpeProvider.Setup(x => x.Now).Returns(dateCreated);

            var trip = new Trip()
            {
                Tags            = foundTags,
                Origin          = originCity,
                Destination     = destinationCity,
                CarId           = tripCreatingInfo.CarId,
                Price           = tripCreatingInfo.Price,
                TotalSeats      = tripCreatingInfo.TotalSeats,
                TimeOfDeparture = tripCreatingInfo.TimeOfDeparture,
                TakenSeats      = 0,
                Description     = tripCreatingInfo.Description,
                IsDeleted       = false,
                IsReported      = false,
                IsFinished      = false,
                DateCreated     = DateTime.UtcNow,
            };

            mockedMappingProvider.Setup(x => x.Map <TripCreationInfo, Trip>(tripCreatingInfo))
            .Returns(trip);

            // Act
            tripService.CreateTrip(tripCreatingInfo);
            var createdTripUserTrips = trip.TripsUsers.FirstOrDefault(x => x.Trip == trip);

            // Assert
            Assert.AreEqual(createdTripUserTrips.UserTripStatusId, (int)UserTripStatusType.Owner);
            Assert.AreEqual(createdTripUserTrips.UserId, tripCreatingInfo.DriverId);
            Assert.AreEqual(createdTripUserTrips.Trip, trip);
            Assert.AreEqual(tripCreatingInfo.CarId, trip.CarId);
            Assert.AreEqual(tripCreatingInfo.Price, trip.Price);
            Assert.AreEqual(0, trip.TakenSeats);
            Assert.AreEqual(tripCreatingInfo.TotalSeats, trip.TotalSeats);
            Assert.AreEqual(tripCreatingInfo.TimeOfDeparture, trip.TimeOfDeparture);
            Assert.AreEqual(dateCreated, trip.DateCreated);
            Assert.IsFalse(trip.IsDeleted);
            Assert.IsFalse(trip.IsFinished);
            Assert.IsFalse(trip.IsReported);

            mockedTripRepo.Verify(x => x.Add(trip), Times.Once);
            mockedUnitOfWork.Verify(x => x.Commit(), Times.Once);
        }
예제 #7
0
        public void CreateTripWithoutTags_WhenThereAreNotagsProvider()
        {
            // Arrange
            var mockedTripRepo          = new Mock <IProjectableRepositoryEf <Trip> >();
            var mockedUserTripRepo      = new Mock <IProjectableRepositoryEf <UsersTrips> >();
            var mockedCityService       = new Mock <ICityService>();
            var mockedTagService        = new Mock <ITagService>();
            var mockedDateTimpeProvider = new Mock <IDateTimeProvider>();
            var mockedMappingProvider   = new Mock <IMappingProvider>();
            var mockedUnitOfWork        = new Mock <IUnitOfWorkEF>();

            var tripService = new TripService(
                () => mockedUnitOfWork.Object,
                mockedUserTripRepo.Object,
                mockedCityService.Object,
                mockedMappingProvider.Object,
                mockedTagService.Object,
                mockedTripRepo.Object,
                mockedDateTimpeProvider.Object);

            var tripCreatingInfo = new TripCreationInfo()
            {
                OriginName      = "Sofia",
                DestinationName = "Pazardzhik",
                TagIds          = new List <int>()
            };

            City originCity = new City()
            {
                Name = tripCreatingInfo.OriginName
            };

            mockedCityService.Setup(x => x.GetCityByName(tripCreatingInfo.DestinationName))
            .Returns(originCity);

            City destinationCity = new City()
            {
                Name = tripCreatingInfo.DestinationName
            };

            mockedCityService.Setup(x => x.GetCityByName(tripCreatingInfo.OriginName))
            .Returns(destinationCity);

            var foundTags = new List <Tag>();

            mockedTagService.Setup(x => x.GetTagsByIds(tripCreatingInfo.TagIds)).Returns(foundTags);

            var trip = new Trip()
            {
                Tags = foundTags
            };

            mockedMappingProvider.Setup(x => x.Map <TripCreationInfo, Trip>(tripCreatingInfo))
            .Returns(trip);

            // Act
            tripService.CreateTrip(tripCreatingInfo);

            // Assert
            mockedTripRepo.Verify(x => x.Add(trip), Times.Once);
            mockedUnitOfWork.Verify(x => x.Commit(), Times.Once);
        }