diff --git a/app/controllers/notifications_controller.rb b/app/controllers/notifications_controller.rb
index 6691d472c..d74bbe999 100644
--- a/app/controllers/notifications_controller.rb
+++ b/app/controllers/notifications_controller.rb
@@ -62,6 +62,22 @@ class NotificationsController < ApplicationController
end
end
+ def delete_confirmation
+ @notification = Notification.find_by(id: params[:notification_id])
+ render_not_found and return unless @notification
+
+ render "notifications/delete_confirmation"
+ end
+
+ def delete
+ @notification = Notification.find_by(id: params[:notification_id])
+ render_not_found and return unless @notification
+
+ @notification.update!(end_date: Time.zone.now)
+ flash[:notice] = "The notification has been deleted"
+ redirect_to root_path
+ end
+
private
def notification_params
diff --git a/app/helpers/notifications_helper.rb b/app/helpers/notifications_helper.rb
index 67206001c..f59d836ab 100644
--- a/app/helpers/notifications_helper.rb
+++ b/app/helpers/notifications_helper.rb
@@ -35,6 +35,13 @@ module NotificationsHelper
render_normal_markdown(content)
end
+ def render_for_home(notification)
+ return render_normal_markdown(notification.title) unless notification.show_additional_page
+
+ content = "#{notification.title} \n[#{notification.link_text}](#{notification_path(notification)})"
+ render_normal_markdown(content)
+ end
+
private
def render_normal_markdown(content)
diff --git a/app/views/home/index.html.erb b/app/views/home/index.html.erb
index bb4792e68..6ff6c2ccc 100644
--- a/app/views/home/index.html.erb
+++ b/app/views/home/index.html.erb
@@ -7,9 +7,7 @@
<% if @current_user.support? %>
-
- <%= govuk_button_link_to "Create a new notification", new_notification_path %>
-
+ <%= render partial: "notifications/notification_home_section" %>
<% end %>
diff --git a/app/views/notifications/_notification_home_section.html.erb b/app/views/notifications/_notification_home_section.html.erb
new file mode 100644
index 000000000..723107b7f
--- /dev/null
+++ b/app/views/notifications/_notification_home_section.html.erb
@@ -0,0 +1,17 @@
+
+
<%== I18n.t("active_notifications", count: Notification.active.count) %>
+ <% Notification.active.each do |notification| %>
+
+
+ <%== render_for_home(notification) %>
+
+
+ <%= govuk_link_to("Delete notification", notification_delete_confirmation_path(notification)) %>
+
+
+ <% end %>
+
+
+
+ <%= govuk_button_link_to "Create a new notification", new_notification_path %>
+
diff --git a/app/views/notifications/delete_confirmation.html.erb b/app/views/notifications/delete_confirmation.html.erb
new file mode 100644
index 000000000..60d7c49b4
--- /dev/null
+++ b/app/views/notifications/delete_confirmation.html.erb
@@ -0,0 +1,27 @@
+<% content_for :before_content do %>
+ <% content_for :title, "Are you sure you want to delete this notification?" %>
+ <%= govuk_back_link(href: :back) %>
+<% end %>
+
+
+
+
+ <%= content_for(:title) %>
+
+
+
<%== render_for_summary("**Notification:** #{@notification.title}") %>
+
+
Users will no longer see this notification.
+
+ <%= govuk_warning_text(text: "You will not be able to undo this action.") %>
+
+
+ <%= govuk_button_to(
+ "Delete notification",
+ notification_delete_path(@notification),
+ method: :delete,
+ ) %>
+ <%= govuk_button_link_to "Cancel", root_path, html: { method: :get }, secondary: true %>
+
+
+
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 89c7152f2..66d7d2531 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -41,6 +41,11 @@ en:
create_password: "Create a password to finish setting up your account"
reset_password: "Reset your password"
+ active_notifications:
+ zero: "There are no active notifications"
+ one: "There is one active notification:"
+ other: "There are %{count} active notifications:"
+
activemodel:
errors:
models:
diff --git a/config/routes.rb b/config/routes.rb
index 507a8da2a..73a7239ca 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -141,6 +141,8 @@ Rails.application.routes.draw do
resources :notifications do
get "dismiss", to: "notifications#dismiss"
get "check-answers", to: "notifications#check_answers"
+ get "delete-confirmation", to: "notifications#delete_confirmation"
+ delete "delete", to: "notifications#delete"
end
resources :organisations do
diff --git a/spec/requests/notifications_controller_spec.rb b/spec/requests/notifications_controller_spec.rb
index 9a5284582..0982057ab 100644
--- a/spec/requests/notifications_controller_spec.rb
+++ b/spec/requests/notifications_controller_spec.rb
@@ -101,6 +101,17 @@ RSpec.describe NotificationsController, type: :request do
end
end
end
+
+ describe "#delete" do
+ let(:notification) { create(:notification, end_date: nil) }
+ let(:request) { delete notification_delete_path(notification) }
+
+ it "sets end_date on the notification" do
+ request
+ notification.reload
+ expect(notification.end_date).to be < Time.zone.now
+ end
+ end
end
context "when user is signed in as a non-support user" do
@@ -125,12 +136,28 @@ RSpec.describe NotificationsController, type: :request do
describe "#update" do
let(:notification) { create(:notification) }
- let(:request) { patch notification_path(notification), params: { "notification": { title: "Test Create" } } }
+ let(:request) { patch notification_path(notification), params: { "notification": { title: "Test Update" } } }
it "returns not found" do
request
expect(response).to have_http_status(:not_found)
end
end
+
+ describe "#delete" do
+ let(:notification) { create(:notification, end_date: nil) }
+ let(:request) { delete notification_delete_path(notification) }
+
+ it "returns not found" do
+ request
+ expect(response).to have_http_status(:not_found)
+ end
+
+ it "does not set end_date on the notification" do
+ request
+ notification.reload
+ expect(notification.end_date).to be_nil
+ end
+ end
end
end