Skip to content

Commit

Permalink
Implement interruption pages for ENIC
Browse files Browse the repository at this point in the history
  • Loading branch information
gms-gs committed Aug 29, 2024
1 parent fbc5529 commit a030888
Show file tree
Hide file tree
Showing 11 changed files with 286 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ def application_can_submit?
def review_path
if short_personal_statement?
candidate_interface_course_choices_course_review_interruption_path(application_choice.id)
elsif application_choice.application_form.qualifications_enic_reasons_waiting_or_maybe? || application_choice.application_form.any_qualification_enic_reason_not_needed?
candidate_interface_course_choices_course_review_enic_interruption_path(application_choice.id)
else
candidate_interface_course_choices_course_review_and_submit_path(application_choice.id)
end
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
module CandidateInterface
module CourseChoices
class ReviewEnicInterruptionController < CandidateInterface::CourseChoices::BaseController
before_action :redirect_to_your_applications_if_submitted
before_action :viewed_enic_interruption_page, only: :show

def show
set_enic_reviewed_cookie
end

private

def viewed_enic_interruption_page
if cookies[:viewed_enic_interruption_page] == 'true'
redirect_to candidate_interface_course_choices_course_review_and_submit_path(@application_choice.id)
end
end

def set_enic_reviewed_cookie
cookies[:viewed_enic_interruption_page] = { value: 'true' }
end
end
end
end
19 changes: 19 additions & 0 deletions app/models/application_form.rb
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,25 @@ def touch_choices
application_choices.touch_all
end

def any_qualification_enic_reason_not_needed?
return false if application_qualifications.empty?
return false if application_qualifications.all? { |qualification| qualification.enic_reason.nil? }

non_uk_qualifications = application_qualifications.reject do |qualification|
qualification.institution_country.nil? || qualification.institution_country == 'GB' || qualification.enic_reason.nil?
end

non_uk_qualifications.all?(&:enic_reason_not_needed?)
end

def qualifications_enic_reasons_waiting_or_maybe?
return false if application_qualifications.empty?

application_qualifications.count do |qualification|
qualification.enic_reason_waiting? || qualification.enic_reason_maybe?
end >= 1
end

def missing_enic_reference_for_non_uk_qualifications?
@missing_enic_reference_for_non_uk_qualifications ||= application_qualifications
.where.not(institution_country: 'GB')
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<div class="govuk-grid-row">
<div class="govuk-grid-column-three-quarters">
<div class="app-grid-column--grey">
<h1 class="govuk-heading-l"><%= t('review_enic_interruption.title') %></h1>

<p class="govuk-body"><%= t('review_enic_interruption.not_needed.more_likely_html') %></p>
<p class="govuk-body"><%= t('review_enic_interruption.not_needed.if_you_apply_enic_html', link: govuk_link_to(t('review_enic_interruption.not_needed.apply_for_enic_link'), candidate_interface_course_choices_course_review_path(current_application.id))) %></p>
<p class="govuk-body"><%= t('review_enic_interruption.not_needed.dont_provide_enic') %></p>
</div>

<div class="govuk-button-group app-course-choice__confirm-submission">
<%= govuk_button_to(t('review_enic_interruption.not_needed.continue_button_text'), candidate_interface_course_choices_course_review_and_submit_path(@application_choice.id), method: :get) %>
<%= govuk_link_to(t('review_enic_interruption.not_needed.save_application_button_text'), candidate_interface_course_choices_course_review_path(current_application.id)) %>
</div>
</div>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<div class="govuk-grid-row">
<div class="govuk-grid-column-three-quarters">
<div class="app-grid-column--grey">
<h1 class="govuk-heading-l"><%= t('review_enic_interruption.title') %></h1>

<p class="govuk-body"><%= t('review_enic_interruption.waiting_maybe.planned_link_html', link: govuk_link_to(t('review_enic_interruption.waiting_maybe.enic_link_text'), t('service_name.enic.statement_of_comparability_url'))) %></p>
<p class="govuk-body"><%= t('review_enic_interruption.waiting_maybe.if_you_have_enic') %></p>
<p class="govuk-body"><%= t('review_enic_interruption.waiting_maybe.save_as_draft_html', link: govuk_link_to(t('review_enic_interruption.waiting_maybe.save_this_as_draft'), candidate_interface_course_choices_course_review_path(current_application.id))) %></p>
<p class="govuk-body"><%= t('review_enic_interruption.waiting_maybe.without_enic') %></p>
</div>

<div class="govuk-button-group app-course-choice__confirm-submission">
<%= govuk_button_to(t('review_enic_interruption.waiting_maybe.enter_enic'), candidate_interface_continuous_applications_details_path, method: :get) %>
<%= govuk_link_to(t('review_enic_interruption.waiting_maybe.without_entering_enic'), candidate_interface_course_choices_course_review_and_submit_path(@application_choice.id)) %>
</div>
</div>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<% content_for :title, t('page_titles.application_review_and_submit', provider_name: @application_choice.provider.name) %>
<% content_for(:before_content, govuk_back_link_to(candidate_interface_continuous_applications_choices_path)) %>

<% if current_application.qualifications_enic_reasons_waiting_or_maybe? %>
<%= render 'waiting_maybe' %>
<% end %>

<% if current_application.any_qualification_enic_reason_not_needed? %>
<%= render 'not_needed' %>
<% end %>
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,26 @@
<div class="govuk-grid-row">
<div class="govuk-grid-column-three-quarters">
<div class="app-grid-column--grey">
<h1 class="govuk-heading-l">Give your application the best chance of success</h1>
<p class="govuk-body">Your personal statement is <%= "#{@word_count} #{'word'.pluralize(@word_count)}" %>.</p>
<p class="govuk-body">90% of successful candidates write about <%= ApplicationForm::RECOMMENDED_PERSONAL_STATEMENT_WORD_COUNT %> words or more for their personal statement.</p>
<p class="govuk-body">Increase your chances of getting an offer by adding more information to your personal statement.</p>
<h1 class="govuk-heading-l"><%= t('review_interruption.title') %></h1>
<p class="govuk-body"><%= t('review_interruption.statement_count', word_count: "#{@word_count} #{'word'.pluralize(@word_count)}") %></p>
<p class="govuk-body"><%= t('review_interruption.success_percentage', word_count: ApplicationForm::RECOMMENDED_PERSONAL_STATEMENT_WORD_COUNT) %></p>
<p class="govuk-body"><%= t('review_interruption.increase_chances') %></p>
</div>

<div class="govuk-button-group app-course-choice__confirm-submission">
<fieldset class="govuk-fieldset">
<legend class="govuk-fieldset__legend govuk-fieldset__legend--s">
Would you like to edit your personal statement before submitting your application?
<%= t('review_interruption.edit_statement') %>
</legend>
</fieldset>

<%= govuk_button_to('Edit your personal statement', candidate_interface_edit_becoming_a_teacher_path, method: :get) %>
<%= govuk_link_to('Continue without editing', candidate_interface_course_choices_course_review_and_submit_path(@application_choice.id)) %>
<%= govuk_button_to(t('review_interruption.edit_statement_button_text'), candidate_interface_edit_becoming_a_teacher_path, method: :get) %>

<% if current_application.qualifications_enic_reasons_waiting_or_maybe? || current_application.any_qualification_enic_reason_not_needed? %>
<%= govuk_link_to(t('review_interruption.continue_without_editing'), candidate_interface_course_choices_course_review_enic_interruption_path(@application_choice.id)) %>
<% else %>
<%= govuk_link_to(t('review_interruption.continue_without_editing'), candidate_interface_course_choices_course_review_and_submit_path(@application_choice.id)) %>
<% end %>
</div>
</div>
</div>
27 changes: 27 additions & 0 deletions config/locales/candidate_interface/interruption.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
en:
review_interruption:
title: Give your application the best chance of success
statement_count: Your personal statement is %{word_count}.
success_percentage: 90% of successful candidates write about %{word_count} words or more for their personal statement.
increase_chances: Increase your chances of getting an offer by adding more information to your personal statement.
edit_statement: Would you like to edit your personal statement before submitting your application?
edit_statement_button_text: Edit your personal statement
continue_without_editing: Continue without editing
review_enic_interruption:
title: You have not included a UK ENIC reference number
waiting_maybe:
enic_link_text: apply for a statement of comparability from UK ENIC (opens in new tab)
planned_link_html: You have said you had, or planned to %{link} but you have not added the reference number to this application.
if_you_have_enic: If you have a UK ENIC reference number, you should add it to your qualifications details.
save_this_as_draft: save this application as a draft
save_as_draft_html: If you are still waiting then you can %{link} and come back to add your UK ENIC reference number later.
without_enic: You can also submit your application without the UK ENIC reference number and contact the training provider when it arrives.
enter_enic: Enter a UK ENIC number
without_entering_enic: Continue without adding a UK ENIC number
not_needed:
more_likely_html: Including a UK ENIC reference number in your application makes youn around <b> 30% more likely to receive an offer.</b>
apply_for_enic_link: apply for a UK ENIC statement of comparability (opens in new tab)
if_you_apply_enic_html: If you %{link} and include the reference number in your application it makes it easier for training providers to understand your qualifications.
dont_provide_enic: If you don’t include a UK ENIC statement of comparability and the provider asks for one, it could cause delays.
continue_button_text: Continue without a UK ENIC number
save_application_button_text: Save this application as a draft
1 change: 1 addition & 0 deletions config/routes/candidate.rb
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,7 @@

get '/:application_choice_id/review' => 'course_choices/review#show', as: :course_choices_course_review
get '/:application_choice_id/review-interruption' => 'course_choices/review_interruption#show', as: :course_choices_course_review_interruption
get '/:application_choice_id/review-enic-interruption' => 'course_choices/review_enic_interruption#show', as: :course_choices_course_review_enic_interruption
get '/:application_choice_id/review-and-submit' => 'course_choices/review_and_submit#show', as: :course_choices_course_review_and_submit
get '/blocked-submissions' => 'course_choices/blocked_submissions#show', as: :course_choices_blocked_submissions

Expand Down
35 changes: 35 additions & 0 deletions spec/models/application_form_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,41 @@
end
end

describe '#qualifications_enic_reasons_waiting_or_maybe?' do
it 'returns true if 1 or more qualifications have an enic_reason of waiting or maybe' do
application_form = create(:application_form)
create(:degree_qualification, enic_reference: '12345', institution_country: 'GB', enic_reason: 'waiting', application_form: application_form)

expect(application_form.qualifications_enic_reasons_waiting_or_maybe?).to be(true)
end

it 'returns false if no qualifications have an enic_reason of waiting or maybe' do
application_form = create(:application_form)
create(:degree_qualification, enic_reference: '12345', institution_country: 'GB', enic_reason: 'not_needed', application_form: application_form)

expect(application_form.qualifications_enic_reasons_waiting_or_maybe?).to be(false)
end
end

describe '#any_qualification_enic_reason_not_needed?' do
it 'returns true if ALL qualifications have an enic_reason of not_needed' do
application_form = create(:application_form)
create(:degree_qualification, enic_reference: '12345', institution_country: 'GB', enic_reason: 'not_needed', application_form: application_form)
create(:degree_qualification, enic_reference: '12346', institution_country: 'GB', enic_reason: 'not_needed', application_form: application_form)
create(:degree_qualification, enic_reference: '12347', institution_country: 'GB', enic_reason: 'not_needed', application_form: application_form)

expect(application_form.any_qualification_enic_reason_not_needed?).to be(true)
end

it 'returns false if any qualification has an enic_reason that is not_needed' do
application_form = create(:application_form)
create(:degree_qualification, enic_reference: '12345', institution_country: 'GB', enic_reason: 'not_needed', application_form: application_form)
create(:degree_qualification, enic_reference: '12348', institution_country: 'GB', enic_reason: 'obtained', application_form: application_form)

expect(application_form.qualifications_enic_reasons_waiting_or_maybe?).to be(false)
end
end

describe '#missing_enic_reference_for_non_uk_qualifications?' do
it 'returns false if there are no application_qualifications which are non_uk and have no enic_reference' do
application_form = create(:application_form)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
require 'rails_helper'

RSpec.describe 'Candidate submits the application with enic interruption pages' do
include CandidateHelper
include SignInHelper

scenario 'Candidate submits an application with all applications having an enic_reason of not_needed', :js, time: mid_cycle do
given_i_am_signed_in

when_i_have_completed_my_application_and_have_added_primary_as_a_course_choice_with_not_needed_qualification
and_i_continue_with_my_application

when_i_save_as_draft
and_i_am_redirected_to_the_application_dashboard
and_my_application_is_still_unsubmitted
and_i_continue_with_my_application

when_i_click_to_review_my_application
then_i_see_a_interruption_page_for_personal_statement
when_i_continue_without_editing
then_i_see_a_interruption_page_for_not_needed_enic
then_the_viewed_enic_interruption_page_cookie_to_be_set
end

scenario 'Candidate submits an application with an application having an enic_reason of maybe', :js, time: mid_cycle do
given_i_am_signed_in

when_i_have_completed_my_application_and_have_added_primary_as_a_course_choice_with_waiting_or_maybe_qualification
and_i_continue_with_my_application

when_i_save_as_draft
and_i_am_redirected_to_the_application_dashboard
and_my_application_is_still_unsubmitted
and_i_continue_with_my_application

when_i_click_to_review_my_application
then_i_see_a_interruption_page_for_personal_statement
when_i_continue_without_editing
then_i_see_a_interruption_page_for_waiting_or_maybe_enic
then_the_viewed_enic_interruption_page_cookie_to_be_set
end

def when_i_have_completed_my_application_and_have_added_primary_as_a_course_choice_with_not_needed_qualification
given_i_have_a_primary_course_choice(application_form_completed: true)
add_not_needed_qualification
end

def when_i_have_completed_my_application_and_have_added_primary_as_a_course_choice_with_waiting_or_maybe_qualification
given_i_have_a_primary_course_choice(application_form_completed: true)
add_waiting_or_maybe_qualification
end

def given_i_have_a_primary_course_choice(application_form_completed:)
completed_section_trait = application_form_completed.present? ? :completed : :minimum_info

@provider = create(:provider, name: 'Gorse SCITT', code: '1N1')
site = create(
:site,
name: 'Main site',
code: '-',
provider: @provider,
address_line1: 'Gorse SCITT',
address_line2: 'C/O The Bruntcliffe Academy',
address_line3: 'Bruntcliffe Lane',
address_line4: 'MORLEY, lEEDS',
postcode: 'LS27 0LZ',
)
@course = create(:course, :open, name: 'Primary', code: '2XT2', provider: @provider)
@course_option = create(:course_option, site:, course: @course)
current_candidate.application_forms.delete_all
current_candidate.application_forms << build(:application_form, completed_section_trait, becoming_a_teacher: 'I want to teach')
@application_choice = create(:application_choice, :unsubmitted, course_option: @course_option, application_form: current_candidate.current_application)
end

def add_not_needed_qualification
@application_choice.application_form.application_qualifications << build(:application_qualification, enic_reason: 'not_needed')
end

def add_waiting_or_maybe_qualification
@application_choice.application_form.application_qualifications << build(:application_qualification, enic_reason: 'maybe')
end

def when_i_save_as_draft
click_link_or_button 'Save as draft'
end

def and_my_application_is_still_unsubmitted
expect(@application_choice.reload).to be_unsubmitted
end

def and_i_am_redirected_to_the_application_dashboard
expect(page).to have_content t('page_titles.application_dashboard')
expect(page).to have_content 'Gorse SCITT'
end

def when_i_go_back
click_link_or_button 'Back'
end

def then_i_see_a_interruption_page_for_personal_statement
expect(page).to have_content 'Your personal statement is 4 words.'
end

def then_i_see_a_interruption_page_for_not_needed_enic
expect(page).to have_content 'You have not included a UK ENIC reference number'
expect(page).to have_content 'Including a UK ENIC reference number in your application makes youn around 30% more likely to receive an offer.'
expect(page).to have_current_path(
candidate_interface_course_choices_course_review_enic_interruption_path(@application_choice.id),
)
end

def then_i_see_a_interruption_page_for_waiting_or_maybe_enic
expect(page).to have_content 'You have not included a UK ENIC reference number'
expect(page).to have_content 'If you have a UK ENIC reference number, you should add it to your qualifications details.'
expect(page).to have_current_path(
candidate_interface_course_choices_course_review_enic_interruption_path(@application_choice.id),
)
end

def then_the_viewed_enic_interruption_page_cookie_to_be_set
expect(page.driver.browser.manage.cookie_named('viewed_enic_interruption_page')[:value]).to eq('true')
end
end

0 comments on commit a030888

Please sign in to comment.