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
164 lines
5.5 KiB
3 months ago
|
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
|