350 lines
13 KiB
Ruby
350 lines
13 KiB
Ruby
require "spec_helper"
|
|
|
|
describe AdminPostsController do
|
|
include LoginMacros
|
|
include RedirectExpectationHelper
|
|
|
|
describe "GET #index" do
|
|
context "when filtering by language" do
|
|
let(:translated_post1) { create(:admin_post, tag_list: "xylophone,aardvark") }
|
|
let!(:translation_post1) { create(:admin_post, translated_post_id: translated_post1.id, language: create(:language, short: "fr")) }
|
|
let(:translated_post2) { create(:admin_post, tag_list: "xylophone,aardvark") }
|
|
let!(:translation_post2) { create(:admin_post, translated_post_id: translated_post2.id, language: translation_post1.language) }
|
|
let!(:untranslated_post) { create(:admin_post, tag_list: "uncommon tag") }
|
|
|
|
it "assigns the admin post tags for the language ordered by name" do
|
|
get :index, params: { language_id: "fr" }
|
|
|
|
expect(assigns[:tags].map(&:name).join(", ")).to eql("aardvark, xylophone")
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "GET #show" do
|
|
context "when admin post does not exist" do
|
|
it "raises an error" do
|
|
expect do
|
|
get :show, params: { id: "999999999" }
|
|
end.to raise_error ActiveRecord::RecordNotFound
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "POST #create" do
|
|
let(:base_params) { { title: "AdminPost Title",
|
|
content: "AdminPost content long enough to pass validation" } }
|
|
|
|
authorized_roles = %w[superadmin board board_assistants_team communications support translation]
|
|
unauthorized_roles = Admin::VALID_ROLES - authorized_roles
|
|
|
|
context "when admin does not have correct authorization" do
|
|
let(:admin) { create(:admin) }
|
|
|
|
unauthorized_roles.each do |admin_role|
|
|
context "with #{admin_role}" do
|
|
it "redirects with error" do
|
|
admin.update!(roles: [admin_role])
|
|
fake_login_admin(admin)
|
|
post :create, params: { admin_post: base_params }
|
|
|
|
it_redirects_to_with_error(root_url, "Sorry, only an authorized admin can access the page you were trying to reach.")
|
|
end
|
|
end
|
|
end
|
|
|
|
context "with no role" do
|
|
it "redirects with error" do
|
|
admin.update!(roles: [])
|
|
fake_login_admin(admin)
|
|
post :create, params: { admin_post: base_params }
|
|
|
|
it_redirects_to_with_error(root_url, "Sorry, only an authorized admin can access the page you were trying to reach.")
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when admin has correct authorization" do
|
|
authorized_roles.each do |admin_role|
|
|
context "with #{admin_role} role" do
|
|
before { fake_login_admin(create(:admin, roles: [admin_role])) }
|
|
|
|
context "when admin post is valid" do
|
|
it "redirects to post with notice" do
|
|
post :create, params: { admin_post: base_params }
|
|
it_redirects_to_with_notice(admin_post_path(assigns[:admin_post]), "Admin Post was successfully created.")
|
|
end
|
|
end
|
|
|
|
context "when admin post is invalid" do
|
|
context "with invalid translated post id" do
|
|
it "renders the new template with error message" do
|
|
post :create, params: { admin_post: { translated_post_id: 0 } }.merge(base_params)
|
|
|
|
expect(response).to render_template(:new)
|
|
expect(assigns[:admin_post].errors.full_messages).to include("Translated post does not exist")
|
|
end
|
|
|
|
it "doesn't create new tags" do
|
|
post :create, params: { admin_post: { translated_post_id: 0, tag_list: "badtag" } }.merge(base_params)
|
|
expect(AdminPostTag.find_by(name: "badtag")).to be_nil
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when translated post has same language id" do
|
|
let(:admin_post) { create(:admin_post) }
|
|
|
|
it "renders the new template with error message" do
|
|
post :create, params: { admin_post: { translated_post_id: admin_post.id, language_id: admin_post.language_id } }.merge(base_params)
|
|
|
|
expect(response).to render_template(:new)
|
|
expect(assigns[:admin_post].errors.full_messages).to include("Translated post cannot be same language as original post")
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "POST #update" do
|
|
let(:admin) { create(:admin) }
|
|
let(:post) { create(:admin_post) }
|
|
|
|
authorized_roles = %w[superadmin board board_assistants_team communications support translation]
|
|
unauthorized_roles = Admin::VALID_ROLES - authorized_roles
|
|
|
|
context "when admin does not have correct authorization" do
|
|
unauthorized_roles.each do |admin_role|
|
|
context "with the role #{admin_role}" do
|
|
it "redirects with error" do
|
|
admin.update!(roles: [admin_role])
|
|
fake_login_admin(admin)
|
|
put :update, params: { id: post.id, admin_post: { admin_id: admin.id } }
|
|
|
|
it_redirects_to_with_error(root_url, "Sorry, only an authorized admin can access the page you were trying to reach.")
|
|
end
|
|
end
|
|
end
|
|
|
|
context "with no role" do
|
|
it "redirects with error" do
|
|
admin.update!(roles: [])
|
|
fake_login_admin(admin)
|
|
put :update, params: { id: post.id, admin_post: { admin_id: admin.id } }
|
|
|
|
it_redirects_to_with_error(root_url, "Sorry, only an authorized admin can access the page you were trying to reach.")
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when admin has correct authorization" do
|
|
authorized_roles.each do |admin_role|
|
|
context "with #{admin_role} role" do
|
|
context "with valid title" do
|
|
it "updates title and redirects with notice" do
|
|
admin.update!(roles: [admin_role])
|
|
fake_login_admin(admin)
|
|
put :update, params: { id: post.id, admin_post: { admin_id: admin.id, title: "Modified Title of Post" } }
|
|
|
|
expect(post.reload.title).to eq("Modified Title of Post")
|
|
it_redirects_to_with_notice(admin_post_path(assigns[:admin_post]), "Admin Post was successfully updated.")
|
|
end
|
|
end
|
|
|
|
context "with invalid translated_post_id" do
|
|
it "renders the edit template with error message" do
|
|
admin.update!(roles: [admin_role])
|
|
fake_login_admin(admin)
|
|
put :update, params: { id: post.id, admin_post: { admin_id: admin.id, translated_post_id: 0 } }
|
|
|
|
expect(response).to render_template(:edit)
|
|
expect(assigns[:admin_post].errors.full_messages).to include("Translated post does not exist")
|
|
end
|
|
end
|
|
|
|
context "with valid translated_post_id" do
|
|
let!(:translation) { create(:admin_post, translated_post_id: post.id, language_id: create(:language).id) }
|
|
|
|
context "with valid comment_permissions" do
|
|
it "does not change comment_permissions and redirects with notice" do
|
|
admin.update!(roles: [admin_role])
|
|
fake_login_admin(admin)
|
|
expect do
|
|
put :update, params: {
|
|
id: translation.id,
|
|
admin_post: {
|
|
admin_id: admin.id,
|
|
comment_permissions: :disable_all
|
|
}
|
|
}
|
|
end.not_to change { AdminPost.comment_permissions }
|
|
|
|
expect(translation.reload.comment_permissions).to eq(post.comment_permissions)
|
|
it_redirects_to_with_notice(admin_post_path(translation), "Admin Post was successfully updated.")
|
|
end
|
|
end
|
|
|
|
context "with invalid translated_post language" do
|
|
it "renders the edit template with error message" do
|
|
admin.update!(roles: [admin_role])
|
|
fake_login_admin(admin)
|
|
put :update, params: { id: translation.id, admin_post: { language_id:post.language_id } }
|
|
expect(response).to render_template(:edit)
|
|
expect(assigns[:admin_post].errors.full_messages).to include("Translated post cannot be same language as original post")
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "GET #edit" do
|
|
let(:admin) { create(:admin) }
|
|
let(:post) { create(:admin_post) }
|
|
authorized_roles = %w[superadmin board board_assistants_team communications support translation]
|
|
unauthorized_roles = Admin::VALID_ROLES - authorized_roles
|
|
|
|
context "when admin does not have correct authorization" do
|
|
unauthorized_roles.each do |admin_role|
|
|
context "with the role #{admin_role}" do
|
|
it "redirects with error" do
|
|
admin.update!(roles: [admin_role])
|
|
fake_login_admin(admin)
|
|
get :edit, params: { id: post.id }
|
|
|
|
it_redirects_to_with_error(root_url, "Sorry, only an authorized admin can access the page you were trying to reach.")
|
|
end
|
|
end
|
|
end
|
|
|
|
context "with no role" do
|
|
it "redirects with error" do
|
|
admin.update!(roles: [])
|
|
fake_login_admin(admin)
|
|
get :edit, params: { id: post.id }
|
|
|
|
it_redirects_to_with_error(root_url, "Sorry, only an authorized admin can access the page you were trying to reach.")
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when admin has correct authorization" do
|
|
authorized_roles.each do |admin_role|
|
|
context "with #{admin_role} role" do
|
|
it "renders edit template" do
|
|
admin.update!(roles: [admin_role])
|
|
fake_login_admin(admin)
|
|
get :edit, params: { id: post.id }
|
|
|
|
expect(response).to render_template(:edit)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "GET #new" do
|
|
let(:admin) { create(:admin) }
|
|
let(:post) { create(:admin_post) }
|
|
authorized_roles = %w[superadmin board board_assistants_team communications support translation]
|
|
unauthorized_roles = Admin::VALID_ROLES - authorized_roles
|
|
|
|
context "when admin does not have correct authorization" do
|
|
unauthorized_roles.each do |admin_role|
|
|
context "with the role #{admin_role}" do
|
|
it "redirects with error" do
|
|
admin.update!(roles: [admin_role])
|
|
fake_login_admin(admin)
|
|
get :edit, params: { id: post.id }
|
|
|
|
it_redirects_to_with_error(root_url, "Sorry, only an authorized admin can access the page you were trying to reach.")
|
|
end
|
|
end
|
|
end
|
|
|
|
context "with no role" do
|
|
it "redirects with error" do
|
|
admin.update!(roles: [])
|
|
fake_login_admin(admin)
|
|
get :edit, params: { id: post.id }
|
|
|
|
it_redirects_to_with_error(root_url, "Sorry, only an authorized admin can access the page you were trying to reach.")
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when admin has correct authorization" do
|
|
authorized_roles.each do |admin_role|
|
|
context "with #{admin_role} role" do
|
|
it "renders new template" do
|
|
admin.update!(roles: [admin_role])
|
|
fake_login_admin(admin)
|
|
get :new, params: { id: post.id }
|
|
|
|
expect(response).to render_template(:new)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "DELETE #destroy" do
|
|
let(:admin) { create(:admin) }
|
|
let(:post) { create(:admin_post) }
|
|
authorized_roles = %w[superadmin board board_assistants_team communications support translation]
|
|
unauthorized_roles = Admin::VALID_ROLES - authorized_roles
|
|
|
|
context "when admin does not have correct authorization" do
|
|
unauthorized_roles.each do |admin_role|
|
|
context "with the role #{admin_role}" do
|
|
it "redirects with error" do
|
|
admin.update!(roles: [admin_role])
|
|
fake_login_admin(admin)
|
|
delete :destroy, params: { id: post.id }
|
|
|
|
it_redirects_to_with_error(root_url, "Sorry, only an authorized admin can access the page you were trying to reach.")
|
|
end
|
|
end
|
|
end
|
|
|
|
context "with no role" do
|
|
it "redirects with error" do
|
|
admin.update!(roles: [])
|
|
fake_login_admin(admin)
|
|
delete :destroy, params: { id: post.id }
|
|
|
|
it_redirects_to_with_error(root_url, "Sorry, only an authorized admin can access the page you were trying to reach.")
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when admin has correct authorization" do
|
|
authorized_roles.each do |admin_role|
|
|
context "with #{admin_role} role" do
|
|
it "deletes post and redirects without notice" do
|
|
admin.update!(roles: [admin_role])
|
|
fake_login_admin(admin)
|
|
delete :destroy, params: { id: post.id }
|
|
|
|
expect { post.reload }.to raise_exception(ActiveRecord::RecordNotFound)
|
|
it_redirects_to(admin_posts_path)
|
|
end
|
|
|
|
context "with translated post" do
|
|
let!(:translation) { create(:admin_post, translated_post_id: post.id, language_id: create(:language).id) }
|
|
|
|
it "deletes translations of post along with post" do
|
|
admin.update!(roles: [admin_role])
|
|
fake_login_admin(admin)
|
|
delete :destroy, params: { id: post.id }
|
|
|
|
expect { post.reload }.to raise_exception(ActiveRecord::RecordNotFound)
|
|
expect { translation.reload }.to raise_exception(ActiveRecord::RecordNotFound)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|