コード例 #1
0
        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}");
        }
コード例 #2
0
        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());
        }
コード例 #3
0
ファイル: ManageRowsTest.cs プロジェクト: EnvyIT/apollo
        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());
        }
コード例 #4
0
        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());
        }
コード例 #5
0
        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());
        }
コード例 #6
0
ファイル: ManageSeatsTest.cs プロジェクト: EnvyIT/apollo
        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());
        }
コード例 #7
0
ファイル: Program.cs プロジェクト: EnvyIT/apollo
        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()}");
        }