71 lines
2.2 KiB
Ruby
71 lines
2.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "spec_helper"
|
|
|
|
describe QuestionsController do
|
|
include LoginMacros
|
|
include RedirectExpectationHelper
|
|
|
|
fully_authorized_roles = %w[superadmin docs support]
|
|
|
|
shared_examples "an action only fully authorized admins can access" do
|
|
before { fake_login_admin(admin) }
|
|
|
|
context "with no role" do
|
|
let(:admin) { create(:admin, roles: []) }
|
|
|
|
it "redirects with an error" do
|
|
subject
|
|
it_redirects_to_with_error(root_url, "Sorry, only an authorized admin can access the page you were trying to reach.")
|
|
end
|
|
end
|
|
|
|
(Admin::VALID_ROLES - fully_authorized_roles).each do |role|
|
|
context "with role #{role}" do
|
|
let(:admin) { create(:admin, roles: [role]) }
|
|
|
|
it "redirects with an error" do
|
|
subject
|
|
it_redirects_to_with_error(root_url, "Sorry, only an authorized admin can access the page you were trying to reach.")
|
|
end
|
|
end
|
|
end
|
|
|
|
fully_authorized_roles.each do |role|
|
|
context "with role #{role}" do
|
|
let(:admin) { create(:admin, roles: [role]) }
|
|
|
|
it "succeeds" do
|
|
subject
|
|
success
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "GET #manage" do
|
|
let(:faq) { create(:archive_faq) }
|
|
subject { get :manage, params: { archive_faq_id: faq } }
|
|
let(:success) do
|
|
expect(response).to render_template(:manage)
|
|
end
|
|
|
|
it_behaves_like "an action only fully authorized admins can access"
|
|
end
|
|
|
|
describe "POST #update_positions" do
|
|
let(:faq) { create(:archive_faq) }
|
|
let!(:question1) { create(:question, archive_faq: faq, position: 1) }
|
|
let!(:question2) { create(:question, archive_faq: faq, position: 2) }
|
|
let!(:question3) { create(:question, archive_faq: faq, position: 3) }
|
|
subject { post :update_positions, params: { archive_faq_id: faq, questions: [3, 1, 2] } }
|
|
let(:success) do
|
|
expect(question1.reload.position).to eq(3)
|
|
expect(question2.reload.position).to eq(1)
|
|
expect(question3.reload.position).to eq(2)
|
|
it_redirects_to_with_notice(faq, "Question order has been successfully updated.")
|
|
end
|
|
|
|
it_behaves_like "an action only fully authorized admins can access"
|
|
end
|
|
end
|