diff --git a/app/views/wizards/claims/request_clawback_wizard/_check_your_answers_step.html.erb b/app/views/wizards/claims/request_clawback_wizard/_check_your_answers_step.html.erb index 91510e3ad..c32f6f38c 100644 --- a/app/views/wizards/claims/request_clawback_wizard/_check_your_answers_step.html.erb +++ b/app/views/wizards/claims/request_clawback_wizard/_check_your_answers_step.html.erb @@ -7,6 +7,7 @@

<%= t(".title") %>

+

<%= t(".total_title") %>

<%= govuk_summary_list(html_attributes: { id: "clawback-totals" }) do |summary_list| %> <% summary_list.with_row do |row| %> <% row.with_key(text: t(".number_of_hours")) %> diff --git a/app/views/wizards/claims/request_clawback_wizard/_mentor_training_clawback_step.html.erb b/app/views/wizards/claims/request_clawback_wizard/_mentor_training_clawback_step.html.erb index 64a1543f1..5955848fd 100644 --- a/app/views/wizards/claims/request_clawback_wizard/_mentor_training_clawback_step.html.erb +++ b/app/views/wizards/claims/request_clawback_wizard/_mentor_training_clawback_step.html.erb @@ -20,7 +20,7 @@ <%= f.govuk_text_field :number_of_hours, width: 2, label: { text: t(".hours"), size: "s" }, - hint: { text: t(".hours_hint") } %> + hint: { text: t(".hours_hint", hours_completed: current_step.mentor_training.hours_completed) } %>
diff --git a/app/wizards/claims/request_clawback_wizard/check_your_answers_step.rb b/app/wizards/claims/request_clawback_wizard/check_your_answers_step.rb index ba5f7f29c..c2e85be2b 100644 --- a/app/wizards/claims/request_clawback_wizard/check_your_answers_step.rb +++ b/app/wizards/claims/request_clawback_wizard/check_your_answers_step.rb @@ -8,7 +8,7 @@ def mentor_training_clawback_data(mentor_training) end def mentor_training_clawback_hours(mentor_training) - mentor_training_clawback_data(mentor_training).number_of_hours + mentor_training_clawback_data(mentor_training).number_of_hours.to_i end def mentor_training_clawback_amount(mentor_training) diff --git a/app/wizards/claims/request_clawback_wizard/mentor_training_clawback_step.rb b/app/wizards/claims/request_clawback_wizard/mentor_training_clawback_step.rb index a204253d9..d859cd403 100644 --- a/app/wizards/claims/request_clawback_wizard/mentor_training_clawback_step.rb +++ b/app/wizards/claims/request_clawback_wizard/mentor_training_clawback_step.rb @@ -1,10 +1,10 @@ class Claims::RequestClawbackWizard::MentorTrainingClawbackStep < BaseStep attribute :mentor_training_id - attribute :number_of_hours, :integer + attribute :number_of_hours attribute :reason_for_clawback validates :mentor_training_id, presence: true - validates :number_of_hours, presence: true, numericality: { only_integer: true, less_than_or_equal_to: 20 } + validates :number_of_hours, presence: true, numericality: { only_integer: true, less_than_or_equal_to: proc { |step| step.mentor_training.hours_completed } } validates :reason_for_clawback, presence: true delegate :mentor_trainings, to: :wizard diff --git a/config/locales/en/wizards/claims/request_clawback_wizard.yml b/config/locales/en/wizards/claims/request_clawback_wizard.yml index 711cc009b..5a5f92b91 100644 --- a/config/locales/en/wizards/claims/request_clawback_wizard.yml +++ b/config/locales/en/wizards/claims/request_clawback_wizard.yml @@ -6,7 +6,7 @@ en: page_title: Clawback details for %{mentor_name} - %{school_name} - Claim %{reference} title: Clawback details for %{mentor_name} hours: Number of hours to clawback - hours_hint: Enter whole numbers up to a maximum of 20 hours + hours_hint: Enter whole numbers up to a maximum of %{hours_completed} hours reason: Notes on your decision reason_hint: Only include details related to %{mentor_name} continue: Continue @@ -16,6 +16,7 @@ en: check_your_answers_step: page_title: Check your answers - %{school_name} - Claim %{reference} title: Check your answers + total_title: Total clawback mentor_training_title: Clawback request for %{mentor_name} rate: Hourly rate number_of_hours: Number of hours diff --git a/spec/system/claims/support/claims/clawbacks/support_user_requests_a_clawback_spec.rb b/spec/system/claims/support/claims/clawbacks/support_user_requests_a_clawback_spec.rb index 53a5a6407..ce74c4a8c 100644 --- a/spec/system/claims/support/claims/clawbacks/support_user_requests_a_clawback_spec.rb +++ b/spec/system/claims/support/claims/clawbacks/support_user_requests_a_clawback_spec.rb @@ -54,8 +54,12 @@ def given_claims_exist @john_doe = create(:claims_mentor, first_name: "John", last_name: "Doe") @jane_smith = create(:claims_mentor, first_name: "Jane", last_name: "Smith") - @john_doe_training = create(:mentor_training, claim: @claim_one, mentor: @john_doe, not_assured: true, reason_not_assured: "Mismatch in hours recorded compared with hours claimed.") - @jane_smith_training = create(:mentor_training, claim: @claim_one, mentor: @jane_smith, not_assured: true, reason_not_assured: "Mismatch in hours recorded compared with hours claimed.") + @john_doe_training = create(:mentor_training, claim: @claim_one, mentor: @john_doe, + hours_completed: 20, not_assured: true, + reason_not_assured: "Mismatch in hours recorded compared with hours claimed.") + @jane_smith_training = create(:mentor_training, claim: @claim_one, mentor: @jane_smith, + hours_completed: 20, not_assured: true, + reason_not_assured: "Mismatch in hours recorded compared with hours claimed.") end def and_i_am_signed_in diff --git a/spec/wizards/claims/request_clawback_wizard/mentor_training_clawback_step_spec.rb b/spec/wizards/claims/request_clawback_wizard/mentor_training_clawback_step_spec.rb index a1a8d65b2..a40f1ee59 100644 --- a/spec/wizards/claims/request_clawback_wizard/mentor_training_clawback_step_spec.rb +++ b/spec/wizards/claims/request_clawback_wizard/mentor_training_clawback_step_spec.rb @@ -19,9 +19,29 @@ end describe "validations" do + let(:mentor_training) { create(:mentor_training, claim:, hours_completed: 3, not_assured: true, reason_not_assured: "reason") } + it { is_expected.to validate_presence_of(:mentor_training_id) } it { is_expected.to validate_presence_of(:number_of_hours) } it { is_expected.to validate_presence_of(:reason_for_clawback) } + + context "when the number of hours is greater than the hours completed" do + let(:attributes) { { mentor_training_id: mentor_training.id, number_of_hours: 4, reason_for_clawback: "reason" } } + + it { is_expected.not_to be_valid } + end + + context "when the number of hours is less than the hours completed" do + let(:attributes) { { mentor_training_id: mentor_training.id, number_of_hours: 1, reason_for_clawback: "reason" } } + + it { is_expected.to be_valid } + end + + context "when the number of hours is equal to the hours completed" do + let(:attributes) { { mentor_training_id: mentor_training.id, number_of_hours: 3, reason_for_clawback: "reason" } } + + it { is_expected.to be_valid } + end end describe "delegations" do diff --git a/spec/wizards/claims/request_clawback_wizard_spec.rb b/spec/wizards/claims/request_clawback_wizard_spec.rb index 5b4af6bf9..f54522228 100644 --- a/spec/wizards/claims/request_clawback_wizard_spec.rb +++ b/spec/wizards/claims/request_clawback_wizard_spec.rb @@ -10,7 +10,7 @@ let(:params_data) { {} } let(:params) { ActionController::Parameters.new(params_data) } let(:claim) { create(:claim, status: "sampling_in_progress") } - let!(:mentor_training) { create(:mentor_training, claim:, not_assured: true, reason_not_assured: "reason") } + let!(:mentor_training) { create(:mentor_training, claim:, not_assured: true, reason_not_assured: "reason", hours_completed: 20) } before do allow(claim).to receive(:save!).and_return(true)