Beispiel #1
0
        public async Task CreateAsync_WithValidModel_WorksCorrectly()
        {
            // Arrange
            var context = new PoolItDbContext(new DbContextOptionsBuilder <PoolItDbContext>()
                                              .UseInMemoryDatabase(Guid.NewGuid().ToString())
                                              .Options);

            var user = new PoolItUser
            {
                UserName = "******"
            };

            var car = new Car
            {
                Model = new CarModel
                {
                    Model        = "Test Model",
                    Manufacturer = new CarManufacturer()
                },
                Owner  = user,
                Colour = "TestColour"
            };

            await context.Cars.AddAsync(car);

            await context.SaveChangesAsync();

            var serviceModel = new RideServiceModel
            {
                Title          = "Test Ride",
                CarId          = car.Id,
                From           = "Test From",
                To             = "Test To",
                Date           = DateTime.UtcNow,
                AvailableSeats = 2
            };

            var ridesService = new RidesService(new EfRepository <Ride>(context), null, new EfRepository <Car>(context), null);

            // Act
            var result = await ridesService.CreateAsync(serviceModel);

            // Assert
            Assert.NotNull(result);

            var dbModel = await context.Rides.SingleOrDefaultAsync();

            Assert.NotNull(dbModel);

            // - Check correct id is returned
            Assert.Equal(dbModel.Id, result);

            // - Check Conversation is created
            Assert.NotNull(dbModel.Conversation);

            // - Check organiser is added as participant
            var userRideExists = await context.UserRides.AnyAsync(u => u.UserId == user.Id && u.RideId == dbModel.Id);

            Assert.True(userRideExists);
        }
Beispiel #2
0
        public void IsUserParticipant_WithUserNotParticipant_ReturnsFalse()
        {
            // Arrange
            const string testUser = "******";

            var ride = new RideServiceModel
            {
                Participants = new[]
                {
                    new UserRideServiceModel
                    {
                        User = new PoolItUserServiceModel
                        {
                            UserName = "******"
                        }
                    }
                }
            };

            var ridesService = new RidesService(null, null, null, null);

            // Act
            var result = ridesService.IsUserParticipant(ride, testUser);

            // Assert
            Assert.False(result);
        }
Beispiel #3
0
        public async Task <string> CreateAsync(RideServiceModel model)
        {
            if (!this.IsEntityStateValid(model))
            {
                return(null);
            }

            var car = await this.carsRepository.All()
                      .SingleOrDefaultAsync(c => c.Id == model.CarId);

            if (car == null)
            {
                return(null);
            }

            var ride = Mapper.Map <Ride>(model);

            ride.Conversation = new Conversation();

            ride.Participants = new List <UserRide>
            {
                new UserRide
                {
                    UserId = car.OwnerId
                }
            };

            await this.ridesRepository.AddAsync(ride);

            await this.ridesRepository.SaveChangesAsync();

            return(ride.Id);
        }
Beispiel #4
0
        public void CanUserAccessRide_WithUserNotParticipant_ReturnsFalse()
        {
            // Arrange
            const string testUser = "******";

            var ride = new RideServiceModel
            {
                Date         = DateTime.UtcNow.AddDays(-1),
                Participants = new[]
                {
                    new UserRideServiceModel
                    {
                        User = new PoolItUserServiceModel
                        {
                            UserName = "******"
                        }
                    }
                }
            };

            var ridesService = new RidesService(null, null, null, null);

            // Act
            var result = ridesService.CanUserAccessRide(ride, testUser);

            // Assert
            Assert.False(result);
        }
Beispiel #5
0
        public async Task CreateAsync_WithNonExistentCar_ReturnsNull()
        {
            // Arrange
            var testCarId = Guid.NewGuid().ToString();

            var context = new PoolItDbContext(new DbContextOptionsBuilder <PoolItDbContext>()
                                              .UseInMemoryDatabase(Guid.NewGuid().ToString())
                                              .Options);

            var serviceModel = new RideServiceModel
            {
                Title          = "Test Ride",
                CarId          = testCarId,
                From           = "Test From",
                To             = "Test To",
                Date           = DateTime.UtcNow,
                AvailableSeats = 2
            };

            var ridesService = new RidesService(new EfRepository <Ride>(context), null, new EfRepository <Car>(context), null);

            // Act
            var result = await ridesService.CreateAsync(serviceModel);

            // Assert
            Assert.Null(result);

            var dbModel = await context.Rides.AnyAsync();

            Assert.False(dbModel);
        }
Beispiel #6
0
        public async Task UpdateAsync_WithOtherDataChanged_DoesNotUpdate()
        {
            // Arrange
            var context = new PoolItDbContext(new DbContextOptionsBuilder <PoolItDbContext>()
                                              .UseInMemoryDatabase(Guid.NewGuid().ToString())
                                              .Options);

            var ride = new Ride
            {
                Title          = "Initial Title",
                PhoneNumber    = "0000000000",
                Notes          = "Initial Notes",
                Car            = new Car(),
                Date           = DateTime.UtcNow,
                AvailableSeats = 2,
                From           = "Test From",
                To             = "Test To"
            };

            await context.Rides.AddAsync(ride);

            var car = new Car();

            await context.Cars.AddAsync(car);

            await context.SaveChangesAsync();

            var ridesService = new RidesService(new EfRepository <Ride>(context), null, null, null);

            var serviceModel = new RideServiceModel()
            {
                Id             = ride.Id,
                Title          = ride.Title,
                PhoneNumber    = ride.PhoneNumber,
                Notes          = ride.Notes,
                CarId          = car.Id,
                AvailableSeats = 1,
                From           = "Updated From",
                To             = "Updated To"
            };

            var initialDate  = ride.Date;
            var initialSeats = ride.AvailableSeats;
            var initialFrom  = ride.From;
            var initialTo    = ride.To;

            // Act
            await ridesService.UpdateAsync(serviceModel);

            // Assert
            var dbModel = await context.Rides.SingleAsync();

            Assert.Equal(initialDate, dbModel.Date);
            Assert.Equal(initialSeats, dbModel.AvailableSeats);
            Assert.Equal(initialFrom, dbModel.From);
            Assert.Equal(initialTo, dbModel.To);
        }
        public void CanUserSendJoinRequest_WithUserAlreadyParticipating_ReturnsFalse()
        {
            // Arrange
            const string testUser = "******";

            var ride = new RideServiceModel
            {
                Date         = DateTime.UtcNow.AddDays(1),
                Participants = new[]
                {
                    new UserRideServiceModel
                    {
                        User = new PoolItUserServiceModel
                        {
                            UserName = "******"
                        }
                    },
                    new UserRideServiceModel
                    {
                        User = new PoolItUserServiceModel
                        {
                            UserName = "******"
                        }
                    },
                    new UserRideServiceModel
                    {
                        User = new PoolItUserServiceModel
                        {
                            UserName = testUser
                        }
                    }
                },
                AvailableSeats = 2,
                JoinRequests   = new[]
                {
                    new JoinRequestServiceModel
                    {
                        User = new PoolItUserServiceModel
                        {
                            UserName = "******"
                        }
                    }
                }
            };

            var joinRequestsService = new JoinRequestsService(null, null, null, null);

            // Act
            var result = joinRequestsService.CanUserSendJoinRequest(ride, testUser);

            // Assert
            Assert.False(result);
        }
Beispiel #8
0
        public async Task UpdateAsync_WithValidModel_WorksCorrectly()
        {
            // Arrange
            var context = new PoolItDbContext(new DbContextOptionsBuilder <PoolItDbContext>()
                                              .UseInMemoryDatabase(Guid.NewGuid().ToString())
                                              .Options);

            var ride = new Ride
            {
                Title          = "Initial Title",
                PhoneNumber    = "0000000000",
                Notes          = "Initial Notes",
                Car            = new Car(),
                Date           = DateTime.UtcNow,
                AvailableSeats = 1,
                From           = "Test From",
                To             = "Test To"
            };

            await context.Rides.AddAsync(ride);

            await context.SaveChangesAsync();

            var ridesService = new RidesService(new EfRepository <Ride>(context), null, null, null);

            var serviceModel = new RideServiceModel()
            {
                Id             = ride.Id,
                Title          = "Updated Title",
                PhoneNumber    = "0000000001",
                Notes          = "Updated Notes",
                CarId          = ride.CarId,
                AvailableSeats = ride.AvailableSeats,
                From           = ride.From,
                To             = ride.To
            };

            // Act
            var result = await ridesService.UpdateAsync(serviceModel);

            // Assert
            Assert.True(result);

            var dbModel = await context.Rides.SingleAsync();

            Assert.Equal(serviceModel.Title, dbModel.Title);
            Assert.Equal(serviceModel.PhoneNumber, dbModel.PhoneNumber);
            Assert.Equal(serviceModel.Notes, dbModel.Notes);
        }
Beispiel #9
0
        public void CanUserAccessRide_WithNullUser_ReturnsFalse()
        {
            // Arrange
            var ride = new RideServiceModel
            {
                Date = DateTime.UtcNow.AddDays(-1)
            };

            var ridesService = new RidesService(null, null, null, null);

            // Act
            var result = ridesService.CanUserAccessRide(ride, null);

            // Assert
            Assert.False(result);
        }
Beispiel #10
0
        public void CanUserAccessRide_WithUpcomingRide_ReturnsTrue()
        {
            // Arrange
            var ride = new RideServiceModel
            {
                Date = DateTime.UtcNow.AddDays(1)
            };

            var ridesService = new RidesService(null, null, null, null);

            // Act
            var result = ridesService.CanUserAccessRide(ride, null);

            // Assert
            Assert.True(result);
        }
Beispiel #11
0
        public async Task UpdateAsync_WithNonExistentId_ReturnsFalse()
        {
            // Arrange
            var testRideId = Guid.NewGuid().ToString();

            var context = new PoolItDbContext(new DbContextOptionsBuilder <PoolItDbContext>()
                                              .UseInMemoryDatabase(Guid.NewGuid().ToString())
                                              .Options);

            var ride = new Ride
            {
                Title          = "Initial Title",
                PhoneNumber    = "0000000000",
                Notes          = "Initial Notes",
                Car            = new Car(),
                Date           = DateTime.UtcNow,
                AvailableSeats = 1,
                From           = "Test From",
                To             = "Test To"
            };

            await context.Rides.AddAsync(ride);

            await context.SaveChangesAsync();

            var ridesService = new RidesService(new EfRepository <Ride>(context), null, null, null);

            var serviceModel = new RideServiceModel()
            {
                Id             = testRideId,
                Title          = "Updated Title",
                PhoneNumber    = "0000000001",
                Notes          = "Updated Notes",
                CarId          = ride.CarId,
                AvailableSeats = ride.AvailableSeats,
                From           = ride.From,
                To             = ride.To
            };

            // Act
            var result = await ridesService.UpdateAsync(serviceModel);

            // Assert
            Assert.False(result);
        }
Beispiel #12
0
        public async Task CreateAsync_WithInvalidModel_ReturnsNull()
        {
            // Arrange
            var context = new PoolItDbContext(new DbContextOptionsBuilder <PoolItDbContext>()
                                              .UseInMemoryDatabase(Guid.NewGuid().ToString())
                                              .Options);

            var car = new Car
            {
                Model = new CarModel
                {
                    Model        = "Test Model",
                    Manufacturer = new CarManufacturer()
                },
                Owner = new PoolItUser
                {
                    UserName = "******"
                },
                Colour = "TestColour"
            };

            await context.Cars.AddAsync(car);

            await context.SaveChangesAsync();

            var serviceModel = new RideServiceModel
            {
                Title = "Test Ride",
                CarId = car.Id
            };

            var ridesService = new RidesService(new EfRepository <Ride>(context), null, new EfRepository <Car>(context), null);

            // Act
            var result = await ridesService.CreateAsync(serviceModel);

            // Assert
            Assert.Null(result);

            var dbModel = await context.Rides.AnyAsync();

            Assert.False(dbModel);
        }
Beispiel #13
0
        public void IsUserOrganiser_WithNullUser_ReturnsFalse()
        {
            // Arrange
            var ride = new RideServiceModel
            {
                Car = new CarServiceModel
                {
                    Owner = new PoolItUserServiceModel
                    {
                        UserName = "******"
                    }
                }
            };

            var ridesService = new RidesService(null, null, null, null);

            // Act
            var result = ridesService.IsUserOrganiser(ride, null);

            // Assert
            Assert.False(result);
        }
Beispiel #14
0
        public async Task <bool> UpdateAsync(RideServiceModel model)
        {
            if (!this.IsEntityStateValid(model) || model.Id == null)
            {
                return(false);
            }

            var ride = await this.ridesRepository.All().SingleOrDefaultAsync(c => c.Id == model.Id);

            if (ride == null)
            {
                return(false);
            }

            ride.Title       = model.Title;
            ride.PhoneNumber = model.PhoneNumber;
            ride.Notes       = model.Notes;

            this.ridesRepository.Update(ride);
            await this.ridesRepository.SaveChangesAsync();

            return(true);
        }
Beispiel #15
0
        public void IsUserOrganiser_WithUserOrganiser_ReturnsTrue()
        {
            // Arrange
            const string testUser = "******";

            var ride = new RideServiceModel
            {
                Car = new CarServiceModel
                {
                    Owner = new PoolItUserServiceModel
                    {
                        UserName = testUser
                    }
                }
            };

            var ridesService = new RidesService(null, null, null, null);

            // Act
            var result = ridesService.IsUserOrganiser(ride, testUser);

            // Assert
            Assert.True(result);
        }
Beispiel #16
0
 public bool IsUserParticipant(RideServiceModel rideServiceModel, string userName)
 => userName != null &&
 rideServiceModel.Participants.Any(p => p.User.UserName == userName);
Beispiel #17
0
 public bool IsUserOrganiser(RideServiceModel rideServiceModel, string userName)
 {
     return(userName != null && rideServiceModel.Car.Owner.UserName == userName);
 }
Beispiel #18
0
 public bool CanUserAccessRide(RideServiceModel rideServiceModel, string userName)
 => rideServiceModel.Date > DateTime.UtcNow ||
 userName != null &&
 rideServiceModel.Participants.Any(p => p.User.UserName == userName);
Beispiel #19
0
 public bool CanUserSendJoinRequest(RideServiceModel rideServiceModel, string userName)
 => userName != null &&
 rideServiceModel.Date >= DateTime.UtcNow &&
 rideServiceModel.Participants.All(p => p.User.UserName != userName) &&
 rideServiceModel.JoinRequests.All(r => r.User.UserName != userName) &&
 rideServiceModel.Participants.Count < rideServiceModel.AvailableSeats + 1;