public async Task Post_ValidRequest_DeletesApprenticeshipAndRedirects() { // Arrange var provider = await TestData.CreateProvider( providerType : ProviderType.Apprenticeships); var apprenticeshipTitle = await TestData.CreateStandard(standardName : ""); var apprenticeship = await TestData.CreateApprenticeship( provider.ProviderId, apprenticeshipTitle, createdBy : User.ToUserInfo()); var requestContent = new FormUrlEncodedContentBuilder() .Add("Confirm", "true") .ToContent(); var request = new HttpRequestMessage(HttpMethod.Post, $"/apprenticeships/delete/{apprenticeship.ApprenticeshipId}") { Content = requestContent }; CreateJourneyInstance(apprenticeship.ApprenticeshipId); // Act var response = await HttpClient.SendAsync(request); // Assert response.StatusCode.Should().Be(HttpStatusCode.Found); response.Headers.Location.OriginalString.Should() .Be($"/apprenticeships/delete/{apprenticeship.ApprenticeshipId}/success?providerId={provider.ProviderId}"); SqlQuerySpy.VerifyQuery <SqlQueries.DeleteApprenticeship, OneOf <NotFound, Success> >(q => q.ApprenticeshipId == apprenticeship.ApprenticeshipId); }
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, createdBy : User.ToUserInfo()); var requestContent = new FormUrlEncodedContentBuilder() .Add(nameof(Command.Confirm), true) .Add(nameof(Command.ProviderId), provider.ProviderId) .ToContent(); var request = new HttpRequestMessage(HttpMethod.Post, $"/venues/{venue.VenueId}/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.VenueId}/delete-success?providerId={provider.ProviderId}"); SqlQuerySpy.VerifyQuery <Core.DataStore.Sql.Queries.DeleteVenue, OneOf <NotFound, Success> >(q => q.VenueId == venue.VenueId); }
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())).ApprenticeshipId; 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); if (expectApprenticeshipToBeMadeLive) { SqlQuerySpy.VerifyQuery <PublishApprenticeship, OneOf <NotFound, Success> >( q => q.ApprenticeshipId == apprenticeshipId && q.PublishedBy.UserId == User.UserId && q.PublishedOn == Clock.UtcNow); } }
public async Task Post_ValidRequest_UpdatesDisplayNameSourceAndRedirects() { // Arrange var provider = await TestData.CreateProvider( providerName : "Provider name", alias : "Trading name"); var content = new FormUrlEncodedContentBuilder() .Add("DisplayNameSource", "TradingName") .ToContent(); var request = new HttpRequestMessage( HttpMethod.Post, $"providers/display-name?providerId={provider.ProviderId}") { Content = content }; // Act var response = await HttpClient.SendAsync(request); // Assert Assert.Equal(HttpStatusCode.Found, response.StatusCode); Assert.Equal($"/providers?providerId={provider.ProviderId}", response.Headers.Location.OriginalString); SqlQuerySpy.VerifyQuery <SetProviderDisplayNameSource, OneOf <NotFound, Success> >(q => q.ProviderId == provider.ProviderId && q.DisplayNameSource == ProviderDisplayNameSource.TradingName); }
public async Task Post_ValidRequest_UpdatesDatabaseAndRedirects() { // Arrange var provider = await TestData.CreateProvider(); var venueId = (await TestData.CreateVenue(provider.ProviderId, createdBy: User.ToUserInfo())).VenueId; 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}"); SqlQuerySpy.VerifyQuery <UpdateVenue, OneOf <NotFound, Success> >(q => q.VenueId == venueId && q.Name == "Updated name" && q.Email == "*****@*****.**" && q.Telephone == "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.UpdatedOn == Clock.UtcNow); }
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); }
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")); }
public async Task Post_ValidRequest_DeletesCourseRunAndRedirects() { // Arrange var tLevelDefinitions = await TestData.CreateInitialTLevelDefinitions(); var provider = await TestData.CreateProvider( providerType : ProviderType.TLevels, tLevelDefinitionIds : tLevelDefinitions.Select(tld => tld.TLevelDefinitionId).ToArray()); var venueId = (await TestData.CreateVenue(provider.ProviderId, venueName: "T Level venue")).Id; var tLevelDefinition = tLevelDefinitions.First(); var yourReference = "YOUR-REF"; var startDate = new DateTime(2021, 10, 1); var tLevel = await TestData.CreateTLevel( provider.ProviderId, tLevelDefinition.TLevelDefinitionId, locationVenueIds : new[] { venueId }, yourReference : yourReference, startDate : startDate, createdBy : User.ToUserInfo()); var requestContent = new FormUrlEncodedContentBuilder() .Add("Confirm", "true") .ToContent(); var request = new HttpRequestMessage(HttpMethod.Post, $"/t-levels/{tLevel.TLevelId}/delete") { Content = requestContent }; CreateJourneyInstance(tLevel.TLevelId); // Act var response = await HttpClient.SendAsync(request); // Assert response.StatusCode.Should().Be(HttpStatusCode.Found); response.Headers.Location.OriginalString.Should() .Be($"/t-levels/{tLevel.TLevelId}/delete/success?providerId={provider.ProviderId}"); SqlQuerySpy.VerifyQuery <SqlQueries.DeleteTLevel, OneOf <NotFound, Success> >(q => q.TLevelId == tLevel.TLevelId); }
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")); }
public async Task Post_ValidRequest_DeletesCourseRunAndRedirects() { // Arrange var provider = await TestData.CreateProvider(); var course = await TestData.CreateCourse(provider.ProviderId, createdBy : User.ToUserInfo()); var courseRunId = course.CourseRuns.Single().CourseRunId; var requestContent = new FormUrlEncodedContentBuilder() .Add("Confirm", "true") .ToContent(); var request = new HttpRequestMessage( HttpMethod.Post, $"/courses/{course.CourseId}/course-runs/{courseRunId}/delete?returnUrl=%2fcourses") { Content = requestContent }; await User.AsProviderUser(provider.ProviderId, ProviderType.FE); CreateJourneyInstance(course.CourseId, courseRunId); // Act var response = await HttpClient.SendAsync(request); // Assert Assert.Equal(HttpStatusCode.Found, response.StatusCode); Assert.Equal( $"/courses/{course.CourseId}/course-runs/{courseRunId}/delete/confirmed", response.Headers.Location.OriginalString); SqlQuerySpy.VerifyQuery <DeleteCourseRunQuery, OneOf <NotFound, Success> >(q => q.CourseId == course.CourseId && q.CourseRunId == courseRunId && q.DeletedBy.UserId == User.ToUserInfo().UserId&& q.DeletedOn == Clock.UtcNow); }
public async Task Post_ValidRequest_AbandonsCourseUploadAndRedirects(UploadStatus uploadStatus) { // Arrange var provider = await TestData.CreateProvider(); var(courseUpload, _) = await TestData.CreateCourseUpload(provider.ProviderId, createdBy : User.ToUserInfo(), uploadStatus); var request = new HttpRequestMessage(HttpMethod.Post, $"/data-upload/courses/delete?providerId={provider.ProviderId}") { Content = new FormUrlEncodedContentBuilder() .Add("Confirm", "true") .ToContent() }; // Act var response = await HttpClient.SendAsync(request); // Assert response.StatusCode.Should().Be(HttpStatusCode.Found); response.Headers.Location.OriginalString.Should().Be($"/data-upload/courses/resolve/delete/success?providerId={provider.ProviderId}"); SqlQuerySpy.VerifyQuery <SetCourseUploadAbandoned, OneOf <NotFound, Success> >( q => q.CourseUploadId == courseUpload.CourseUploadId && q.AbandonedOn == Clock.UtcNow); }
public async Task PostConfirmation_ValidRequestWithNationalLocations_CreatesApprenticeshipQASubmissionUpdatesQAStatusAndReturnsConfirmation() { // Arrange var providerId = 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(providerId, ProviderType.Apprenticeships); var flowModel = new FlowModel(); flowModel.SetProviderDetails("Provider 1 rocks"); flowModel.SetApprenticeshipStandardOrFramework(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; CosmosDbQueryDispatcher.Callback <CreateApprenticeship, Success>(q => apprenticeshipId = q.Id); var requestContent = new FormUrlEncodedContentBuilder().ToContent(); // Act var response = await HttpClient.PostAsync( $"new-apprenticeship-provider/apprenticeship-confirmation?providerId={providerId}&ffiid={mptxInstance.InstanceId}", requestContent); // Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); CosmosDbQueryDispatcher.Verify(mock => mock.ExecuteQuery(It.Is <CreateApprenticeship>(q => q.ApprenticeshipTitle == "My standard" && q.ApprenticeshipType == ApprenticeshipType.StandardCode && q.ContactEmail == "*****@*****.**" && q.ContactTelephone == "01234 5678902" && q.ContactWebsite == "http://provider.com" && q.CreatedByUser.UserId == User.UserId && q.CreatedDate == Clock.UtcNow && q.MarketingInformation == "My apprenticeship" && q.ProviderId == providerId && q.StandardOrFramework.Standard.StandardCode == standardCode && q.StandardOrFramework.Standard.Version == standardVersion && q.Url == "http://provider.com/apprenticeship" && q.Status == 2))); SqlQuerySpy.VerifyQuery <CreateApprenticeshipQASubmission, int>(q => q.Apprenticeships.Single().ApprenticeshipId == apprenticeshipId && q.Apprenticeships.Single().ApprenticeshipMarketingInformation == "My apprenticeship" && q.Apprenticeships.Single().ApprenticeshipTitle == "My standard" && q.ProviderId == providerId && q.ProviderMarketingInformation == "Provider 1 rocks" && q.SubmittedByUserId == User.UserId && q.SubmittedOn == Clock.UtcNow); SqlQuerySpy.VerifyQuery <SetProviderApprenticeshipQAStatus, None>(q => q.ProviderId == providerId && q.ApprenticeshipQAStatus == ApprenticeshipQAStatus.Submitted); var doc = await response.GetDocument(); Assert.Equal( "Quality assurance submitted", doc.GetElementsByClassName("govuk-panel__title").Single().TextContent.Trim()); }
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(); }
public async Task PostConfirmation_ValidRequestWithExistingApprenticeshipRegionsAndVenue_UpdatesApprenticeship() { // Arrange var ukprn = 12347; var providerUserId = $"{ukprn}-user"; var adminUserId = $"admin-user"; var contactTelephone = "1111 111 1111"; var contactWebsite = "https://somerandomprovider.com"; var marketingInfo = "Providing Online training"; var regions = new List <string> { "123" }; var standardCode = 123; var standardVersion = 1; var provider = await TestData.CreateProvider(apprenticeshipQAStatus : ApprenticeshipQAStatus.NotStarted); var user = await TestData.CreateUser(providerId : provider.ProviderId); var adminUser = await TestData.CreateUser(); var standard = await TestData.CreateStandard(standardCode, standardVersion, standardName : "My standard"); var apprenticeshipId = (await TestData.CreateApprenticeship(provider.ProviderId, standard, createdBy: user, contactEmail: adminUser.Email, contactTelephone: contactTelephone, contactWebsite: contactWebsite, marketingInformation: marketingInfo, locations: new[] { CreateApprenticeshipLocation.CreateRegionalEmployerBased(regions) })).ApprenticeshipId; 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.ClassroomBasedAndEmployerBased); flowModel.SetApprenticeshipLocationRegionIds(new[] { "E06000001", // County Durham "E10000009" // Dorset }); flowModel.SetApprenticeshipId(apprenticeshipId); flowModel.SetClassroomLocationForVenue( venueId, originalVenueId: null, radius: 5, deliveryModes: new[] { ApprenticeshipDeliveryMode.BlockRelease }); var mptxInstance = CreateMptxInstance(flowModel); 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 <UpdateApprenticeship, OneOf <NotFound, Success> >(q => q.ApprenticeshipLocations.Any(l => l.ApprenticeshipLocationType == ApprenticeshipLocationType.ClassroomBased && l.DeliveryModes.Single() == ApprenticeshipDeliveryMode.BlockRelease && l.Radius == 5 && l.VenueId == venueId) && q.ApprenticeshipLocations.Any(l => l.ApprenticeshipLocationType == ApprenticeshipLocationType.EmployerBased && l.DeliveryModes.Single() == ApprenticeshipDeliveryMode.EmployerAddress && l.National == false && l.VenueId == null && l.SubRegionIds.Contains("E06000001") && l.SubRegionIds.Contains("E10000009"))); }
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); }
public async Task Post_ValidRequest_UpdatesTLevelAndRedirects() { // 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 venue = await TestData.CreateVenue(provider.ProviderId, venueName : "T Level venue"); var tLevelDefinition = 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 tLevel = await TestData.CreateTLevel( provider.ProviderId, tLevelDefinition.TLevelDefinitionId, whoFor : whoFor, entryRequirements : entryRequirements, whatYoullLearn : whatYoullLearn, howYoullLearn : howYoullLearn, howYoullBeAssessed : howYoullBeAssessed, whatYouCanDoNext : whatYouCanDoNext, yourReference : yourReference, startDate : startDate, locationVenueIds : new[] { venue.Id }, website : website, createdBy : User.ToUserInfo()); var journeyInstance = await CreateJourneyInstance(tLevel.TLevelId); var request = new HttpRequestMessage( HttpMethod.Post, $"/t-levels/{tLevel.TLevelId}/check-publish?ffiid={journeyInstance.InstanceId.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/{tLevel.TLevelId}/success?ffiid={journeyInstance.InstanceId.UniqueKey}"); SqlQuerySpy.VerifyQuery <UpdateTLevel, OneOf <NotFound, UpdateTLevelFailedReason, Success> >(q => q.UpdatedBy.UserId == User.UserId && q.UpdatedOn == Clock.UtcNow && q.EntryRequirements == entryRequirements && q.HowYoullBeAssessed == howYoullBeAssessed && q.HowYoullLearn == howYoullLearn && q.LocationVenueIds.Single() == venue.Id && q.StartDate == startDate && q.Website == website && q.WhatYouCanDoNext == whatYouCanDoNext && q.WhatYoullLearn == q.WhatYoullLearn && q.WhoFor == whoFor && q.YourReference == q.YourReference); }
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 = 42D; var longitude = 43D; 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(); SqlQuerySpy.VerifyQuery <CreateVenue, Success>(q => q.ProviderId == provider.ProviderId && 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 == Convert.ToDecimal(latitude) && q.Longitude == Convert.ToDecimal(longitude) && q.CreatedBy.UserId == User.UserId && q.CreatedOn == Clock.UtcNow); }