public async Task DeleteVenue_Post_DeletesVenueAndRedirects()
        {
            // Arrange
            var provider = await TestData.CreateProvider(
                providerType : ProviderType.FE);

            await User.AsTestUser(TestUserType.ProviderUser, provider.ProviderId);

            var venue = await TestData.CreateVenue(provider.ProviderId);

            var requestContent = new FormUrlEncodedContentBuilder()
                                 .Add(nameof(Command.Confirm), true)
                                 .Add(nameof(Command.ProviderId), provider.ProviderId)
                                 .ToContent();

            var request = new HttpRequestMessage(HttpMethod.Post, $"/venues/{venue.Id}/delete")
            {
                Content = requestContent
            };

            // Act
            var response = await HttpClient.SendAsync(request);

            // Assert
            response.StatusCode.Should().Be(StatusCodes.Status302Found);
            response.Headers.Location.OriginalString.Should().Be($"/venues/{venue.Id}/delete-success?providerId={provider.ProviderId}");

            CosmosDbQueryDispatcher.VerifyExecuteQuery <Core.DataStore.CosmosDb.Queries.DeleteVenue, OneOf <NotFound, Success> >(q => q.VenueId == venue.Id, Times.Once());
        }
        public async Task Post_ValidSetsCorrectStatusAndRequestRendersExpectedOutput(
            bool passed,
            ApprenticeshipQAStatus expectedStatus,
            bool expectApprenticeshipToBeMadeLive)
        {
            // Arrange
            var provider = await TestData.CreateProvider(
                providerName : "Provider 1",
                apprenticeshipQAStatus : ApprenticeshipQAStatus.InProgress);

            var providerUser = await TestData.CreateUser(providerId : provider.ProviderId);

            var standard = await TestData.CreateStandard(standardCode : 1234, version : 1, standardName : "Test Standard");

            var apprenticeshipId = (await TestData.CreateApprenticeship(provider.ProviderId, standard, createdBy: User.ToUserInfo())).Id;

            var submissionId = await TestData.CreateApprenticeshipQASubmission(
                provider.ProviderId,
                submittedOn : Clock.UtcNow,
                submittedByUserId : providerUser.UserId,
                providerMarketingInformation : "The overview",
                apprenticeshipIds : new[] { apprenticeshipId });

            await TestData.UpdateApprenticeshipQASubmission(
                submissionId,
                providerAssessmentPassed : passed,
                apprenticeshipAssessmentsPassed : passed,
                passed : passed,
                lastAssessedByUserId : User.UserId,
                lastAssessedOn : Clock.UtcNow);

            await User.AsHelpdesk();

            var requestContent = new FormUrlEncodedContentBuilder().ToContent();

            // Act
            var response = await HttpClient.PostAsync($"apprenticeship-qa/{provider.ProviderId}/complete", requestContent);

            // Assert
            Assert.Equal(HttpStatusCode.OK, response.StatusCode);

            var doc = await response.GetDocument();

            var providerName = doc.GetElementById("pttcd-apprenticeship-qa-complete-provider-name").TextContent.Trim();

            Assert.Equal("Provider 1", providerName);

            var newStatus = await WithSqlQueryDispatcher(dispatcher => dispatcher.ExecuteQuery(new GetProviderApprenticeshipQAStatus()
            {
                ProviderId = provider.ProviderId
            }));

            Assert.Equal(expectedStatus, newStatus);

            CosmosDbQueryDispatcher.VerifyExecuteQuery <UpdateApprenticeshipStatus, OneOf <NotFound, Success> >(
                q => q.ApprenticeshipId == apprenticeshipId && q.ProviderUkprn == provider.Ukprn && q.Status == 1,
                expectApprenticeshipToBeMadeLive ? Times.Once() : Times.Never());
        }
        public async Task Post_ValidRequest_UpdatesDatabaseAndRedirects()
        {
            // Arrange
            var provider = await TestData.CreateProvider();

            var venueId = (await TestData.CreateVenue(provider.ProviderId)).Id;

            var journeyInstance = await CreateJourneyInstance(venueId);

            journeyInstance.UpdateState(state =>
            {
                state.Name         = "Updated name";
                state.Email        = "*****@*****.**";
                state.PhoneNumber  = "02345 678901";
                state.Website      = "updated-provider.com";
                state.AddressLine1 = "Updated line 1";
                state.AddressLine2 = "Updated line 2";
                state.Town         = "Updated town";
                state.County       = "Updated county";
                state.Postcode     = "UP1 D8D";
                state.Latitude     = 42;
                state.Longitude    = 42;
            });

            var requestContent = new FormUrlEncodedContentBuilder()
                                 .ToContent();

            var request = new HttpRequestMessage(HttpMethod.Post, $"venues/{venueId}")
            {
                Content = requestContent
            };

            // Act
            var response = await HttpClient.SendAsync(request);

            // Assert
            response.StatusCode.Should().Be(HttpStatusCode.Found);
            response.Headers.Location.OriginalString.Should().Be($"/venues?providerId={provider.ProviderId}");

            CosmosDbQueryDispatcher.VerifyExecuteQuery <UpdateVenue, OneOf <NotFound, Venue> >(q =>
                                                                                               q.VenueId == venueId &&
                                                                                               q.Name == "Updated name" &&
                                                                                               q.Email == "*****@*****.**" &&
                                                                                               q.PhoneNumber == "02345 678901" &&
                                                                                               q.Website == "updated-provider.com" &&
                                                                                               q.AddressLine1 == "Updated line 1" &&
                                                                                               q.AddressLine2 == "Updated line 2" &&
                                                                                               q.Town == "Updated town" &&
                                                                                               q.County == "Updated county" &&
                                                                                               q.Postcode == "UP1 D8D" &&
                                                                                               q.Latitude == 42 &&
                                                                                               q.Longitude == 42 &&
                                                                                               q.UpdatedBy.UserId == User.UserId &&
                                                                                               q.UpdatedDate == Clock.UtcNow);
        }
示例#4
0
        public async Task Post_ValidRequest_DeletesCourseRunAndRedirects()
        {
            // Arrange
            var providerId = await TestData.CreateProvider(ukprn : 12345);

            var courseId = await TestData.CreateCourse(
                providerId,
                qualificationCourseTitle : "Maths",
                createdBy : User.ToUserInfo());

            var courseRunId = await GetCourseRunIdForCourse(courseId);

            var requestContent = new FormUrlEncodedContentBuilder()
                                 .Add("Confirm", "true")
                                 .ToContent();

            var request = new HttpRequestMessage(
                HttpMethod.Post,
                $"/courses/{courseId}/course-runs/{courseRunId}/delete?returnUrl=%2fcourses")
            {
                Content = requestContent
            };

            await User.AsProviderUser(providerId, ProviderType.FE);

            CreateFormFlowInstance(courseId, courseRunId);

            // Act
            var response = await HttpClient.SendAsync(request);

            // Assert
            Assert.Equal(HttpStatusCode.Found, response.StatusCode);

            Assert.Equal(
                $"/courses/{courseId}/course-runs/{courseRunId}/delete/confirmed",
                response.Headers.Location.OriginalString);

            CosmosDbQueryDispatcher.VerifyExecuteQuery <DeleteCourseRunQuery, OneOf <NotFound, Success> >(q =>
                                                                                                          q.CourseId == courseId && q.CourseRunId == courseRunId && q.ProviderUkprn == 12345);
        }
        public async Task Post_ValidRequest_UpdatesProviderTypeAndRedirects(ProviderType providerType)
        {
            // Arrange
            var providerId = await TestData.CreateProvider(providerType : ProviderType.Undefined);

            var content = new FormUrlEncodedContentBuilder()
                          .Add("ProviderType", (int)providerType)
                          .ToContent();

            var request = new HttpRequestMessage(HttpMethod.Post, $"providers/provider-type?providerId={providerId}")
            {
                Content = content
            };

            // Act
            var response = await HttpClient.SendAsync(request);

            // Assert
            response.StatusCode.Should().Be(HttpStatusCode.Found);
            response.Headers.Location.OriginalString.Should().Be($"/providers?providerId={providerId}");

            CosmosDbQueryDispatcher.VerifyExecuteQuery <UpdateProviderType, OneOf <NotFound, Success> >(q =>
                                                                                                        q.ProviderId == providerId && q.ProviderType == providerType);
        }
        public async Task Post_ValidRequest_CreatesVenueCompletesJourneyAndRedirects()
        {
            // Arrange
            var provider = await TestData.CreateProvider();

            var addressLine1 = "Test Venue line 1";
            var addressLine2 = "Test Venue line 2";
            var town         = "Town";
            var county       = "County";
            var postcode     = "AB1 2DE";
            var name         = "My Venue";
            var email        = "*****@*****.**";
            var telephone    = "020 7946 0000";
            var website      = "example.com";
            var latitude     = 42M;
            var longitude    = 43M;

            var journeyInstance = CreateJourneyInstance(
                provider.ProviderId,
                new AddVenueJourneyModel()
            {
                AddressLine1 = addressLine1,
                AddressLine2 = addressLine2,
                County       = county,
                Email        = email,
                Latitude     = latitude,
                Longitude    = longitude,
                Name         = name,
                AddressIsOutsideOfEngland = false,
                Telephone   = telephone,
                Postcode    = postcode,
                Town        = town,
                Website     = website,
                ValidStages = AddVenueCompletedStages.All
            });

            var request = new HttpRequestMessage(
                HttpMethod.Post,
                $"/venues/add/publish?providerId={provider.ProviderId}&ffiid={journeyInstance.InstanceId.UniqueKey}");

            // Act
            var response = await HttpClient.SendAsync(request);

            // Assert
            response.StatusCode.Should().Be(HttpStatusCode.Found);

            response.Headers.Location.OriginalString.Should().Be(
                $"/venues/add/success?providerId={provider.ProviderId}&ffiid={journeyInstance.InstanceId.UniqueKey}");

            GetJourneyInstance <AddVenueJourneyModel>(journeyInstance.InstanceId).Completed.Should().BeTrue();

            CosmosDbQueryDispatcher.VerifyExecuteQuery <CreateVenue, Success>(q =>
                                                                              q.ProviderUkprn == provider.Ukprn &&
                                                                              q.Name == name &&
                                                                              q.Email == email &&
                                                                              q.Telephone == telephone &&
                                                                              q.Website == website &&
                                                                              q.AddressLine1 == addressLine1 &&
                                                                              q.AddressLine2 == addressLine2 &&
                                                                              q.Town == town &&
                                                                              q.County == county &&
                                                                              q.Postcode == postcode &&
                                                                              q.Latitude == latitude &&
                                                                              q.Longitude == longitude &&
                                                                              q.CreatedBy.UserId == User.UserId &&
                                                                              q.CreatedDate == Clock.UtcNow);
        }