Skip to content

Commit

Permalink
.
Browse files Browse the repository at this point in the history
  • Loading branch information
MrKevJoy committed Jan 24, 2025
1 parent fb51196 commit 261f1ab
Show file tree
Hide file tree
Showing 12 changed files with 83 additions and 109 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -61,22 +61,23 @@
</govuk-summary-list-row-actions>
</govuk-summary-list-row>
}


<govuk-summary-list-row>
<govuk-summary-list-row-key>Name</govuk-summary-list-row-key>
<govuk-summary-list-row-value>@Model.Name</govuk-summary-list-row-value>
<govuk-summary-list-row-actions>
<govuk-summary-list-row-action href="@LinkGenerator.RequestTrnName(Model.JourneyInstance!.InstanceId, fromCheckAnswers: true)" visually-hidden-text="name">Change</govuk-summary-list-row-action>
</govuk-summary-list-row-actions>
</govuk-summary-list-row>
<govuk-summary-list-row>
<govuk-summary-list-row-key>Previous name</govuk-summary-list-row-key>
<govuk-summary-list-row-value>@Model.PreviousName</govuk-summary-list-row-value>
<govuk-summary-list-row-actions>
<govuk-summary-list-row-action href="@LinkGenerator.RequestTrnPreviousName(Model.JourneyInstance!.InstanceId, fromCheckAnswers: true)" visually-hidden-text="previous name">Change</govuk-summary-list-row-action>
</govuk-summary-list-row-actions>
</govuk-summary-list-row>
@if (!string.IsNullOrEmpty(Model.PreviousName))
{
<govuk-summary-list-row>
<govuk-summary-list-row-key>Previous name</govuk-summary-list-row-key>
<govuk-summary-list-row-value>@Model.PreviousName</govuk-summary-list-row-value>
<govuk-summary-list-row-actions>
<govuk-summary-list-row-action href="@LinkGenerator.RequestTrnPreviousName(Model.JourneyInstance!.InstanceId, fromCheckAnswers: true)" visually-hidden-text="previous name">Change</govuk-summary-list-row-action>
</govuk-summary-list-row-actions>
</govuk-summary-list-row>
}
<govuk-summary-list-row>
<govuk-summary-list-row-key>Date of birth</govuk-summary-list-row-key>
<govuk-summary-list-row-value>@Model.DateOfBirth!.Value.ToString("d MMMM yyyy")</govuk-summary-list-row-value>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,12 +79,14 @@ public async Task<IActionResult> OnPostAsync()
var state = JourneyInstance!.State;

var description = $"""
WorkEmail: {state.WorkEmail}
Name: {state.Name}
Working In School or Educational Setting: {(state.WorkingInSchoolOrEducationalSetting == true ? "Yes" : "No")}
Personal Email: {state.PersonalEmail}
Work Email: {state.WorkEmail}
Name: {state.Name}
Previous name: {state.PreviousName}
Date of birth: {state.DateOfBirth:dd/MM/yyyy}
National Insurance number: {NationalInsuranceNumberHelper.Normalize(state.NationalInsuranceNumber)}
Registered For NPQ: {(state.HaveRegisteredForAnNpq == true ? "Yes" : "No")}
NPQ application ID: {state.NpqApplicationId}
NPQ name: {state.NpqName}
NPQ training provider: {state.NpqTrainingProvider}
Expand Down Expand Up @@ -116,7 +118,7 @@ await crmQueryDispatcher.ExecuteQueryAsync(
EvidenceFileName = JourneyInstance!.State.EvidenceFileName!,
EvidenceFileContent = stream,
EvidenceFileMimeType = evidenceFileMimeType,
EmailAddress = JourneyInstance!.State.WorkEmail!
EmailAddress = JourneyInstance!.State.PersonalEmail!
});

await JourneyInstance!.UpdateStateAsync(state => state.HasPendingTrnRequest = true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public class NpqApplicationModel(AuthorizeAccessLinkGenerator linkGenerator) : P
public bool? FromCheckAnswers { get; set; }

[BindProperty]
[Display(Name = "What is your NPQ application ID", Description = "We’ll use this to check your registration details.")]
[Display(Name = "What is your NPQ application ID?", Description = "We’ll use this to check your registration details.")]
[Required(ErrorMessage = "Tell us your NPQ application ID")]
public string? NpqApplicationId { get; set; }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public class NpqCheckModel(AuthorizeAccessLinkGenerator linkGenerator) : PageMod

[BindProperty]
[Display(Name = "Have you already registered for an NPQ?")]
[Required(ErrorMessage = "Tell us whether you have already registered for an NPQ")]
[Required(ErrorMessage = "Select yes if you have already registered for an NPQ")]
public bool? HaveRegisteredForAnNpq { get; set; }

public void OnGet()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Mvc.RazorPages;
using TeachingRecordSystem.Core.Dqt;
using TeachingRecordSystem.Core.Dqt.Queries;
using TeachingRecordSystem.WebCommon.FormFlow;
using EmailAddress = TeachingRecordSystem.AuthorizeAccess.DataAnnotations.EmailAddressAttribute;

namespace TeachingRecordSystem.AuthorizeAccess.Pages.RequestTrn;

[Journey(RequestTrnJourneyState.JourneyName), RequireJourneyInstance]
public class PersonalEmailModel(AuthorizeAccessLinkGenerator linkGenerator) : PageModel
public class PersonalEmailModel(AuthorizeAccessLinkGenerator linkGenerator, ICrmQueryDispatcher crmQueryDispatcher) : PageModel
{
public JourneyInstance<RequestTrnJourneyState>? JourneyInstance { get; set; }

Expand All @@ -35,6 +37,14 @@ public async Task<IActionResult> OnPostAsync()

await JourneyInstance!.UpdateStateAsync(state => state.PersonalEmail = PersonalEmail);

var openTasks = await crmQueryDispatcher.ExecuteQueryAsync(
new GetOpenTasksForEmailAddressQuery(EmailAddress: JourneyInstance!.State.PersonalEmail!));

if (openTasks.Any())
{
return Redirect(linkGenerator.RequestTrnEmailInUse(JourneyInstance!.InstanceId));
}

return FromCheckAnswers == true ?
Redirect(linkGenerator.RequestTrnCheckAnswers(JourneyInstance!.InstanceId)) :
Redirect(linkGenerator.RequestTrnName(JourneyInstance.InstanceId));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public class SchoolOrEducationalSettingModel(AuthorizeAccessLinkGenerator linkGe

[BindProperty]
[Display(Name = "Are you currently working in a school or other educational setting?")]
[Required(ErrorMessage = "Tell us if you are currently working in a school or other educational setting")]
[Required(ErrorMessage = "Select yes if you are currently working in a school or other educational setting")]
public bool? IsWorkingInSchoolOrEducationalSetting { get; set; }

public async Task<IActionResult> OnPostAsync()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
using System.ComponentModel.DataAnnotations;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Mvc.RazorPages;
using TeachingRecordSystem.Core.Dqt;
using TeachingRecordSystem.Core.Dqt.Queries;
using TeachingRecordSystem.WebCommon.FormFlow;
using EmailAddress = TeachingRecordSystem.AuthorizeAccess.DataAnnotations.EmailAddressAttribute;

namespace TeachingRecordSystem.AuthorizeAccess.Pages.RequestTrn;

[Journey(RequestTrnJourneyState.JourneyName), RequireJourneyInstance]
public class WorkEmailModel(AuthorizeAccessLinkGenerator linkGenerator, ICrmQueryDispatcher crmQueryDispatcher) : PageModel
public class WorkEmailModel(AuthorizeAccessLinkGenerator linkGenerator) : PageModel
{
public JourneyInstance<RequestTrnJourneyState>? JourneyInstance { get; set; }

Expand All @@ -37,26 +34,8 @@ public async Task<IActionResult> OnPostAsync()

await JourneyInstance!.UpdateStateAsync(state => state.WorkEmail = WorkEmail);

var openTasks = await crmQueryDispatcher.ExecuteQueryAsync(
new GetOpenTasksForEmailAddressQuery(EmailAddress: JourneyInstance!.State.WorkEmail!));

if (openTasks.Any())
{
return Redirect(linkGenerator.RequestTrnEmailInUse(JourneyInstance!.InstanceId));
}

return FromCheckAnswers == true ?
Redirect(linkGenerator.RequestTrnCheckAnswers(JourneyInstance!.InstanceId)) :
Redirect(linkGenerator.RequestTrnPersonalEmail(JourneyInstance.InstanceId));
}

public override void OnPageHandlerExecuting(PageHandlerExecutingContext context)
{
var state = JourneyInstance!.State;
if (state.HasPendingTrnRequest)
{
context.Result = Redirect(linkGenerator.RequestTrnSubmitted(JourneyInstance!.InstanceId));
return;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -442,7 +442,7 @@ public async Task Get_GetValidRequestWithNpqNameAndProvider_ShowsNpqNameAndProvi
Assert.Equal(state.WorkEmail, doc.GetSummaryListValueForKey("Work email"));
Assert.Equal(state.PersonalEmail, doc.GetSummaryListValueForKey("Personal email"));
Assert.Equal(state.Name, doc.GetSummaryListValueForKey("Name"));
Assert.Equal(string.Empty, doc.GetSummaryListValueForKey("Previous name"));
Assert.Null(doc.GetSummaryListValueForKey("Previous name"));
Assert.Equal(state.DateOfBirth?.ToString("d MMMM yyyy"), doc.GetSummaryListValueForKey("Date of birth"));
Assert.Equal(state.EvidenceFileName, doc.GetSummaryListValueForKey("Proof of identity"));
Assert.Equal(state.NationalInsuranceNumber, doc.GetSummaryListValueForKey("National Insurance number"));
Expand Down Expand Up @@ -485,7 +485,7 @@ public async Task Get_GetValidRequestNpqApplicationIdProvided_HidesNpqNameAndPro
Assert.Equal(state.WorkEmail, doc.GetSummaryListValueForKey("Work email"));
Assert.Equal(state.PersonalEmail, doc.GetSummaryListValueForKey("Personal email"));
Assert.Equal(state.Name, doc.GetSummaryListValueForKey("Name"));
Assert.Equal(string.Empty, doc.GetSummaryListValueForKey("Previous name"));
Assert.Null(doc.GetSummaryListValueForKey("Previous name"));
Assert.Equal(state.DateOfBirth?.ToString("d MMMM yyyy"), doc.GetSummaryListValueForKey("Date of birth"));
Assert.Equal(state.EvidenceFileName, doc.GetSummaryListValueForKey("Proof of identity"));
Assert.Equal(state.NationalInsuranceNumber, doc.GetSummaryListValueForKey("National Insurance number"));
Expand Down Expand Up @@ -528,7 +528,7 @@ public async Task Get_GetValidRequestWorkingInSchoolOrEducationalSettingFalse_Hi
Assert.Null(doc.GetSummaryListValueForKey("Work email"));
Assert.Equal(state.PersonalEmail, doc.GetSummaryListValueForKey("Personal email"));
Assert.Equal(state.Name, doc.GetSummaryListValueForKey("Name"));
Assert.Equal(string.Empty, doc.GetSummaryListValueForKey("Previous name"));
Assert.Null(doc.GetSummaryListValueForKey("Previous name"));
Assert.Equal(state.DateOfBirth?.ToString("d MMMM yyyy"), doc.GetSummaryListValueForKey("Date of birth"));
Assert.Equal(state.EvidenceFileName, doc.GetSummaryListValueForKey("Proof of identity"));
Assert.Equal(state.NationalInsuranceNumber, doc.GetSummaryListValueForKey("National Insurance number"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public async Task Post_WhenIsTakingAnNpqHasNoSelection_ReturnsError()
var response = await HttpClient.SendAsync(request);

// Assert
await AssertEx.HtmlResponseHasErrorAsync(response, "HaveRegisteredForAnNpq", "Tell us whether you have already registered for an NPQ");
await AssertEx.HtmlResponseHasErrorAsync(response, "HaveRegisteredForAnNpq", "Select yes if you have already registered for an NPQ");
}

[Fact]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,54 @@ namespace TeachingRecordSystem.AuthorizeAccess.Tests.PageTests.RequestTrn;

public class PersonalEmailTests(HostFixture hostFixture) : TestBase(hostFixture)
{
[Fact]
public async Task Get_HasPendingTrnRequestSetTrue_RedirectsToSubmitted()
{
// Arrange
var state = CreateNewState();
state.HasPendingTrnRequest = true;
var journeyInstance = await CreateJourneyInstance(state);

var request = new HttpRequestMessage(HttpMethod.Get, $"/request-trn/personal-email?{journeyInstance.GetUniqueIdQueryParameter()}");

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

// Assert
Assert.Equal(StatusCodes.Status302Found, (int)response.StatusCode);
Assert.Equal($"/request-trn/submitted?{journeyInstance.GetUniqueIdQueryParameter()}", response.Headers.Location?.OriginalString);
}

[Fact]
public async Task Post_RequestForEmailWithOpenTasks_RedirectsToEmailInUse()
{
// Arrange
var email = Faker.Internet.Email();
var state = CreateNewState();
var journeyInstance = await CreateJourneyInstance(state);
var person = await TestData.CreatePersonAsync();
await TestData.CreateCrmTaskAsync(x =>
{
x.WithPersonId(person.ContactId);
x.WithEmailAddress(email);
});

var request = new HttpRequestMessage(HttpMethod.Post, $"/request-trn/personal-email?{journeyInstance.GetUniqueIdQueryParameter()}")
{
Content = new FormUrlEncodedContent(new Dictionary<string, string>
{
{ "PersonalEmail", email }
})
};

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

// Assert
Assert.Equal(StatusCodes.Status302Found, (int)response.StatusCode);
Assert.Equal($"/request-trn/emailinuse?{journeyInstance.GetUniqueIdQueryParameter()}", response.Headers.Location?.OriginalString);
}

[Fact]
public async Task Get_ValidRequest_RendersExpectedContent()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public async Task Post_EmptyIsWorkingInSchoolOrEducationalSettingEntered_Returns
var response = await HttpClient.SendAsync(request);

// Assert
await AssertEx.HtmlResponseHasErrorAsync(response, "IsWorkingInSchoolOrEducationalSetting", "Tell us if you are currently working in a school or other educational setting");
await AssertEx.HtmlResponseHasErrorAsync(response, "IsWorkingInSchoolOrEducationalSetting", "Select yes if you are currently working in a school or other educational setting");
}

[Fact]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,6 @@ namespace TeachingRecordSystem.AuthorizeAccess.Tests.PageTests.RequestTrn;

public class WorkEmailTests(HostFixture hostFixture) : TestBase(hostFixture)
{
[Fact]
public async Task Get_HasPendingTrnRequestSetTrue_RedirectsToSubmitted()
{
// Arrange
var state = CreateNewState();
state.HasPendingTrnRequest = true;
var journeyInstance = await CreateJourneyInstance(state);

var request = new HttpRequestMessage(HttpMethod.Get, $"/request-trn/work-email?{journeyInstance.GetUniqueIdQueryParameter()}");

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

// Assert
Assert.Equal(StatusCodes.Status302Found, (int)response.StatusCode);
Assert.Equal($"/request-trn/submitted?{journeyInstance.GetUniqueIdQueryParameter()}", response.Headers.Location?.OriginalString);
}

[Fact]
public async Task Get_ValidRequest_RendersExpectedContent()
{
Expand Down Expand Up @@ -54,24 +36,6 @@ public async Task Get_ValidRequestWithPopulatedDataInJourneyState_PopulatesModel
Assert.Equal(email, doc.GetElementById("WorkEmail")?.GetAttribute("value"));
}

[Fact]
public async Task Post_HasPendingTrnRequestSetTrue_RedirectsToSubmitted()
{
// Arrange
var state = CreateNewState();
state.HasPendingTrnRequest = true;
var journeyInstance = await CreateJourneyInstance(state);

var request = new HttpRequestMessage(HttpMethod.Post, $"/request-trn/work-email?{journeyInstance.GetUniqueIdQueryParameter()}");

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

// Assert
Assert.Equal(StatusCodes.Status302Found, (int)response.StatusCode);
Assert.Equal($"/request-trn/submitted?{journeyInstance.GetUniqueIdQueryParameter()}", response.Headers.Location?.OriginalString);
}

[Fact]
public async Task Post_EmptyEmailAddressEntered_ReturnsError()
{
Expand Down Expand Up @@ -163,34 +127,4 @@ public async Task Post_ValidRequestWithValidDataAndFromCheckAnswersTrue_Redirect
Assert.Equal(StatusCodes.Status302Found, (int)response.StatusCode);
Assert.Equal($"/request-trn/check-answers?{journeyInstance.GetUniqueIdQueryParameter()}", response.Headers.Location?.OriginalString);
}

[Fact]
public async Task Post_RequestForEmailWithOpenTasks_RedirectsToEmailInUse()
{
// Arrange
var email = Faker.Internet.Email();
var state = CreateNewState();
var journeyInstance = await CreateJourneyInstance(state);
var person = await TestData.CreatePersonAsync();
await TestData.CreateCrmTaskAsync(x =>
{
x.WithPersonId(person.ContactId);
x.WithEmailAddress(email);
});

var request = new HttpRequestMessage(HttpMethod.Post, $"/request-trn/work-email?{journeyInstance.GetUniqueIdQueryParameter()}")
{
Content = new FormUrlEncodedContent(new Dictionary<string, string>
{
{ "WorkEmail", email }
})
};

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

// Assert
Assert.Equal(StatusCodes.Status302Found, (int)response.StatusCode);
Assert.Equal($"/request-trn/emailinuse?{journeyInstance.GetUniqueIdQueryParameter()}", response.Headers.Location?.OriginalString);
}
}

0 comments on commit 261f1ab

Please sign in to comment.