From 048885c4dac26c1177c61262b79c91c5b5dcd18c Mon Sep 17 00:00:00 2001 From: Thomas Leese <thomas@leese.io> Date: Tue, 16 Jul 2024 09:47:11 +0100 Subject: [PATCH] Show all suitability records This adds the ability to show all the suitability records, including pagination. --- .../suitability_records_controller.rb | 9 +++++ app/models/suitability_record.rb | 8 +++++ .../suitability_records/index.html.erb | 34 +++++++++++++++++++ .../assessor_interface/suitability_records.rb | 5 +++ .../assessor_interface/suitability_spec.rb | 18 +++++++++- 5 files changed, 73 insertions(+), 1 deletion(-) diff --git a/app/controllers/assessor_interface/suitability_records_controller.rb b/app/controllers/assessor_interface/suitability_records_controller.rb index a3db51c28..407c9e84a 100644 --- a/app/controllers/assessor_interface/suitability_records_controller.rb +++ b/app/controllers/assessor_interface/suitability_records_controller.rb @@ -2,8 +2,17 @@ module AssessorInterface class SuitabilityRecordsController < BaseController + include Pagy::Backend + def index authorize %i[assessor_interface suitability_record] + + @pagy, @records = + pagy( + SuitabilityRecord.includes(:names, :emails, :application_forms).order( + "suitability_record_names.value": :asc, + ), + ) end end end diff --git a/app/models/suitability_record.rb b/app/models/suitability_record.rb index b8bbc3bbe..20322dba0 100644 --- a/app/models/suitability_record.rb +++ b/app/models/suitability_record.rb @@ -32,6 +32,14 @@ class SuitabilityRecord < ApplicationRecord validates :note, presence: true validates :archive_note, presence: true, if: :archived? + def name + names.min.value + end + + def status + archived? ? "archived" : "status" + end + def archived? archived_at.present? end diff --git a/app/views/assessor_interface/suitability_records/index.html.erb b/app/views/assessor_interface/suitability_records/index.html.erb index 124f9c9cd..f3b493174 100644 --- a/app/views/assessor_interface/suitability_records/index.html.erb +++ b/app/views/assessor_interface/suitability_records/index.html.erb @@ -3,3 +3,37 @@ <% content_for :page_title, title %> <h1 class="govuk-heading-xl"><%= title %></h1> + +<% @records.each_with_index do |suitability_record, index| %> + <% unless index.zero? %> + <hr class="govuk-section-break govuk-section-break--m govuk-section-break--visible" /> + <% end %> + + <article> + <h2 class="govuk-heading-m"><%= suitability_record.name %></h2> + + <%= govuk_summary_list(actions: false) do |summary_list| + summary_list.with_row do |row| + row.with_key { "Date added" } + row.with_value { suitability_record.created_at.to_fs } + end + + summary_list.with_row do |row| + row.with_key { "Date last updated" } + row.with_value { suitability_record.updated_at.to_fs } + end + + summary_list.with_row do |row| + row.with_key { "Country trained in" } + row.with_value { CountryName.from_code(suitability_record.country_code) } + end + + summary_list.with_row do |row| + row.with_key { "Suitability status" } + row.with_value { render StatusTag::Component.new(suitability_record.status) } + end + end %> + </article> +<% end %> + +<%= govuk_pagination(pagy: @pagy) %> diff --git a/spec/support/autoload/page_objects/assessor_interface/suitability_records.rb b/spec/support/autoload/page_objects/assessor_interface/suitability_records.rb index 4f7754ab4..2a28bc175 100644 --- a/spec/support/autoload/page_objects/assessor_interface/suitability_records.rb +++ b/spec/support/autoload/page_objects/assessor_interface/suitability_records.rb @@ -6,6 +6,11 @@ class SuitabilityRecords < SitePrism::Page set_url "/assessor/suitability-records" element :heading, "h1" + + sections :records, "article" do + element :heading, "h2" + element :summary_list, GovukSummaryList, ".govuk-summary-list" + end end end end diff --git a/spec/system/assessor_interface/suitability_spec.rb b/spec/system/assessor_interface/suitability_spec.rb index 88501033d..2c704f69b 100644 --- a/spec/system/assessor_interface/suitability_spec.rb +++ b/spec/system/assessor_interface/suitability_spec.rb @@ -6,13 +6,20 @@ before { given_suitability_is_enabled } after { given_suitability_is_disabled } - it "add suitability records" do + it "view suitability records" do given_i_am_authorized_as_a_user(assessor) + given_a_record_exists when_i_visit_the(:assessor_suitability_records_page) then_i_see_the_suitability_records end + it "add suitability records" do + given_i_am_authorized_as_a_user(assessor) + + when_i_visit_the(:assessor_suitability_records_page) + end + def given_suitability_is_enabled FeatureFlags::FeatureFlag.deactivate(:suitability) end @@ -21,8 +28,17 @@ def given_suitability_is_disabled FeatureFlags::FeatureFlag.deactivate(:suitability) end + def given_a_record_exists + suitability_record = create(:suitability_record) + create(:suitability_record_name, suitability_record:, value: "John Smith") + end + def then_i_see_the_suitability_records expect(assessor_suitability_records_page.heading).to be_visible + expect(assessor_suitability_records_page.records.size).to eq(1) + expect(assessor_suitability_records_page.records.first.heading.text).to eq( + "John Smith", + ) end def assessor