Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate the Reports page to GOV.UK Design System #2026

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 9 additions & 4 deletions app/controllers/reports_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,17 @@ def all_urls
private

def report_last_updated(report_name)
last_updated = ::Report.new(report_name).last_updated
::Report.new(report_name).last_updated
end
helper_method :report_last_updated

def report_generated_time_message(report_name)
last_updated = report_last_updated(report_name)
if last_updated
tag.span "Generated #{last_updated.to_fs(:govuk_date)}", class: "text-muted"
"Generated #{last_updated.strftime('%-l:%M%#p')}".strip
else
tag.span "Report currently unavailable", class: "text-muted"
"Report currently unavailable"
end
end
helper_method :report_last_updated
helper_method :report_generated_time_message
end
17 changes: 16 additions & 1 deletion app/views/layouts/design_system.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,22 @@

<div class="govuk-width-container">
<main class="govuk-main-wrapper" id="main-content" role="main">
<%= yield %>

<% if yield(:title).present? %>
<div class="govuk-grid-row">
<div class="govuk-grid-column-two-thirds">
<%= render "govuk_publishing_components/components/title", {
title: yield(:title),
margin_top: 0,
margin_bottom: 6,
} %>
</div>
</div>
<% end %>

<div class="govuk-grid-row">
<%= yield %>
</div>
</main>
</div>

Expand Down
117 changes: 84 additions & 33 deletions app/views/reports/index.html.erb
Original file line number Diff line number Diff line change
@@ -1,35 +1,86 @@
<div class="page-header">
<h1>CSV Reports</h1>
<p>These reports are updated every hour.</p>
</div>
<% content_for :page_title, "Reports" %>
<% content_for :title, "CSV Reports" %>

<p>
<strong><%= link_to 'All documents for departmental distribution', organisation_content_report_path(format: :csv) %></strong><br />
<%= report_last_updated("organisation_content")%>
</p>
<p>
<strong><%= link_to 'Churn in non-archived editions', edition_churn_report_path(format: :csv) %></strong><br />
<%= report_last_updated("edition_churn")%>
</p>
<p>
<strong><%= link_to 'Churn in all editions', all_edition_churn_report_path(format: :csv) %></strong><br />
<%= report_last_updated("all_edition_churn")%>
</p>
<p>
<strong><%= link_to 'Progress on all non-archived editions', progress_report_path(format: :csv) %></strong><br />
<%= report_last_updated("editorial_progress")%>
</p>
<p>
<strong><%= link_to 'Content summary and workflow history for all published editions', content_workflow_report_path(format: :csv) %></strong><br />
<%= report_last_updated("content_workflow")%>
</p>
<p>
<strong><%= link_to 'Content summary and workflow history for all editions', all_content_workflow_report_path(format: :csv) %></strong><br />
<%= report_last_updated("all_content_workflow")%>
</p>
<p>
<strong><%= link_to 'All URLs', all_urls_report_path(format: :csv) %></strong><br />
<%= report_last_updated("all_urls")%>
</p>
<div class="govuk-grid-column-two-thirds">
<%= render "govuk_publishing_components/components/lead_paragraph", {
text: "These reports are updated every hour.",
margin_bottom: 6
} %>

<% content_for :page_title, "Reports" %>
<%= render "govuk_publishing_components/components/document_list", {
margin_bottom: 6,
items: [
{
link: {
text: "All documents for departmental distribution",
path: organisation_content_report_path(format: :csv)
},
metadata: {
updated_at_time: report_generated_time_message("organisation_content"),
public_updated_at: report_last_updated("organisation_content"),
}
},
{
link: {
text: "Churn in non-archived editions",
path: edition_churn_report_path(format: :csv)
},
metadata: {
updated_at_time: report_generated_time_message("edition_churn"),
public_updated_at: report_last_updated("edition_churn"),
}
},
{
link: {
text: "Churn in all editions",
path: all_edition_churn_report_path(format: :csv)
},
metadata: {
updated_at_time: report_generated_time_message("all_edition_churn"),
public_updated_at: report_last_updated("all_edition_churn"),
}
},
{
link: {
text: "Progress on all non-archived editions",
path: progress_report_path(format: :csv)
},
metadata: {
updated_at_time: report_generated_time_message("editorial_progress"),
public_updated_at: report_last_updated("editorial_progress"),
}
},
{
link: {
text: "Content summary and workflow history for all published editions",
path: content_workflow_report_path(format: :csv)
},
metadata: {
updated_at_time: report_generated_time_message("content_workflow"),
public_updated_at: report_last_updated("content_workflow"),
}
},
{
link: {
text: "Content summary and workflow history for all editions",
path: all_content_workflow_report_path(format: :csv)
},
metadata: {
updated_at_time: report_generated_time_message("all_content_workflow"),
public_updated_at: report_last_updated("all_content_workflow"),
}
},
{
link: {
text: "All URLs",
path: all_urls_report_path(format: :csv)
},
metadata: {
updated_at_time: report_generated_time_message("all_urls"),
public_updated_at: report_last_updated("all_urls"),
}
},
]
} %>

</div>
79 changes: 60 additions & 19 deletions test/functional/reports_controller_test.rb
Original file line number Diff line number Diff line change
@@ -1,33 +1,74 @@
require "test_helper"

class ReportsControllerTest < ActionController::TestCase
setup do
login_as_stub_user
context "When reports are available" do
setup do
login_as_stub_user

last_modified = Time.zone.local(2023, 12, 12, 1, 1, 1)
last_modified = Time.zone.local(2023, 12, 12, 1, 2, 3)

Aws.config[:s3] = {
stub_responses: {
head_object: { last_modified: },
},
}
Aws.config[:s3] = {
stub_responses: {
head_object: { last_modified: },
},
}

ENV["REPORTS_S3_BUCKET_NAME"] = "example"
end
ENV["REPORTS_S3_BUCKET_NAME"] = "example"
end

teardown do
ENV["REPORTS_S3_BUCKET_NAME"] = nil
end
teardown do
ENV["REPORTS_S3_BUCKET_NAME"] = nil
end

should "redirect the user to S3 when following report links" do
%i[
progress
organisation_content
edition_churn
all_edition_churn
content_workflow
all_content_workflow
all_urls
].each do |action|
get action

assert_equal 302, response.status
end
end

test "it redirects the user to S3" do
get :progress
should "show the last updated time on the index page" do
get :index

assert_equal 302, response.status
assert_select "ul.gem-c-document-list__item-metadata" do
assert_select "li.gem-c-document-list__attribute", { count: 7, text: "Generated 1:02am" }
assert_select "li.gem-c-document-list__attribute", { count: 7, text: "12 December 2023" }
end
end
end

test "shows the last updated time on the index page" do
get :index
context "When reports are not available" do
setup do
login_as_stub_user

Aws.config[:s3] = {
stub_responses: {
head_object: "NotFound",
},
}

ENV["REPORTS_S3_BUCKET_NAME"] = "example"
end

teardown do
ENV["REPORTS_S3_BUCKET_NAME"] = nil
end

should "indicate that reports are not available on the index page" do
get :index

assert_match(/Generated 1:01am, 12 December 2023/, response.body)
assert_select "ul.gem-c-document-list__item-metadata" do
assert_select "li.gem-c-document-list__attribute", { count: 7, text: "Report currently unavailable" }
end
end
end
end
Loading