Submit social housing lettings and sales data (CORE)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

164 lines
5.5 KiB

require "rails_helper"
RSpec.describe NotificationsController, type: :request do
context "when user is signed in as a support user" do
let(:support_user) { create(:user, :support) }
before do
allow(support_user).to receive(:need_two_factor_authentication?).and_return(false)
sign_in support_user
end
describe "#create" do
let(:request) { post notifications_path, params: params }
context "with valid parameters" do
let(:params) { { "notification": { title: "Test Create", show_on_unauthenticated_pages: "1", show_additional_page: "1", link_text: "link", page_content: "page" } } }
it "creates a new notification with no start date set" do
request
notification = Notification.find_by(title: "Test Create")
expect(notification.show_on_unauthenticated_pages).to be(true)
expect(notification.show_additional_page).to be(true)
expect(notification.link_text).to eq("link")
expect(notification.page_content).to eq("page")
expect(notification.start_date).to be_nil
end
it "redirects to check answers page" do
request
notification = Notification.find_by(title: "Test Create")
expect(response).to redirect_to(notification_check_answers_path(notification))
end
end
context "with invalid parameters" do
let(:params) { { "notification": { title: "", show_on_unauthenticated_pages: "1" } } }
it "gives an error response" do
request
expect(response).to have_http_status(:unprocessable_entity)
end
end
context "when show additional page is false" do
let(:params) { { "notification": { title: "No Additional Page", show_on_unauthenticated_pages: "1", show_additional_page: "0", link_text: "text", page_content: "content" } } }
it "ignores values for link_text and page_content" do
request
notification = Notification.find_by(title: "No Additional Page")
expect(notification.link_text).to be_nil
expect(notification.page_content).to be_nil
end
end
end
describe "#update" do
let(:notification) { create(:notification, title: "Initial Title", start_date: nil, end_date: nil) }
let(:request) { patch notification_path(notification), params: params }
context "when start_now is set to true" do
let(:params) { { "notification": { start_now: true } } }
it "sets the start date on the notification" do
request
notification.reload
expect(notification.start_date).not_to be_nil
expect(notification.start_date).to be < Time.zone.now
end
it "redirects to the home page" do
request
expect(response).to redirect_to(root_path)
end
end
context "when start_now is not set" do
let(:params) { { "notification": { title: "Updated Title", show_on_unauthenticated_pages: "1" } } }
it "sets the relevant values on the notification" do
request
notification.reload
expect(notification.title).to eql("Updated Title")
expect(notification.start_date).to be_nil
end
it "redirects to check answers" do
request
expect(response).to redirect_to(notification_check_answers_path(notification))
end
end
context "when show additional page is false" do
let(:notification) { create(:notification, show_additional_page: "0", link_text: "link", page_content: "page") }
let(:params) { { "notification": { show_additional_page: "0", link_text: "text", page_content: "content" } } }
it "removes values for link_text and page_content" do
request
notification.reload
expect(notification.link_text).to be_nil
expect(notification.page_content).to be_nil
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
let(:user) { create(:user, :data_coordinator) }
before do
sign_in user
end
describe "#create" do
let(:request) { post notifications_path, params: { "notification": { title: "Test Create" } } }
it "returns not found" do
request
expect(response).to have_http_status(:not_found)
end
it "does not create a notification" do
expect { request }.not_to change(Notification, :count)
end
end
describe "#update" do
let(:notification) { create(:notification) }
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