Exemplo n.º 1
0
        public async Task PostConfirmation_ValidRequestWithVenue_CreatesValidApprenticeship()
        {
            // Arrange
            var provider = await TestData.CreateProvider(apprenticeshipQAStatus : ApprenticeshipQAStatus.NotStarted);

            var standardCode    = 123;
            var standardVersion = 1;
            var standard        = await TestData.CreateStandard(standardCode, standardVersion, standardName : "My standard");

            var venueId = (await TestData.CreateVenue(provider.ProviderId, createdBy: User.ToUserInfo())).VenueId;

            await User.AsProviderUser(provider.ProviderId, ProviderType.Apprenticeships);

            var flowModel = new FlowModel();

            flowModel.SetProviderDetails("Provider 1 rocks");
            flowModel.SetApprenticeshipStandard(standard);
            flowModel.SetApprenticeshipDetails(
                marketingInformation: "My apprenticeship",
                website: "http://provider.com/apprenticeship",
                contactTelephone: "01234 5678902",
                contactEmail: "*****@*****.**",
                contactWebsite: "http://provider.com");
            flowModel.SetApprenticeshipLocationType(ApprenticeshipLocationType.ClassroomBased);
            flowModel.SetClassroomLocationForVenue(
                venueId,
                originalVenueId: null,
                radius: 5,
                deliveryModes: new[] { ApprenticeshipDeliveryMode.BlockRelease });
            var mptxInstance = CreateMptxInstance(flowModel);

            Guid apprenticeshipId = default;

            SqlQuerySpy.Callback <CreateApprenticeship, Success>(q => apprenticeshipId = q.ApprenticeshipId);

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

            // Act
            var response = await HttpClient.PostAsync(
                $"new-apprenticeship-provider/apprenticeship-confirmation?providerId={provider.ProviderId}&ffiid={mptxInstance.InstanceId}",
                requestContent);

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

            SqlQuerySpy.VerifyQuery <CreateApprenticeship, Success>(q =>
                                                                    q.ApprenticeshipLocations.Single().ApprenticeshipLocationType == ApprenticeshipLocationType.ClassroomBased &&
                                                                    q.ApprenticeshipLocations.Single().DeliveryModes.Single() == ApprenticeshipDeliveryMode.BlockRelease &&
                                                                    q.ApprenticeshipLocations.Single().Radius == 5 &&
                                                                    q.ApprenticeshipLocations.Single().VenueId == venueId);
        }
Exemplo n.º 2
0
        public async Task PostConfirmation_ValidRequestWithRegions_CreatesValidApprenticeship()
        {
            // Arrange
            var provider = await TestData.CreateProvider(apprenticeshipQAStatus : ApprenticeshipQAStatus.NotStarted);

            var standardCode    = 123;
            var standardVersion = 1;
            var standard        = await TestData.CreateStandard(standardCode, standardVersion, standardName : "My standard");

            await User.AsProviderUser(provider.ProviderId, ProviderType.Apprenticeships);

            var flowModel = new FlowModel();

            flowModel.SetProviderDetails("Provider 1 rocks");
            flowModel.SetApprenticeshipStandard(standard);
            flowModel.SetApprenticeshipDetails(
                marketingInformation: "My apprenticeship",
                website: "http://provider.com/apprenticeship",
                contactTelephone: "01234 5678902",
                contactEmail: "*****@*****.**",
                contactWebsite: "http://provider.com");
            flowModel.SetApprenticeshipLocationType(ApprenticeshipLocationType.EmployerBased);
            flowModel.SetApprenticeshipLocationRegionIds(new[]
            {
                "E06000001", // County Durham
                "E10000009"  // Dorset
            });
            var mptxInstance = CreateMptxInstance(flowModel);

            Guid apprenticeshipId = default;

            SqlQuerySpy.Callback <CreateApprenticeship, Success>(q => apprenticeshipId = q.ApprenticeshipId);

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

            // Act
            var response = await HttpClient.PostAsync(
                $"new-apprenticeship-provider/apprenticeship-confirmation?providerId={provider.ProviderId}&ffiid={mptxInstance.InstanceId}",
                requestContent);

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

            SqlQuerySpy.VerifyQuery <CreateApprenticeship, Success>(q =>
                                                                    q.ApprenticeshipLocations.Single().ApprenticeshipLocationType == ApprenticeshipLocationType.EmployerBased &&
                                                                    q.ApprenticeshipLocations.Single().DeliveryModes.Single() == ApprenticeshipDeliveryMode.EmployerAddress &&
                                                                    q.ApprenticeshipLocations.Single().National == false &&
                                                                    q.ApprenticeshipLocations.Single().VenueId == null &&
                                                                    q.ApprenticeshipLocations.Single().SubRegionIds.Contains("E06000001") &&
                                                                    q.ApprenticeshipLocations.Single().SubRegionIds.Contains("E10000009"));
        }
Exemplo n.º 3
0
        public async Task Post_MissingClassroomLocations_RendersErrorMessage()
        {
            // Arrange
            var provider = await TestData.CreateProvider(apprenticeshipQAStatus : ApprenticeshipQAStatus.NotStarted);

            var standardCode    = 123;
            var standardVersion = 1;
            var standard        = await TestData.CreateStandard(standardCode, standardVersion, standardName : "My standard");

            await User.AsProviderUser(provider.ProviderId, ProviderType.Apprenticeships);

            var flowModel = new FlowModel();

            flowModel.SetProviderDetails("Provider 1 rocks");
            flowModel.SetApprenticeshipStandard(standard);
            flowModel.SetApprenticeshipDetails(
                marketingInformation: "My apprenticeship",
                website: "http://provider.com/apprenticeship",
                contactTelephone: "01234 5678902",
                contactEmail: "*****@*****.**",
                contactWebsite: "http://provider.com");
            flowModel.SetApprenticeshipLocationType(ApprenticeshipLocationType.ClassroomBased);
            var mptxInstance = CreateMptxInstance(flowModel);

            Guid apprenticeshipId = default;

            SqlQuerySpy.Callback <CreateApprenticeship, Success>(q => apprenticeshipId = q.ApprenticeshipId);

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

            // Act
            var response = await HttpClient.PostAsync(
                $"new-apprenticeship-provider/apprenticeship-confirmation?providerId={provider.ProviderId}&ffiid={mptxInstance.InstanceId}",
                requestContent);

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

            var doc = await response.GetDocument();

            Assert.NotNull(doc.GetElementsByClassName("govuk-error-summary"));
        }
Exemplo n.º 4
0
        public async Task PostConfirmation_ValidRequestWithNationalLocations_CreatesApprenticeshipQASubmissionUpdatesQAStatusAndReturnsConfirmation()
        {
            // Arrange
            var provider = await TestData.CreateProvider(apprenticeshipQAStatus : ApprenticeshipQAStatus.NotStarted);

            var standardCode    = 123;
            var standardVersion = 1;
            var standard        = await TestData.CreateStandard(standardCode, standardVersion, standardName : "My standard");

            await User.AsProviderUser(provider.ProviderId, ProviderType.Apprenticeships);

            var flowModel = new FlowModel();

            flowModel.SetProviderDetails("Provider 1 rocks");
            flowModel.SetApprenticeshipStandard(standard);
            flowModel.SetApprenticeshipDetails(
                marketingInformation: "My apprenticeship",
                website: "http://provider.com/apprenticeship",
                contactTelephone: "01234 5678902",
                contactEmail: "*****@*****.**",
                contactWebsite: "http://provider.com");
            flowModel.SetApprenticeshipLocationType(ApprenticeshipLocationType.EmployerBased);
            flowModel.SetApprenticeshipIsNational(true);
            var mptxInstance = CreateMptxInstance(flowModel);

            Guid apprenticeshipId = default;

            SqlQuerySpy.Callback <CreateApprenticeship, Success>(q => apprenticeshipId = q.ApprenticeshipId);

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

            // Act
            var response = await HttpClient.PostAsync(
                $"new-apprenticeship-provider/apprenticeship-confirmation?providerId={provider.ProviderId}&ffiid={mptxInstance.InstanceId}",
                requestContent);

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

            SqlQuerySpy.VerifyQuery <CreateApprenticeship, Success>(q =>
                                                                    q.ContactEmail == "*****@*****.**" &&
                                                                    q.ContactTelephone == "01234 5678902" &&
                                                                    q.ContactWebsite == "http://provider.com" &&
                                                                    q.CreatedBy.UserId == User.UserId &&
                                                                    q.CreatedOn == Clock.UtcNow &&
                                                                    q.MarketingInformation == "My apprenticeship" &&
                                                                    q.ProviderId == provider.ProviderId &&
                                                                    q.Standard.StandardCode == standardCode &&
                                                                    q.Standard.Version == standardVersion &&
                                                                    q.ApprenticeshipWebsite == "http://provider.com/apprenticeship");

            SqlQuerySpy.VerifyQuery <CreateApprenticeshipQASubmission, int>(q =>
                                                                            q.Apprenticeships.Single().ApprenticeshipId == apprenticeshipId &&
                                                                            q.Apprenticeships.Single().ApprenticeshipMarketingInformation == "My apprenticeship" &&
                                                                            q.Apprenticeships.Single().ApprenticeshipTitle == "My standard" &&
                                                                            q.ProviderId == provider.ProviderId &&
                                                                            q.ProviderMarketingInformation == "Provider 1 rocks" &&
                                                                            q.SubmittedByUserId == User.UserId &&
                                                                            q.SubmittedOn == Clock.UtcNow);

            SqlQuerySpy.VerifyQuery <SetProviderApprenticeshipQAStatus, None>(q =>
                                                                              q.ProviderId == provider.ProviderId && q.ApprenticeshipQAStatus == ApprenticeshipQAStatus.Submitted);

            var doc = await response.GetDocument();

            Assert.Equal(
                "Quality assurance submitted",
                doc.GetElementsByClassName("govuk-panel__title").Single().TextContent.Trim());
        }
Exemplo n.º 5
0
        public async Task Post_CreatesTLevelUpdatesJourneyStateAndRedirects()
        {
            // Arrange
            var tLevelDefinitions = await TestData.CreateInitialTLevelDefinitions();

            var authorizedTLevelDefinitionIds = tLevelDefinitions.Select(tld => tld.TLevelDefinitionId).ToArray();

            var provider = await TestData.CreateProvider(
                providerType : ProviderType.TLevels,
                tLevelDefinitionIds : authorizedTLevelDefinitionIds);

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

            var selectedTLevel     = tLevelDefinitions.First();
            var whoFor             = "Who for";
            var entryRequirements  = "Entry requirements";
            var whatYoullLearn     = "What you'll learn";
            var howYoullLearn      = "How you'll learn";
            var howYoullBeAssessed = "How you'll be assessed";
            var whatYouCanDoNext   = "What you can do next";
            var yourReference      = "YOUR-REF";
            var startDate          = new DateTime(2021, 4, 1);
            var website            = "http://example.com/tlevel";

            var journeyState = new AddTLevelJourneyModel();

            journeyState.SetTLevel(
                selectedTLevel.TLevelDefinitionId,
                selectedTLevel.Name);

            journeyState.SetDescription(
                whoFor,
                entryRequirements,
                whatYoullLearn,
                howYoullLearn,
                howYoullBeAssessed,
                whatYouCanDoNext,
                isComplete: true);

            journeyState.SetDetails(
                yourReference,
                startDate,
                locationVenueIds: new[] { venueId },
                website,
                isComplete: true);

            var journeyInstance   = CreateJourneyInstance(provider.ProviderId, journeyState);
            var journeyInstanceId = journeyInstance.InstanceId;

            Guid createdTLevelId = default;

            SqlQuerySpy.Callback <CreateTLevel, OneOf <CreateTLevelFailedReason, Success> >(
                q => createdTLevelId = q.TLevelId);

            var request = new HttpRequestMessage(
                HttpMethod.Post,
                $"/t-levels/add/check-publish?providerId={provider.ProviderId}&ffiid={journeyInstanceId.UniqueKey}")
            {
                Content = new FormUrlEncodedContentBuilder()
                          .ToContent()
            };

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

            // Assert
            response.StatusCode.Should().Be(HttpStatusCode.Found);
            response.Headers.Location.OriginalString
            .Should().Be($"/t-levels/add/success?providerId={provider.ProviderId}&ffiid={journeyInstanceId.UniqueKey}");

            SqlQuerySpy.VerifyQuery <CreateTLevel, OneOf <CreateTLevelFailedReason, Success> >(q =>
                                                                                               q.CreatedBy.UserId == User.UserId &&
                                                                                               q.CreatedOn == Clock.UtcNow &&
                                                                                               q.EntryRequirements == entryRequirements &&
                                                                                               q.HowYoullBeAssessed == howYoullBeAssessed &&
                                                                                               q.HowYoullLearn == howYoullLearn &&
                                                                                               q.LocationVenueIds.Single() == venueId &&
                                                                                               q.ProviderId == provider.ProviderId &&
                                                                                               q.StartDate == startDate &&
                                                                                               q.TLevelDefinitionId == selectedTLevel.TLevelDefinitionId &&
                                                                                               q.Website == website &&
                                                                                               q.WhatYouCanDoNext == whatYouCanDoNext &&
                                                                                               q.WhatYoullLearn == q.WhatYoullLearn &&
                                                                                               q.WhoFor == whoFor &&
                                                                                               q.YourReference == q.YourReference);

            GetJourneyInstance <AddTLevelJourneyModel>(journeyInstanceId)
            .State.TLevelId.Should().Be(createdTLevelId);
        }
Exemplo n.º 6
0
        public async Task Post_TLevelAlreadyExistsForStartDate_RendersError()
        {
            // Arrange
            var tLevelDefinitions = await TestData.CreateInitialTLevelDefinitions();

            var authorizedTLevelDefinitionIds = tLevelDefinitions.Select(tld => tld.TLevelDefinitionId).ToArray();

            var provider = await TestData.CreateProvider(
                providerType : ProviderType.TLevels,
                tLevelDefinitionIds : authorizedTLevelDefinitionIds);

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

            var selectedTLevel     = tLevelDefinitions.First();
            var whoFor             = "Who for";
            var entryRequirements  = "Entry requirements";
            var whatYoullLearn     = "What you'll learn";
            var howYoullLearn      = "How you'll learn";
            var howYoullBeAssessed = "How you'll be assessed";
            var whatYouCanDoNext   = "What you can do next";
            var yourReference      = "YOUR-REF";
            var startDate          = new DateTime(2021, 4, 1);
            var website            = "http://example.com/tlevel";

            await TestData.CreateTLevel(
                provider.ProviderId,
                selectedTLevel.TLevelDefinitionId,
                whoFor : whoFor,
                entryRequirements : entryRequirements,
                whatYoullLearn : whatYoullLearn,
                howYoullLearn : howYoullLearn,
                howYoullBeAssessed : howYoullBeAssessed,
                whatYouCanDoNext : whatYouCanDoNext,
                yourReference : yourReference,
                startDate : startDate,
                locationVenueIds : new[] { venueId },
                website : website,
                createdBy : User.ToUserInfo());

            var journeyState = new AddTLevelJourneyModel();

            journeyState.SetTLevel(
                selectedTLevel.TLevelDefinitionId,
                selectedTLevel.Name);

            journeyState.SetDescription(
                whoFor,
                entryRequirements,
                whatYoullLearn,
                howYoullLearn,
                howYoullBeAssessed,
                whatYouCanDoNext,
                isComplete: true);

            journeyState.SetDetails(
                yourReference,
                startDate,
                locationVenueIds: new[] { venueId },
                website,
                isComplete: true);

            var journeyInstance   = CreateJourneyInstance(provider.ProviderId, journeyState);
            var journeyInstanceId = journeyInstance.InstanceId;

            Guid createdTLevelId = default;

            SqlQuerySpy.Callback <CreateTLevel, OneOf <CreateTLevelFailedReason, Success> >(
                q => createdTLevelId = q.TLevelId);

            var request = new HttpRequestMessage(
                HttpMethod.Post,
                $"/t-levels/add/check-publish?providerId={provider.ProviderId}&ffiid={journeyInstanceId.UniqueKey}")
            {
                Content = new FormUrlEncodedContentBuilder()
                          .ToContent()
            };

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

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

            var doc = await response.GetDocument();

            doc.GetElementByTestId("duplicate-date-error").Should().NotBeNull();
        }