protected async Task CheckResponseAndLogStatusCodeAsync <T>(IApolloLogger <T> logger, HttpResponseMessage response, HttpStatusCode expected = HttpStatusCode.OK) { if (response.StatusCode != expected) { logger.Error($"{response.StatusCode}: {await response.Content.ReadAsStringAsync()}"); } response.StatusCode.Should().Be(expected); logger.Info($"StatusCode: {response.StatusCode}"); }
public async Task Test_Workflow_CinemaHalls_Valid() { Logger.Info("Load cinema halls ..."); var response = await Get(BaseUrl, EndpointCinemaHalls); await CheckResponseAndLogStatusCodeAsync(Logger, response); var cinemaHalls = JsonConvert.DeserializeObject <IEnumerable <CinemaHallDto> >( await response.Content.ReadAsStringAsync() ).ToList(); cinemaHalls.Should().HaveCount(DataSeeder.CinemaHalls.Count); Logger.Info(cinemaHalls.ToPrettyString()); var newHall = new CinemaHallDto { Label = "New Hall", SizeColumn = 10, SizeRow = 5 }; var updateHallReservations = cinemaHalls.First(c => DataSeeder.Reservations .Select(r => DataSeeder.Schedules.First(s => r.ScheduleId == s.Id).CinemaHallId) .Contains(c.Id)); var updateHall = cinemaHalls.First(c => !DataSeeder.Reservations .Select(r => DataSeeder.Schedules.First(s => r.ScheduleId == s.Id).CinemaHallId) .Contains(c.Id)); updateHall.Label = "Renovated Hall"; var deleteReferencedHall = DataSeeder.CinemaHalls .First(c => DataSeeder.Rows.Select(r => r.CinemaHallId).Contains(c.Id)).Id; var deletedHall = DataSeeder.CinemaHalls .Last(c => !DataSeeder.Rows.Select(r => r.CinemaHallId).Contains(c.Id)) .Id; await Authenticate(AdminUser, AdminPassword); Logger.Info($"Add new cinema hall: ${newHall.ToPrettyString()} ..."); response = await Post(BaseUrl, EndpointCinemaHall, newHall); await CheckResponseAndLogStatusCodeAsync(Logger, response, HttpStatusCode.Created); var newId = await GetCreatedIdAsync(response); Logger.Info($"Try update cinema hall with reservations: {updateHallReservations.ToPrettyString()} ..."); response = await Put(BaseUrl, EndpointCinemaHall, updateHallReservations); await CheckResponseAndLogStatusCodeAsync(Logger, response, HttpStatusCode.BadRequest); Logger.Info($"Update cinema hall: ${updateHall.ToPrettyString()} ..."); response = await Put(BaseUrl, EndpointCinemaHall, updateHall); await CheckResponseAndLogStatusCodeAsync(Logger, response, HttpStatusCode.NoContent); Logger.Info($"Try delete referenced cinema hall: {deleteReferencedHall.ToPrettyString()} ..."); response = await Delete(BaseUrl, $"{EndpointCinemaHall}/{deleteReferencedHall}"); await CheckResponseAndLogStatusCodeAsync(Logger, response, HttpStatusCode.BadRequest); Logger.Info($"Delete cinema hall: ${deletedHall.ToPrettyString()} ..."); response = await Delete(BaseUrl, $"{EndpointCinemaHall}/{deletedHall}"); await CheckResponseAndLogStatusCodeAsync(Logger, response, HttpStatusCode.NoContent); Logger.Info("Load cinema halls ..."); response = await Get(BaseUrl, EndpointCinemaHalls); await CheckResponseAndLogStatusCodeAsync(Logger, response); cinemaHalls = JsonConvert.DeserializeObject <IEnumerable <CinemaHallDto> >( await response.Content.ReadAsStringAsync() ).ToList(); var cinemaHall = cinemaHalls.Select(g => g.Id).ToList(); cinemaHall.Should().Contain(newId); cinemaHall.Should().Contain(updateHallReservations.Id); cinemaHall.Should().Contain(updateHall.Id); cinemaHall.Should().Contain(deleteReferencedHall); cinemaHall.Should().NotContain(deletedHall); cinemaHalls.First(g => g.Id == newId).Label.Should().Be(newHall.Label); cinemaHalls.First(g => g.Id == updateHall.Id).Label.Should().Be(updateHall.Label); Logger.Info(cinemaHalls.ToPrettyString()); }
public async Task Test_Workflow_RowCategory_Valid() { Logger.Info("Load row categories ..."); var response = await Get(BaseUrl, EndpointCategories); await CheckResponseAndLogStatusCodeAsync(Logger, response); var categories = JsonConvert.DeserializeObject <IEnumerable <RowCategoryDto> >( await response.Content.ReadAsStringAsync() ).ToList(); categories.Should().HaveCount(DataSeeder.RowCategories.Count); Logger.Info(categories.ToPrettyString()); var newCategory = new RowCategoryDto { Name = "New Category", PriceFactor = 1.85 }; var updateCategoryReferences = categories.First(c => DataSeeder.Rows.Select(r => r.CategoryId).Contains(c.Id)); updateCategoryReferences.PriceFactor = 2.0; var updateCategory = categories.First(c => !DataSeeder.Rows.Select(r => r.CategoryId).Contains(c.Id)); updateCategory.Name = "Updated category"; var deleteCategoryReferences = categories .Last(c => DataSeeder.Rows.Select(r => r.CategoryId).Contains(c.Id)) .Id; var deletedCategory = categories .Last(c => !DataSeeder.Rows.Select(r => r.CategoryId).Contains(c.Id)) .Id; await Authenticate(AdminUser, AdminPassword); Logger.Info($"Add new row category: {newCategory.ToPrettyString()} ..."); response = await Post(BaseUrl, EndpointCategory, newCategory); await CheckResponseAndLogStatusCodeAsync(Logger, response, HttpStatusCode.Created); var newId = await GetCreatedIdAsync(response); Logger.Info( $"Update row category with referenced seats: {updateCategoryReferences.ToPrettyString()} ..."); response = await Put(BaseUrl, EndpointCategory, updateCategoryReferences); await CheckResponseAndLogStatusCodeAsync(Logger, response, HttpStatusCode.NoContent); Logger.Info($"Update row category: ${updateCategory.ToPrettyString()} ..."); response = await Put(BaseUrl, EndpointCategory, updateCategory); await CheckResponseAndLogStatusCodeAsync(Logger, response, HttpStatusCode.NoContent); Logger.Info( $"Try delete row category with referenced seats: {deleteCategoryReferences} ..."); response = await Delete(BaseUrl, $"{EndpointCategory}/{deleteCategoryReferences}"); await CheckResponseAndLogStatusCodeAsync(Logger, response, HttpStatusCode.BadRequest); Logger.Info($"Delete cinema hall: {deletedCategory} ..."); response = await Delete(BaseUrl, $"{EndpointCategory}/{deletedCategory}"); await CheckResponseAndLogStatusCodeAsync(Logger, response, HttpStatusCode.NoContent); Logger.Info("Load row categories ..."); response = await Get(BaseUrl, EndpointCategories); await CheckResponseAndLogStatusCodeAsync(Logger, response); categories = JsonConvert.DeserializeObject <IEnumerable <RowCategoryDto> >( await response.Content.ReadAsStringAsync() ).ToList(); var rowCategoryIds = categories.Select(g => g.Id).ToList(); rowCategoryIds.Should().Contain(newId); rowCategoryIds.Should().Contain(updateCategoryReferences.Id); rowCategoryIds.Should().Contain(updateCategory.Id); rowCategoryIds.Should().Contain(deleteCategoryReferences); rowCategoryIds.Should().NotContain(deletedCategory); categories.First(g => g.Id == newId).Name.Should().Be(newCategory.Name); categories.First(g => g.Id == updateCategory.Id).Name.Should().Be(updateCategory.Name); categories.First(g => g.Id == updateCategoryReferences.Id).PriceFactor.Should() .Be(updateCategoryReferences.PriceFactor); Logger.Info(categories.ToPrettyString()); }
public async Task Test_Workflow_Genres_Valid() { Logger.Info($"Load genres ..."); var response = await GetQuery(BaseUrl, EndpointGenres); await CheckResponseAndLogStatusCodeAsync(Logger, response); var genres = JsonConvert.DeserializeObject <IEnumerable <GenreDto> >( await response.Content.ReadAsStringAsync() ).ToList(); genres.Should().HaveCount(DataSeeder.Genres.Count); Logger.Info(genres.ToPrettyString()); var newGenre = new GenreDto { Name = "New genre" }; var updatedGenre = genres.First(); updatedGenre.Name = "Updated genre"; var deleteReferencedGenre = DataSeeder.Genres.First(g => DataSeeder.Movies.Select(m => m.GenreId).Contains(g.Id)).Id; var deletedGenre = DataSeeder.Genres .First(g => !DataSeeder.Movies.Select(m => m.GenreId).Contains(g.Id)) .Id; await Authenticate(AdminUser, AdminPassword); Logger.Info($"Add new genre: ${newGenre} ..."); response = await Post(BaseUrl, EndpointGenre, newGenre); await CheckResponseAndLogStatusCodeAsync(Logger, response, HttpStatusCode.Created); var newId = await GetCreatedIdAsync(response); Logger.Info($"Update genre: ${updatedGenre} ..."); response = await Put(BaseUrl, EndpointGenre, updatedGenre); await CheckResponseAndLogStatusCodeAsync(Logger, response, HttpStatusCode.NoContent); Logger.Info($"Try delete referenced genre: ${deleteReferencedGenre} ..."); response = await Delete(BaseUrl, $"{EndpointGenre}/{deleteReferencedGenre}"); await CheckResponseAndLogStatusCodeAsync(Logger, response, HttpStatusCode.BadRequest); Logger.Info($"Delete genre: ${deletedGenre} ..."); response = await Delete(BaseUrl, $"{EndpointGenre}/{deletedGenre}"); await CheckResponseAndLogStatusCodeAsync(Logger, response, HttpStatusCode.NoContent); Logger.Info("Load genres ..."); response = await GetQuery(BaseUrl, EndpointGenres); await CheckResponseAndLogStatusCodeAsync(Logger, response); genres = JsonConvert.DeserializeObject <IEnumerable <GenreDto> >( await response.Content.ReadAsStringAsync() ).ToList(); genres.Select(g => g.Id).Should().Contain(newId); genres.Select(g => g.Id).Should().Contain(updatedGenre.Id); genres.Select(g => g.Id).Should().Contain(deleteReferencedGenre); genres.Select(g => g.Id).Should().NotContain(deletedGenre); genres.First(g => g.Id == newId).Name.Should().Be(newGenre.Name); genres.First(g => g.Id == updatedGenre.Id).Name.Should().Be(updatedGenre.Name); Logger.Info(genres.ToPrettyString()); }
public async Task GetSchedulesByDay_ShouldReturnFilteredSchedules() { Logger.Info("Load schedules by day ..."); var day = DataSeeder.Schedules.First().StartTime; var endpointParams = new List <KeyValuePair <string, string> > { new KeyValuePair <string, string>(null, $"{day:u}") }; var response = await Get(BaseUrl, EndpointDay, endpointParams); await CheckResponseAndLogStatusCodeAsync(Logger, response); var schedules = JsonConvert.DeserializeObject <IEnumerable <ScheduleDto> >(await response.Content.ReadAsStringAsync()).ToList(); schedules.Should().HaveCount(DataSeeder.Schedules.Count(s => s.StartTime.IsSameDay(day))); schedules.All(s => s.StartTime.IsSameDay(day)).Should().BeTrue(); Logger.Info(schedules.ToPrettyString()); }
public async Task Test_Workflow_SeatLayout_Valid() { var cinemaHall = DataSeeder.CinemaHalls.Last(); var cinemaHallId = cinemaHall.Id; var rows = DataSeeder.Rows.Where(r => r.CinemaHallId == cinemaHallId).ToList(); var seats = DataSeeder.Seats.Where(s => rows.Select(r => r.Id).Contains(s.RowId)); Logger.Info($"Load seat layout for cinema hall: {cinemaHall.ToPrettyString()} ..."); var response = await Get(BaseUrl, $"{EndpointSeatLayout}/{cinemaHallId}"); await CheckResponseAndLogStatusCodeAsync(Logger, response); var seatLayout = JsonConvert.DeserializeObject <IEnumerable <SeatDto> >( await response.Content.ReadAsStringAsync() ).ToList(); seatLayout.Should().HaveCount(seats.Count()); Logger.Info(seatLayout.ToPrettyString()); IList <SeatDto> updatedLayout = new List <SeatDto> { new SeatDto { Number = 120, RowId = rows.First().Id, LayoutColumn = cinemaHall.SizeColumn / 2, LayoutRow = cinemaHall.SizeRow - 1 }, new SeatDto { Number = 121, RowId = rows.Last().Id, LayoutColumn = cinemaHall.SizeColumn / 2 + 1, LayoutRow = cinemaHall.SizeRow - 2 } }; var factor = seatLayout.Count / 3; for (int i = factor; i < seatLayout.Count; i++) { if (i < 2 * factor) { seatLayout[i].Number = 1000 + i; } updatedLayout.Add(seatLayout[i]); } await Authenticate(AdminUser, AdminPassword); Logger.Info($"Update seat layout: ${updatedLayout.ToPrettyString()} ..."); response = await Put(BaseUrl, $"{EndpointSeatLayout}/{cinemaHallId}", updatedLayout); await CheckResponseAndLogStatusCodeAsync(Logger, response, HttpStatusCode.NoContent); Logger.Info($"Load seat layout for cinema hall: {cinemaHall.ToPrettyString()} ..."); response = await Get(BaseUrl, $"{EndpointSeatLayout}/{cinemaHallId}"); await CheckResponseAndLogStatusCodeAsync(Logger, response); seatLayout = JsonConvert.DeserializeObject <IEnumerable <SeatDto> >( await response.Content.ReadAsStringAsync() ).ToList(); seatLayout.Should().HaveCount(updatedLayout.Count); var orderedResult = seatLayout.OrderBy(s => s.RowId).ThenBy(s => s.Number).ToList(); var orderedLayout = updatedLayout.OrderBy(s => s.RowId).ThenBy(s => s.Number).ToList(); for (int i = 0; i < orderedResult.Count; i++) { orderedResult[i].Number.Should().Be(orderedLayout[i].Number); orderedResult[i].LayoutColumn.Should().Be(orderedLayout[i].LayoutColumn); orderedResult[i].LayoutRow.Should().Be(orderedLayout[i].LayoutRow); orderedResult[i].RowId.Should().Be(orderedLayout[i].RowId); } Logger.Info(seatLayout.ToPrettyString()); }
private static async Task Import(IUnitOfWork unitOfWork) { var watch = Stopwatch.StartNew(); await ImportMovies(unitOfWork); await ImportInfrastructure(unitOfWork); await ImportSchedules(unitOfWork); await ImportUser(unitOfWork); Logger.Info($"Import successfully finished after {watch.Elapsed.ToHumanReadable()}"); }