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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
public bool IsUserParticipant(RideServiceModel rideServiceModel, string userName) => userName != null && rideServiceModel.Participants.Any(p => p.User.UserName == userName);
public bool IsUserOrganiser(RideServiceModel rideServiceModel, string userName) { return(userName != null && rideServiceModel.Car.Owner.UserName == userName); }
public bool CanUserAccessRide(RideServiceModel rideServiceModel, string userName) => rideServiceModel.Date > DateTime.UtcNow || userName != null && rideServiceModel.Participants.Any(p => p.User.UserName == userName);
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;