From 8e67c805f079061835b3b4f443be876d4e4e4894 Mon Sep 17 00:00:00 2001
From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com>
Date: Tue, 26 Jul 2022 15:39:00 +0100
Subject: [PATCH] Cldc 1392 schemes list (#784)
* shows incomplete tag if the scheme is not confirmed
* displays a link to check answers page if the scheme is incomplete
* return schemes with no location when searching
* update tests
* lint
---
app/helpers/tab_nav_helper.rb | 3 ++-
app/models/scheme.rb | 2 +-
app/views/schemes/_scheme_list.html.erb | 2 +-
spec/features/schemes_spec.rb | 8 ++++++++
spec/requests/schemes_controller_spec.rb | 22 ++++++++++++++++++++++
5 files changed, 34 insertions(+), 3 deletions(-)
diff --git a/app/helpers/tab_nav_helper.rb b/app/helpers/tab_nav_helper.rb
index 1f6db638e..6e482b7ff 100644
--- a/app/helpers/tab_nav_helper.rb
+++ b/app/helpers/tab_nav_helper.rb
@@ -13,7 +13,8 @@ module TabNavHelper
def scheme_cell(scheme)
link_text = scheme.service_name
- [govuk_link_to(link_text, scheme), "Scheme #{scheme.primary_client_group}"].join("\n")
+ link = scheme.confirmed? ? scheme : scheme_check_answers_path(scheme)
+ [govuk_link_to(link_text, link), "Scheme #{scheme.primary_client_group}"].join("\n")
end
def org_cell(user)
diff --git a/app/models/scheme.rb b/app/models/scheme.rb
index accc4f17c..5ac48b310 100644
--- a/app/models/scheme.rb
+++ b/app/models/scheme.rb
@@ -6,7 +6,7 @@ class Scheme < ApplicationRecord
scope :filter_by_id, ->(id) { where(id: (id.start_with?("S") ? id[1..] : id)) }
scope :search_by_service_name, ->(name) { where("service_name ILIKE ?", "%#{name}%") }
- scope :search_by_postcode, ->(postcode) { joins(:locations).where("locations.postcode ILIKE ?", "%#{postcode.delete(' ')}%") }
+ scope :search_by_postcode, ->(postcode) { joins("LEFT JOIN locations ON locations.scheme_id = schemes.id").where("locations.postcode ILIKE ?", "%#{postcode.delete(' ')}%") }
scope :search_by, ->(param) { search_by_postcode(param).or(search_by_service_name(param)).or(filter_by_id(param)).distinct }
validate :validate_confirmed
diff --git a/app/views/schemes/_scheme_list.html.erb b/app/views/schemes/_scheme_list.html.erb
index c0a640103..976622ce0 100644
--- a/app/views/schemes/_scheme_list.html.erb
+++ b/app/views/schemes/_scheme_list.html.erb
@@ -29,7 +29,7 @@
<% row.cell(text: simple_format(scheme_cell(scheme), { class: "govuk-!-font-weight-bold" }, wrapper_tag: "div")) %>
<% row.cell(text: scheme.locations&.count) %>
<% row.cell(text: scheme.managing_organisation&.name) %>
- <% row.cell(text: scheme.created_at.to_formatted_s(:govuk_date)) %>
+ <% row.cell(text: scheme.confirmed? ? scheme.created_at.to_formatted_s(:govuk_date) : govuk_tag(colour: "grey", text: "Incomplete")) %>
<% end %>
<% end %>
<% end %>
diff --git a/spec/features/schemes_spec.rb b/spec/features/schemes_spec.rb
index b0ab10d18..2cece714f 100644
--- a/spec/features/schemes_spec.rb
+++ b/spec/features/schemes_spec.rb
@@ -119,6 +119,14 @@ RSpec.describe "Schemes scheme Features" do
expect(page).to have_content(scheme_to_search.id_to_display)
end
+ it "returns results with no location" do
+ scheme_without_location = FactoryBot.create(:scheme)
+ visit "/schemes"
+ fill_in("search", with: scheme_without_location.id_to_display)
+ click_button("Search")
+ expect(page).to have_content(scheme_without_location.id_to_display)
+ end
+
it "allows clearing the search results" do
fill_in("search", with: scheme_to_search.id_to_display)
click_button("Search")
diff --git a/spec/requests/schemes_controller_spec.rb b/spec/requests/schemes_controller_spec.rb
index 1b5a187fd..8549d79f0 100644
--- a/spec/requests/schemes_controller_spec.rb
+++ b/spec/requests/schemes_controller_spec.rb
@@ -68,6 +68,19 @@ RSpec.describe SchemesController, type: :request do
end
end
+ it "shows incomplete tag if the scheme is not confirmed" do
+ schemes[0].update!(confirmed: nil)
+ get "/schemes"
+ assert_select ".govuk-tag", text: /Incomplete/, count: 1
+ end
+
+ it "displays a link to check answers page if the scheme is incomplete" do
+ scheme = schemes[0]
+ scheme.update!(confirmed: nil)
+ get "/schemes"
+ expect(page).to have_link(nil, href: /schemes\/#{scheme.id}\/check-answers/)
+ end
+
it "shows a search bar" do
expect(page).to have_field("search", type: "search")
end
@@ -166,6 +179,15 @@ RSpec.describe SchemesController, type: :request do
end
end
+ it "returns results with no location" do
+ scheme_without_location = FactoryBot.create(:scheme)
+ get "/schemes?search=#{scheme_without_location.id}"
+ expect(page).to have_content(scheme_without_location.id_to_display)
+ schemes.each do |scheme|
+ expect(page).not_to have_content(scheme.id_to_display)
+ end
+ end
+
it "updates the table caption" do
expect(page).to have_content("1 scheme found matching ‘#{search_param}’")
end