public async void UpdateCarInRaceAsync_given_car_updates_car() { var builder = new DbContextOptionsBuilder <SlotCarContext>().UseInMemoryDatabase("UpdateCarInRace"); SlotCarContext context = new SlotCarContext(builder.Options); context.Database.EnsureCreated(); using (var repository = new RaceRepository(context)) { var track = new Track { Name = "Monte Carlo", LengthInMeters = 1002, MaxCars = 20 }; var race = new Race { Id = 42, NumberOfLaps = 5, Track = track }; var car = new Car { Id = 42, Name = "Lynet McQueen", Driver = "McQueen" }; var carinrace = new CarInRace { Car = car, Race = race }; await context.Races.AddAsync(race); await context.Tracks.AddAsync(track); await context.Cars.AddAsync(car); await context.CarsInRace.AddAsync(carinrace); await context.SaveChangesAsync(); var dto = new RaceCarDTO { CarId = 42, RaceId = 42, StartPosition = 1 }; var result = await repository.UpdateCarInRaceAsync(dto); Assert.True(result.ok); } }
public void Add_Car_To_Race_That_Is_Full_Returns_False() { var connection = new SqliteConnection("DataSource=:memory:"); connection.Open(); var builder = new DbContextOptionsBuilder <SlotCarContext>() .UseSqlite(connection); _context = new SlotCarContext(builder.Options); _context.Database.EnsureCreated(); var track = new Track() { Id = 1, Name = "Huge Lane", LengthInMeters = 1000, MaxCars = 1 }; var race = new Race() { Id = 1, TrackId = 1, Track = track, NumberOfLaps = 2, }; var car = new Car() { Id = 1, Name = "BMW", Driver = "Hugh Hefner" }; var car2 = new Car() { Id = 2, Name = "Opel", Driver = "Barack Obama" }; var raceCar = new CarInRace() { CarId = car.Id, RaceId = race.Id, Car = car, Race = race }; _context.Cars.Add(car); _context.Cars.Add(car2); _context.Races.Add(race); _context.CarsInRace.Add(raceCar); _context.SaveChanges(); using (var repository = new RaceRepository(_context)) { var result = repository.AddCarToRace(2, 1); Assert.False(result.ok); Assert.Equal("Race is full", result.error); } connection.Close(); }
public TracksControllerTests() { var connection = new SqliteConnection("DataSource=:memory:"); connection.Open(); var builder = new DbContextOptionsBuilder <SlotCarContext>().UseSqlite(connection); context = new SlotCarContext(builder.Options); context.Database.EnsureCreated(); }
public async void RemoveCarFromRaceAsync_given_carid_and_racid_removes_car() { var connection = new SqliteConnection("DataSource=:memory:"); connection.Open(); var builder = new DbContextOptionsBuilder <SlotCarContext>().UseSqlite(connection); _context = new SlotCarContext(builder.Options); _context.Database.EnsureCreated(); var track = new Track() { Id = 1, Name = "Long Lane", LengthInMeters = 1000, MaxCars = 4 }; var race = new Race() { Id = 1, TrackId = 1, Track = track, NumberOfLaps = 2 }; var car = new Car() { Id = 1, Name = "BMW", Driver = "Hugh Hefner" }; await _context.Cars.AddAsync(car); await _context.Races.AddAsync(race); await _context.SaveChangesAsync(); using (var repository = new RaceRepository(_context)) { var result = await repository.RemoveCarFromRaceAsync(1, 1); Assert.True(result.ok); } connection.Close(); }
public async Task Read_returns_mapped_TrackDTO() { var connection = new SqliteConnection("DataSource=:memory:"); connection.Open(); var builder = new DbContextOptionsBuilder <SlotCarContext>() .UseSqlite(connection); var context = new SlotCarContext(builder.Options); context.Database.EnsureCreated(); var entity = new Track { Name = "name", LengthInMeters = 12.5, BestLapInTicks = TimeSpan.FromSeconds(6.3).Ticks, MaxCars = 4, Races = new[] { new Race { NumberOfLaps = 12 }, new Race { NumberOfLaps = 24 } } }; context.Tracks.Add(entity); await context.SaveChangesAsync(); var id = entity.Id; using (var repository = new TrackRepository(context)) { var tracks = await repository.Read().ToListAsync(); var track = tracks.First(); Assert.Equal(id, track.Id); Assert.Equal("name", track.Name); Assert.Equal(12.5, track.LengthInMeters); Assert.Equal(TimeSpan.FromSeconds(6.3), track.BestLap); Assert.Equal(4, track.MaxCars); Assert.Equal(2, track.NumberOfRaces); } }
public void Add_Car_To_Race_That_Is_Started_Returns_False() { var connection = new SqliteConnection("DataSource=:memory:"); connection.Open(); var builder = new DbContextOptionsBuilder <SlotCarContext>() .UseSqlite(connection); _context = new SlotCarContext(builder.Options); _context.Database.EnsureCreated(); var track = new Track() { Id = 1, Name = "Short Lane", LengthInMeters = 1000, MaxCars = 1 }; var race = new Race() { Id = 1, TrackId = 1, Track = track, NumberOfLaps = 2, ActualStart = new DateTime(2017, 9, 28) }; var car = new Car() { Id = 1, Name = "BMW", Driver = "Hugh Hefner" }; _context.Cars.Add(car); _context.Races.Add(race); _context.SaveChanges(); using (var repository = new RaceRepository(_context)) { var result = repository.AddCarToRace(1, 1); Assert.False(result.ok); Assert.Equal("Race started", result.error); } connection.Close(); }
public async void ReadAsync_given_raceid_returns_race() { var connection = new SqliteConnection("DataSource=:memory:"); connection.Open(); var builder = new DbContextOptionsBuilder <SlotCarContext>().UseSqlite(connection); _context = new SlotCarContext(builder.Options); _context.Database.EnsureCreated(); var track = new Track() { Id = 1, Name = "Huge Lane", LengthInMeters = 1000, MaxCars = 4 }; var race = new Race() { Id = 1, TrackId = 1, Track = track, NumberOfLaps = 2, ActualStart = new DateTime(2015, 09, 28), PlannedEnd = new DateTime(2017, 09, 28) }; await _context.Races.AddAsync(race); await _context.SaveChangesAsync(); using (var repository = new RaceRepository(_context)) { var dto = await repository.ReadAsync(1); Assert.Equal(1, dto.Id); Assert.Equal(1, dto.TrackId); Assert.Equal(2, dto.NumberOfLaps); Assert.Equal(null, dto.PlannedStart); Assert.Equal(new DateTime(2015, 09, 28), dto.ActualStart); Assert.Equal(new DateTime(2017, 09, 28), dto.PlannedEnd); Assert.Equal(null, dto.ActualEnd); } }
public void Add_Car_To_Race_Runs_Correct_Methods() { var connection = new SqliteConnection("DataSource=:memory:"); connection.Open(); var builder = new DbContextOptionsBuilder <SlotCarContext>() .UseSqlite(connection); _context = new SlotCarContext(builder.Options); _context.Database.EnsureCreated(); var track = new Track() { Id = 1, Name = "Long Lane", LengthInMeters = 1000, MaxCars = 4 }; var race = new Race() { Id = 1, TrackId = 1, Track = track, NumberOfLaps = 2 }; var car = new Car() { Id = 1, Name = "BMW", Driver = "Hugh Hefner" }; _context.Cars.Add(car); _context.Races.Add(race); _context.SaveChanges(); using (var repository = new RaceRepository(_context)) { var result = repository.AddCarToRace(1, 1); Assert.True(result.ok); Assert.Equal("YAY! " + car.Name + " " + race.Track.Name, result.error); } connection.Close(); }
public async Task Find_given_non_existing_id_returns_null() { using (var connection = new SqliteConnection("DataSource=:memory:")) { connection.Open(); var builder = new DbContextOptionsBuilder <SlotCarContext>() .UseSqlite(connection); var context = new SlotCarContext(builder.Options); await context.Database.EnsureCreatedAsync(); using (var repository = new TrackRepository(context)) { var track = await repository.Find(42); Assert.Null(track); } } }
public RaceRepository(SlotCarContext context) { this.context = context; }
public async void UpdateAsync_given_race_updates_race() { var connection = new SqliteConnection("DataSource=:memory:"); connection.Open(); var builder = new DbContextOptionsBuilder <SlotCarContext>().UseSqlite(connection); _context = new SlotCarContext(builder.Options); _context.Database.EnsureCreated(); var track = new Track() { Id = 1, Name = "Huge Lane", LengthInMeters = 1000, MaxCars = 4 }; var track2 = new Track() { Id = 2, Name = "Little Lane", LengthInMeters = 3000, MaxCars = 5 }; var race = new Race() { Id = 1, TrackId = 1, Track = track, NumberOfLaps = 2, ActualStart = new DateTime(2015, 09, 28), PlannedEnd = new DateTime(2017, 09, 28) }; await _context.Tracks.AddAsync(track); await _context.Tracks.AddAsync(track2); await _context.Races.AddAsync(race); await _context.SaveChangesAsync(); var newRace = new RaceCreateDTO() { Id = 1, TrackId = 2, NumberOfLaps = 5, PlannedStart = new DateTime(2015, 09, 28), PlannedEnd = new DateTime(2017, 09, 28), ActualEnd = new DateTime(2017, 09, 30) }; using (var repository = new RaceRepository(_context)) { await repository.UpdateAsync(newRace); var result = await _context.Races.FindAsync(1); Assert.Equal(2, result.TrackId); Assert.Equal(track2.Name, result.Track.Name); Assert.Equal(5, result.NumberOfLaps); Assert.Equal(new DateTime(2015, 09, 28), result.PlannedStart); Assert.Equal(new DateTime(2015, 09, 28), result.ActualStart); Assert.Equal(new DateTime(2017, 09, 28), result.PlannedEnd); Assert.Equal(new DateTime(2017, 09, 30), result.ActualEnd); } }
public async void ReadAsync_returns_mapped_races() { var connection = new SqliteConnection("DataSource=:memory:"); connection.Open(); var builder = new DbContextOptionsBuilder <SlotCarContext>().UseSqlite(connection); _context = new SlotCarContext(builder.Options); _context.Database.EnsureCreated(); var track = new Track() { Id = 1, Name = "Huge Lane", LengthInMeters = 1000, MaxCars = 4 }; var race = new Race() { Id = 1, TrackId = 1, Track = track, NumberOfLaps = 2, ActualStart = new DateTime(2015, 09, 28), PlannedEnd = new DateTime(2017, 09, 28) }; var car = new Car() { Id = 1, Name = "BMW", Driver = "Hugh Hefner" }; var car2 = new Car() { Id = 2, Name = "Opel", Driver = "Barack Obama" }; var raceCar = new CarInRace() { CarId = car.Id, RaceId = race.Id, Car = car, Race = race, EndPosition = 2 }; var raceCar2 = new CarInRace() { CarId = car2.Id, RaceId = race.Id, Car = car2, Race = race, EndPosition = 1 }; await _context.Cars.AddAsync(car); await _context.Cars.AddAsync(car2); await _context.Races.AddAsync(race); await _context.CarsInRace.AddAsync(raceCar); await _context.CarsInRace.AddAsync(raceCar2); await _context.SaveChangesAsync(); using (var repository = new RaceRepository(_context)) { var dtos = await repository.ReadAsync(); var result = dtos.FirstOrDefault(); var expected = new List <RaceListDTO>(); expected.Add(new RaceListDTO() { Id = 1, TrackName = "Huge Lane", NumberOfLaps = 2, Start = new DateTime(2015, 09, 28), End = new DateTime(2017, 09, 28), MaxCars = 4, NumberOfCars = 2, WinningCar = "Opel", WinningDriver = "Barack Obama" }); var expectedFinal = expected.FirstOrDefault(); Assert.Equal(expectedFinal.Id, result.Id); Assert.Equal(expectedFinal.TrackName, result.TrackName); Assert.Equal(expectedFinal.Start, result.Start); Assert.Equal(expectedFinal.End, result.End); Assert.Equal(expectedFinal.MaxCars, result.MaxCars); Assert.Equal(expectedFinal.NumberOfCars, result.NumberOfCars); Assert.Equal(expectedFinal.WinningCar, result.WinningCar); Assert.Equal(expectedFinal.WinningDriver, result.WinningDriver); } }
public void UpdateCarInRace_given_RaceCarDTO_updates_car() { var connection = new SqliteConnection("DataSource=:memory:"); connection.Open(); var builder = new DbContextOptionsBuilder <SlotCarContext>() .UseSqlite(connection); _context = new SlotCarContext(builder.Options); _context.Database.EnsureCreated(); var track = new Track() { Id = 10, Name = "Awesome Track", LengthInMeters = 2000, MaxCars = 12 }; var race = new Race() { Id = 5, TrackId = 10, Track = track, NumberOfLaps = 3 }; var car = new Car() { Id = 20, Name = "Awesome Car", Driver = "Awesome Driver" }; var car2 = new Car() { Id = 21, Name = "More Awesome Car", Driver = "Awesomest Driver" }; var carInRace = new CarInRace() { CarId = car.Id, RaceId = race.Id, Car = car, Race = race, }; _context.Tracks.Add(track); _context.Races.Add(race); _context.Cars.Add(car); _context.Cars.Add(car2); _context.CarsInRace.Add(carInRace); _context.SaveChanges(); car.Driver = "Awesomest Driver"; var newCarInRace = new RaceCarDTO() { CarId = car.Id, RaceId = race.Id, }; using (var repository = new RaceRepository(_context)) { var DBCarInRace = _context.CarsInRace.FirstOrDefault(); var DBCar = _context.Cars.Find(DBCarInRace.CarId); Assert.Equal(car.Name, DBCar.Name); Assert.Equal(car.Driver, DBCar.Driver); } }