16 changed files with 526 additions and 118 deletions
@ -0,0 +1,66 @@ |
|||||||
|
.app-data-box-group { |
||||||
|
@include govuk-font($size: 19); |
||||||
|
font-weight: bold; |
||||||
|
white-space: nowrap; |
||||||
|
} |
||||||
|
|
||||||
|
@media (min-width: 54.0625em) { |
||||||
|
.app-data-box-group-one-third { |
||||||
|
display: flex; |
||||||
|
justify-content: space-between; |
||||||
|
column-gap: govuk-spacing(4); |
||||||
|
width: 100%; |
||||||
|
min-width: 733.33px; |
||||||
|
} |
||||||
|
} |
||||||
|
@media (min-width: 54.0625em) { |
||||||
|
.app-data-box-one-third { |
||||||
|
width: 33.3333%; |
||||||
|
float: left; |
||||||
|
} |
||||||
|
} |
||||||
|
@media (min-width: 54.0625em) { |
||||||
|
.app-data-box__underline { |
||||||
|
min-width: 733.33px; |
||||||
|
} |
||||||
|
} |
||||||
|
@media (min-width: 54.0625em) { |
||||||
|
.app-data-box-group-one-half { |
||||||
|
display: flex; |
||||||
|
justify-content: space-between; |
||||||
|
column-gap: govuk-spacing(4); |
||||||
|
width: 100%; |
||||||
|
min-width: 733.33px; |
||||||
|
} |
||||||
|
} |
||||||
|
@media (min-width: 54.0625em) { |
||||||
|
.app-data-box-one-half { |
||||||
|
width: 50%; |
||||||
|
float: left; |
||||||
|
} |
||||||
|
} |
||||||
|
@media (min-width: 54.0625em) { |
||||||
|
.app-data-box-one-half__underline { |
||||||
|
min-width: 733.33px; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.app-data-box__upper { |
||||||
|
@include govuk-responsive-margin(2, "bottom"); |
||||||
|
@include govuk-responsive-padding(4); |
||||||
|
|
||||||
|
background-color: govuk-colour("light-grey"); |
||||||
|
color: govuk-colour("blue"); |
||||||
|
} |
||||||
|
|
||||||
|
.app-data-box__lower { |
||||||
|
@include govuk-responsive-margin(4, "bottom"); |
||||||
|
@include govuk-responsive-padding(4); |
||||||
|
|
||||||
|
background-color: govuk-colour("blue"); |
||||||
|
} |
||||||
|
|
||||||
|
.app-data-box__count { |
||||||
|
font-size: 48px; |
||||||
|
color: govuk-colour("blue"); |
||||||
|
} |
||||||
@ -0,0 +1,71 @@ |
|||||||
|
module HomeHelper |
||||||
|
def data_count(user, type) |
||||||
|
if user.data_provider? |
||||||
|
case type |
||||||
|
when "lettings" then user.lettings_logs.in_progress.where(created_by: user).count |
||||||
|
when "sales" then user.sales_logs.in_progress.where(created_by: user).count |
||||||
|
when "misc" then user.lettings_logs.completed.where(created_by: user).count |
||||||
|
end |
||||||
|
else |
||||||
|
case type |
||||||
|
when "lettings" then user.lettings_logs.in_progress.count |
||||||
|
when "sales" then user.sales_logs.in_progress.count |
||||||
|
when "schemes" then user.schemes.incomplete.count |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
def heading_for_user_role(user) |
||||||
|
ROLE_HEADINGS[user.role] |
||||||
|
end |
||||||
|
|
||||||
|
def data_subheading(user, type) |
||||||
|
case type |
||||||
|
when "schemes" |
||||||
|
"Incomplete schemes" |
||||||
|
when "misc" |
||||||
|
"Your completed lettings" |
||||||
|
else |
||||||
|
"#{user.role == 'data_provider' ? :"Your " : nil}#{type} in progress".capitalize |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
def data_path(user, type) |
||||||
|
if user.data_provider? |
||||||
|
case type |
||||||
|
when "lettings" then lettings_logs_path(status: [:in_progress], assigned_to: "you") |
||||||
|
when "sales" then sales_logs_path(status: [:in_progress], assigned_to: "you") |
||||||
|
when "misc" then lettings_logs_path(status: [:completed], assigned_to: "you") |
||||||
|
end |
||||||
|
else |
||||||
|
case type |
||||||
|
when "lettings" then lettings_logs_path(status: [:in_progress]) |
||||||
|
when "sales" then sales_logs_path(status: [:in_progress]) |
||||||
|
when "schemes" then schemes_path(status: [:incomplete]) |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
def view_all_path(type) |
||||||
|
case type |
||||||
|
when "lettings" then clear_filters_path(filter_type: "lettings_logs") |
||||||
|
when "sales" then clear_filters_path(filter_type: "sales_logs") |
||||||
|
when "schemes" then clear_filters_path(filter_type: "schemes") |
||||||
|
when "misc" then clear_filters_path(filter_type: "schemes") |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
def view_all_text(type) |
||||||
|
if type == "misc" |
||||||
|
"View all schemes" |
||||||
|
else |
||||||
|
"View all #{type}" |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
ROLE_HEADINGS = { |
||||||
|
"data_provider" => "Complete your logs", |
||||||
|
"data_coordinator" => "Manage your data", |
||||||
|
"support" => "Manage all data", |
||||||
|
}.freeze |
||||||
|
end |
||||||
@ -0,0 +1,9 @@ |
|||||||
|
<div class="app-data-box__upper"> |
||||||
|
<div class="app-data-box__count"> |
||||||
|
<%= govuk_link_to data_count(@current_user, type), data_path(@current_user, type), class: "govuk-link--no-visited-state govuk-link--no-underline" %> |
||||||
|
</div> |
||||||
|
<%= govuk_link_to data_subheading(@current_user, type), data_path(@current_user, type), class: "govuk-link--no-visited-state" %> |
||||||
|
</div> |
||||||
|
<div class="app-data-box__lower"> |
||||||
|
<%= govuk_link_to view_all_text(type), view_all_path(type), class: "govuk-link--inverse" %> |
||||||
|
</div> |
||||||
@ -0,0 +1,35 @@ |
|||||||
|
<h1 class="govuk-heading-l">Upcoming deadlines</h1> |
||||||
|
|
||||||
|
<% current_lettings_form = FormHandler.instance.in_crossover_period? ? FormHandler.instance.previous_lettings_form : FormHandler.instance.current_lettings_form %> |
||||||
|
<% formatted_deadline = "#{current_lettings_form.submission_deadline.strftime('%A')} #{current_lettings_form.submission_deadline.to_formatted_s(:govuk_date)}" %> |
||||||
|
<% if FormHandler.instance.in_crossover_period? %> |
||||||
|
<p class="govuk-body govuk-body-m"><strong>End of year deadline - <%= formatted_deadline %>:</strong> Deadline to submit logs for tenancies starting between <%= collection_start_date(Time.zone.now).to_formatted_s(:govuk_date) %> to <%= collection_end_date(Time.zone.now).to_formatted_s(:govuk_date) %></p> |
||||||
|
<% end %> |
||||||
|
|
||||||
|
<% current_quarter = quarter_for_date(date: Time.zone.now) %> |
||||||
|
<% if current_quarter.present? %> |
||||||
|
<p class="govuk-body govuk-body-m"><strong><%= "#{current_quarter.quarter} - #{current_quarter.cutoff_date.strftime('%A')} #{current_quarter.cutoff_date.to_formatted_s(:govuk_date)}" %>:</strong> Quarterly cut off date for tenancies and sales starting between <%= current_quarter.quarter_start_date.to_formatted_s(:govuk_date) %> and <%= current_quarter.quarter_end_date.to_formatted_s(:govuk_date) %>.</p> |
||||||
|
<% end %> |
||||||
|
|
||||||
|
<% if !FormHandler.instance.in_crossover_period? %> |
||||||
|
<p class="govuk-body govuk-body-m">Try to complete your logs for each quarter by the cut-off date.</p> |
||||||
|
<p class="govuk-body govuk-body-m">You can still create logs for a previous quarter after its cut-off date, as long as you complete them by the <strong>end-of-year deadline: <%= formatted_deadline %>.</strong></p> |
||||||
|
<% end %> |
||||||
|
|
||||||
|
<% if FormHandler.instance.in_crossover_period? %> |
||||||
|
<% previous_lettings_form = FormHandler.instance.previous_lettings_form %> |
||||||
|
<p class="govuk-body govuk-body-m">Prioritise completing logs for the closing collection year. You must complete all <%= previous_lettings_form.start_date.year %> to <%= previous_lettings_form.submission_deadline.year %> logs must by the end-of-year deadline. You can still create <%= current_lettings_form.start_date.year %> to <%= current_lettings_form.submission_deadline.year %> logs for this quarter after the quarterly cut-off date.</p> |
||||||
|
<% end %> |
||||||
|
|
||||||
|
<%= govuk_details(summary_text: "Quarterly cut-off dates for 2023 to 2024") do %> |
||||||
|
<p class="govuk-body govuk-body-m">The 2023 to 2024 quarterly cut-off dates are:</p> |
||||||
|
<ul class="govuk-list govuk-list--bullet"> |
||||||
|
<li class="govuk-!-padding-bottom-4"><strong>Q1 - Friday 14 July 2023:</strong> Quarterly cut-off date for tenancies and sales starting between 1 April 2023 and 30 June 2023.</li> |
||||||
|
<li class="govuk-!-padding-bottom-4"><strong>Q2 - Friday 13 October 2023:</strong> Quarterly cut-off date for tenancies and sales starting between 1 July 2023 and 30 September 2023.</li> |
||||||
|
<li class="govuk-!-padding-bottom-4"><strong>Q3 - Friday 12 January 2024:</strong> Quarterly cut-off date for tenancies and sales starting between 1 October 2023 and 31 December 2023.</li> |
||||||
|
<li class="govuk-!-padding-bottom-4"><strong>End of year deadline - Friday 7 June 2024:</strong> Deadline for tenancies and sales starting between 1 January 2024 and 31 March 2024, plus any late submissions for the 2023 to 2024 collection year.</li> |
||||||
|
</ul> |
||||||
|
<p class="govuk-body govuk-body-m">It is important that you meet these cut-off dates because we submit data to the Office for National Statistics quarterly, helping them create essential inflation statistics.</p> |
||||||
|
<p class="govuk-body govuk-body-m">Meeting these cut-off dates also gives you more accurate data for your own analysis, and reduces the burden at the end of the year.</p> |
||||||
|
<p class="govuk-body govuk-body-m">If you are not able to meet these quarterly dates, submit your logs as soon as you can so that they can be included in the annual data.</p> |
||||||
|
<% end %> |
||||||
@ -1 +1,56 @@ |
|||||||
<p class="govuk-body-l"><%= "Welcome back, #{@current_user.name}" %></p> |
<div class="govuk-grid-row"> |
||||||
|
<div class="govuk-width-container"> |
||||||
|
<div class="govuk-grid-column-two-thirds"> |
||||||
|
<div class="govuk-grid-row govuk-!-margin-bottom-7"> |
||||||
|
<span class="govuk-body-l"><%= "Welcome back, #{@current_user.name}" %></span> |
||||||
|
<h1 class="govuk-heading-l"><%= heading_for_user_role(@current_user) %></h1> |
||||||
|
</div> |
||||||
|
<div class="govuk-grid-row"> |
||||||
|
<div class="app-data-box-group"> |
||||||
|
<% if @current_user.support? || (@current_user.data_coordinator? && @current_user.sales_logs.present?) %> |
||||||
|
<div class="app-data-box-group-one-third"> |
||||||
|
<div class="app-data-box-one-third"> |
||||||
|
<span><%= render partial: "home/data_box", locals: { type: "lettings" } %></span> |
||||||
|
</div> |
||||||
|
<div class="app-data-box-one-third"> |
||||||
|
<span><%= render partial: "home/data_box", locals: { type: "sales" } %></span> |
||||||
|
</div> |
||||||
|
<div class="app-data-box-one-third"> |
||||||
|
<span><%= render partial: "home/data_box", locals: { type: "schemes" } %></span> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<% else %> |
||||||
|
<div class="app-data-box-group-one-half"> |
||||||
|
<div class="app-data-box-one-half"> |
||||||
|
<span><%= render partial: "home/data_box", locals: { type: "lettings" } %></span> |
||||||
|
</div> |
||||||
|
<% if @current_user.data_coordinator? %> |
||||||
|
<div class="app-data-box-one-half"> |
||||||
|
<span><%= render partial: "home/data_box", locals: { type: "schemes" } %></span> |
||||||
|
</div> |
||||||
|
<% elsif @current_user.sales_logs.present? %> |
||||||
|
<div class="app-data-box-one-half"> |
||||||
|
<span><%= render partial: "home/data_box", locals: { type: "sales" } %></span> |
||||||
|
</div> |
||||||
|
<% else %> |
||||||
|
<div class="app-data-box-one-half"> |
||||||
|
<span><%= render partial: "home/data_box", locals: { type: "misc" } %></span> |
||||||
|
</div> |
||||||
|
<% end %> |
||||||
|
</div> |
||||||
|
<% end %> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="govuk-grid-row"> |
||||||
|
<div class="app-data-box__underline"> |
||||||
|
<hr class="govuk-section-break govuk-section-break--visible govuk-section-break--m"> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="govuk-grid-row"> |
||||||
|
<%= render partial: "layouts/collection_resources" %> |
||||||
|
<hr class="govuk-section-break govuk-section-break--visible govuk-section-break--m"> |
||||||
|
<%= render partial: "home/upcoming_deadlines" %> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|||||||
@ -1,94 +1,59 @@ |
|||||||
<div class="app-card"> |
<% if current_user %> |
||||||
|
<h1 class="govuk-heading-l">Collection resources</h1> |
||||||
|
<p class="govuk-body"><strong><%= govuk_link_to "Guidance for submitting social housing lettings and sales data (CORE)", guidance_path %></strong></p> |
||||||
|
<% else %> |
||||||
<h2 class="govuk-heading-m">Collection resources</h2> |
<h2 class="govuk-heading-m">Collection resources</h2> |
||||||
<p class="govuk-body-s">For lettings starting during 1 April 2023 to 31 March 2024 and sales completing during the same period, use the 2023/24 forms.</p> |
<% end %> |
||||||
|
<p class="govuk-body">Use the 2023 to 2024 forms for lettings that start and sales that complete between 1 April 2023 and 31 March 2024.</p> |
||||||
|
<%= govuk_tabs(title: "Collection resources") do |c| %> |
||||||
<% if FormHandler.instance.lettings_form_for_start_year(2023) && FormHandler.instance.lettings_form_for_start_year(2023).edit_end_date > Time.zone.today %> |
<% if FormHandler.instance.lettings_form_for_start_year(2023) && FormHandler.instance.lettings_form_for_start_year(2023).edit_end_date > Time.zone.today %> |
||||||
<h3 class="govuk-heading-s">Lettings 2023/24</h3> |
<% c.with_tab(label: "Lettings 2023/24") do %> |
||||||
<%= render DocumentListComponent.new(items: [ |
<%= render DocumentListComponent.new(items: [ |
||||||
{ |
{ |
||||||
name: "Lettings log for tenants (2023/24)", |
name: "Download the lettings log for tenants (2023 to 2024)", |
||||||
href: download_23_24_lettings_form_path, |
href: download_23_24_lettings_form_path, |
||||||
metadata: file_type_size_and_pages("2023_24_lettings_paper_form.pdf", number_of_pages: 8), |
metadata: file_type_size_and_pages("2023_24_lettings_paper_form.pdf", number_of_pages: 8), |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
name: "Lettings bulk upload template (2023/24) – New question ordering", |
name: "Download the lettings bulk upload template (2023 to 2024) – New question ordering", |
||||||
href: download_23_24_lettings_bulk_upload_template_path, |
href: download_23_24_lettings_bulk_upload_template_path, |
||||||
metadata: file_type_size_and_pages("bulk-upload-lettings-template-2023-24.xlsx"), |
metadata: file_type_size_and_pages("bulk-upload-lettings-template-2023-24.xlsx"), |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
name: "Lettings bulk upload template (2023/24)", |
name: "Download the lettings bulk upload template (2023 to 2024) – Legacy version", |
||||||
href: download_23_24_lettings_bulk_upload_legacy_template_path, |
href: download_23_24_lettings_bulk_upload_legacy_template_path, |
||||||
metadata: file_type_size_and_pages("bulk-upload-lettings-legacy-template-2023-24.xlsx"), |
metadata: file_type_size_and_pages("bulk-upload-lettings-legacy-template-2023-24.xlsx"), |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
name: "Lettings bulk upload specification (2023/24)", |
name: "Download the lettings bulk upload specification (2023 to 2024)", |
||||||
href: download_23_24_lettings_bulk_upload_specification_path, |
href: download_23_24_lettings_bulk_upload_specification_path, |
||||||
metadata: file_type_size_and_pages("bulk-upload-lettings-specification-2023-24.xlsx"), |
metadata: file_type_size_and_pages("bulk-upload-lettings-specification-2023-24.xlsx"), |
||||||
}, |
}, |
||||||
]) %> |
]) %> |
||||||
|
<% end %> |
||||||
<h3 class="govuk-heading-s">Sales 2023/24</h3> |
<% c.with_tab(label: "Sales 2023/24") do %> |
||||||
<%= render DocumentListComponent.new(items: [ |
<%= render DocumentListComponent.new(items: [ |
||||||
{ |
{ |
||||||
name: "Sales log for buyers (2023/24)", |
name: "Download the sales log for buyers (2023 to 2024)", |
||||||
href: download_23_24_sales_form_path, |
href: download_23_24_sales_form_path, |
||||||
metadata: file_type_size_and_pages("2023_24_sales_paper_form.pdf", number_of_pages: 8), |
metadata: file_type_size_and_pages("2023_24_sales_paper_form.pdf", number_of_pages: 8), |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
name: "Sales bulk upload template (2023/24) – New question ordering", |
name: "Download the sales bulk upload template (2023 to 2024) – New question ordering", |
||||||
href: download_23_24_sales_bulk_upload_template_path, |
href: download_23_24_sales_bulk_upload_template_path, |
||||||
metadata: file_type_size_and_pages("bulk-upload-sales-template-2023-24.xlsx"), |
metadata: file_type_size_and_pages("bulk-upload-sales-template-2023-24.xlsx"), |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
name: "Sales bulk upload template (2023/24)", |
name: "Download the sales bulk upload template (2023 to 2024) – Legacy version", |
||||||
href: download_23_24_sales_bulk_upload_legacy_template_path, |
href: download_23_24_sales_bulk_upload_legacy_template_path, |
||||||
metadata: file_type_size_and_pages("bulk-upload-sales-legacy-template-2023-24.xlsx"), |
metadata: file_type_size_and_pages("bulk-upload-sales-legacy-template-2023-24.xlsx"), |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
name: "Sales bulk upload specification (2023/24)", |
name: "Download the sales bulk upload specification (2023 to 2024)", |
||||||
href: download_23_24_sales_bulk_upload_specification_path, |
href: download_23_24_sales_bulk_upload_specification_path, |
||||||
metadata: file_type_size_and_pages("bulk-upload-sales-specification-2023-24.xlsx"), |
metadata: file_type_size_and_pages("bulk-upload-sales-specification-2023-24.xlsx"), |
||||||
}, |
}, |
||||||
]) %> |
]) %> |
||||||
<% end %> |
<% end %> |
||||||
|
|
||||||
<% if FormHandler.instance.lettings_form_for_start_year(2022) && FormHandler.instance.lettings_form_for_start_year(2022).edit_end_date > Time.zone.today %> |
|
||||||
<h3 class="govuk-heading-s">Lettings 2022/23</h3> |
|
||||||
<%= render DocumentListComponent.new(items: [ |
|
||||||
{ |
|
||||||
name: "Lettings log for tenants (2022/23)", |
|
||||||
href: download_22_23_lettings_form_path, |
|
||||||
metadata: file_type_size_and_pages("2022_23_lettings_paper_form.pdf", number_of_pages: 4), |
|
||||||
}, |
|
||||||
{ |
|
||||||
name: "Lettings bulk upload template (2022/23)", |
|
||||||
href: download_22_23_lettings_bulk_upload_template_path, |
|
||||||
metadata: file_type_size_and_pages("bulk-upload-lettings-template-2022-23.xlsx"), |
|
||||||
}, |
|
||||||
{ |
|
||||||
name: "Lettings bulk upload specification (2022/23)", |
|
||||||
href: download_22_23_lettings_bulk_upload_specification_path, |
|
||||||
metadata: file_type_size_and_pages("bulk-upload-lettings-specification-2022-23.xlsx"), |
|
||||||
}, |
|
||||||
]) %> |
|
||||||
|
|
||||||
<h3 class="govuk-heading-s">Sales 2022/23</h3> |
|
||||||
<%= render DocumentListComponent.new(items: [ |
|
||||||
{ |
|
||||||
name: "Sales log for buyers (2022/23)", |
|
||||||
href: download_22_23_sales_form_path, |
|
||||||
metadata: file_type_size_and_pages("2022_23_sales_paper_form.pdf", number_of_pages: 5), |
|
||||||
}, |
|
||||||
{ |
|
||||||
name: "Sales bulk upload template (2022/23)", |
|
||||||
href: download_22_23_sales_bulk_upload_template_path, |
|
||||||
metadata: file_type_size_and_pages("bulk-upload-sales-template-2022-23.xlsx"), |
|
||||||
}, |
|
||||||
{ |
|
||||||
name: "Sales bulk upload specification (2022/23)", |
|
||||||
href: download_22_23_sales_bulk_upload_specification_path, |
|
||||||
metadata: file_type_size_and_pages("bulk-upload-sales-template-2022-23.xlsx"), |
|
||||||
}, |
|
||||||
]) %> |
|
||||||
<% end %> |
<% end %> |
||||||
</div> |
<% end %> |
||||||
|
|||||||
@ -0,0 +1,158 @@ |
|||||||
|
require "rails_helper" |
||||||
|
require_relative "form/helpers" |
||||||
|
|
||||||
|
RSpec.describe "Home Page Features" do |
||||||
|
include Helpers |
||||||
|
|
||||||
|
context "when the user is a data provider" do |
||||||
|
let(:user) { FactoryBot.create(:user, name: "Provider") } |
||||||
|
|
||||||
|
before do |
||||||
|
create_list(:lettings_log, 6, :in_progress, owning_organisation: user.organisation, created_by: user) |
||||||
|
create_list(:lettings_log, 2, :in_progress, owning_organisation: user.organisation) |
||||||
|
create_list(:lettings_log, 4, :completed, owning_organisation: user.organisation, created_by: user) |
||||||
|
create_list(:lettings_log, 2, :completed) |
||||||
|
sign_in user |
||||||
|
visit("/") |
||||||
|
end |
||||||
|
|
||||||
|
it "displays the correct welcome text" do |
||||||
|
expect(page).to have_current_path("/") |
||||||
|
expect(page).to have_content("Welcome back, Provider") |
||||||
|
expect(page).to have_content("Complete your logs") |
||||||
|
end |
||||||
|
|
||||||
|
context "when their organisation has submitted sales logs" do |
||||||
|
before do |
||||||
|
create_list(:sales_log, 5, :in_progress, owning_organisation: user.organisation, created_by: user) |
||||||
|
create_list(:sales_log, 3, :completed, owning_organisation: user.organisation, created_by: user) |
||||||
|
visit("/") |
||||||
|
end |
||||||
|
|
||||||
|
it "displays correct data boxes, counts and links" do |
||||||
|
data_boxes = page.find_all(class: "app-data-box-one-half") |
||||||
|
expect(data_boxes.count).to eq(2) |
||||||
|
expect(data_boxes[0].all("a").map(&:text)).to eq(["6", "Your lettings in progress", "View all lettings"]) |
||||||
|
expect(data_boxes[0].all("a").map { |line| line["href"] }).to eq([lettings_logs_path(status: [:in_progress], assigned_to: "you"), lettings_logs_path(status: [:in_progress], assigned_to: "you"), clear_filters_path(filter_type: "lettings_logs")]) |
||||||
|
expect(data_boxes[1].all("a").map(&:text)).to eq(["5", "Your sales in progress", "View all sales"]) |
||||||
|
expect(data_boxes[1].all("a").map { |line| line["href"] }).to eq([sales_logs_path(status: [:in_progress], assigned_to: "you"), sales_logs_path(status: [:in_progress], assigned_to: "you"), clear_filters_path(filter_type: "sales_logs")]) |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
context "when their organisation has never submitted sales logs" do |
||||||
|
before do |
||||||
|
visit("/") |
||||||
|
end |
||||||
|
|
||||||
|
it "displays correct data boxes, counts and links" do |
||||||
|
data_boxes = page.find_all(class: "app-data-box-one-half") |
||||||
|
expect(data_boxes.count).to eq(2) |
||||||
|
expect(data_boxes[0].all("a").map(&:text)).to eq(["6", "Your lettings in progress", "View all lettings"]) |
||||||
|
expect(data_boxes[0].all("a").map { |line| line["href"] }).to eq([lettings_logs_path(status: [:in_progress], assigned_to: "you"), lettings_logs_path(status: [:in_progress], assigned_to: "you"), clear_filters_path(filter_type: "lettings_logs")]) |
||||||
|
expect(data_boxes[1].all("a").map(&:text)).to eq(["4", "Your completed lettings", "View all schemes"]) |
||||||
|
expect(data_boxes[1].all("a").map { |line| line["href"] }).to eq([lettings_logs_path(status: [:completed], assigned_to: "you"), lettings_logs_path(status: [:completed], assigned_to: "you"), clear_filters_path(filter_type: "schemes")]) |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
context "when the user is a data coordinator" do |
||||||
|
before do |
||||||
|
create_list(:lettings_log, 6, :in_progress, owning_organisation: user.organisation) |
||||||
|
create_list(:lettings_log, 2, :in_progress, owning_organisation: user.organisation, created_by: user) |
||||||
|
create_list(:lettings_log, 4, :completed, owning_organisation: user.organisation) |
||||||
|
create_list(:lettings_log, 2, :completed) |
||||||
|
create_list(:scheme, 1, :incomplete, owning_organisation: user.organisation) |
||||||
|
sign_in user |
||||||
|
visit("/") |
||||||
|
end |
||||||
|
|
||||||
|
let(:user) { FactoryBot.create(:user, :data_coordinator, name: "Coordinator") } |
||||||
|
|
||||||
|
it "displays the correct welcome text" do |
||||||
|
expect(page).to have_current_path("/") |
||||||
|
expect(page).to have_content("Welcome back, Coordinator") |
||||||
|
expect(page).to have_content("Manage your data") |
||||||
|
end |
||||||
|
|
||||||
|
context "when their organisation has submitted sales logs" do |
||||||
|
before do |
||||||
|
create_list(:sales_log, 5, :in_progress, owning_organisation: user.organisation) |
||||||
|
create_list(:sales_log, 3, :completed, owning_organisation: user.organisation) |
||||||
|
visit("/") |
||||||
|
end |
||||||
|
|
||||||
|
it "displays correct data boxes, counts and links" do |
||||||
|
data_boxes = page.find_all(class: "app-data-box-one-third") |
||||||
|
expect(data_boxes.count).to eq(3) |
||||||
|
expect(data_boxes[0].all("a").map(&:text)).to eq(["8", "Lettings in progress", "View all lettings"]) |
||||||
|
expect(data_boxes[0].all("a").map { |line| line["href"] }).to eq([lettings_logs_path(status: [:in_progress]), lettings_logs_path(status: [:in_progress]), clear_filters_path(filter_type: "lettings_logs")]) |
||||||
|
expect(data_boxes[1].all("a").map(&:text)).to eq(["5", "Sales in progress", "View all sales"]) |
||||||
|
expect(data_boxes[1].all("a").map { |line| line["href"] }).to eq([sales_logs_path(status: [:in_progress]), sales_logs_path(status: [:in_progress]), clear_filters_path(filter_type: "sales_logs")]) |
||||||
|
expect(data_boxes[2].all("a").map(&:text)).to eq(["1", "Incomplete schemes", "View all schemes"]) |
||||||
|
expect(data_boxes[2].all("a").map { |line| line["href"] }).to eq([schemes_path(status: [:incomplete]), schemes_path(status: [:incomplete]), clear_filters_path(filter_type: "schemes")]) |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
context "when their organisation has never submitted sales logs" do |
||||||
|
before do |
||||||
|
visit("/") |
||||||
|
end |
||||||
|
|
||||||
|
it "displays correct data boxes, counts and links" do |
||||||
|
data_boxes = page.find_all(class: "app-data-box-one-half") |
||||||
|
expect(data_boxes.count).to eq(2) |
||||||
|
expect(data_boxes[0].all("a").map(&:text)).to eq(["8", "Lettings in progress", "View all lettings"]) |
||||||
|
expect(data_boxes[0].all("a").map { |line| line["href"] }).to eq([lettings_logs_path(status: [:in_progress]), lettings_logs_path(status: [:in_progress]), clear_filters_path(filter_type: "lettings_logs")]) |
||||||
|
expect(data_boxes[1].all("a").map(&:text)).to eq(["1", "Incomplete schemes", "View all schemes"]) |
||||||
|
expect(data_boxes[1].all("a").map { |line| line["href"] }).to eq([schemes_path(status: [:incomplete]), schemes_path(status: [:incomplete]), clear_filters_path(filter_type: "schemes")]) |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
context "when the user is a support user" do |
||||||
|
let(:support_user) { FactoryBot.create(:user, :support, name: "Support") } |
||||||
|
let(:notify_client) { instance_double(Notifications::Client) } |
||||||
|
let(:confirmation_token) { "MCDH5y6Km-U7CFPgAMVS" } |
||||||
|
let(:devise_notify_mailer) { DeviseNotifyMailer.new } |
||||||
|
let(:otp) { "999111" } |
||||||
|
|
||||||
|
before do |
||||||
|
create_list(:lettings_log, 2, :in_progress) |
||||||
|
create_list(:lettings_log, 1, :completed) |
||||||
|
create_list(:sales_log, 3, :in_progress) |
||||||
|
create_list(:sales_log, 1, :completed) |
||||||
|
create_list(:scheme, 1, :incomplete) |
||||||
|
completed_scheme = create(:scheme) |
||||||
|
create(:location, scheme: completed_scheme) |
||||||
|
allow(DeviseNotifyMailer).to receive(:new).and_return(devise_notify_mailer) |
||||||
|
allow(devise_notify_mailer).to receive(:notify_client).and_return(notify_client) |
||||||
|
allow(Devise).to receive(:friendly_token).and_return(confirmation_token) |
||||||
|
allow(notify_client).to receive(:send_email).and_return(true) |
||||||
|
allow(SecureRandom).to receive(:random_number).and_return(otp) |
||||||
|
visit("/lettings-logs") |
||||||
|
fill_in("user[email]", with: support_user.email) |
||||||
|
fill_in("user[password]", with: support_user.password) |
||||||
|
click_button("Sign in") |
||||||
|
fill_in("code", with: otp) |
||||||
|
click_button("Submit") |
||||||
|
visit("/") |
||||||
|
end |
||||||
|
|
||||||
|
it "displays the correct welcome text" do |
||||||
|
expect(page).to have_current_path("/") |
||||||
|
expect(page).to have_content("Welcome back, Support") |
||||||
|
expect(page).to have_content("Manage all data") |
||||||
|
end |
||||||
|
|
||||||
|
it "displays correct data boxes, counts and links" do |
||||||
|
data_boxes = page.find_all(class: "app-data-box-one-third") |
||||||
|
expect(data_boxes.count).to eq(3) |
||||||
|
expect(data_boxes[0].all("a").map(&:text)).to eq(["2", "Lettings in progress", "View all lettings"]) |
||||||
|
expect(data_boxes[0].all("a").map { |line| line["href"] }).to eq([lettings_logs_path(status: [:in_progress]), lettings_logs_path(status: [:in_progress]), clear_filters_path(filter_type: "lettings_logs")]) |
||||||
|
expect(data_boxes[1].all("a").map(&:text)).to eq(["3", "Sales in progress", "View all sales"]) |
||||||
|
expect(data_boxes[1].all("a").map { |line| line["href"] }).to eq([sales_logs_path(status: [:in_progress]), sales_logs_path(status: [:in_progress]), clear_filters_path(filter_type: "sales_logs")]) |
||||||
|
expect(data_boxes[2].all("a").map(&:text)).to eq(["1", "Incomplete schemes", "View all schemes"]) |
||||||
|
expect(data_boxes[2].all("a").map { |line| line["href"] }).to eq([schemes_path(status: [:incomplete]), schemes_path(status: [:incomplete]), clear_filters_path(filter_type: "schemes")]) |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
Loading…
Reference in new issue