discourse/spec/requests/admin/email_styles_controller_spe...

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

119 lines
3.5 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
RSpec.describe Admin::EmailStylesController do
fab!(:admin) { Fabricate(:admin) }
fab!(:moderator) { Fabricate(:moderator) }
fab!(:user) { Fabricate(:user) }
let(:default_html) { File.read("#{Rails.root}/app/views/email/default_template.html") }
let(:default_css) { "" }
after do
SiteSetting.remove_override!(:email_custom_template)
SiteSetting.remove_override!(:email_custom_css)
end
describe 'show' do
context "when logged in as an admin" do
before { sign_in(admin) }
it 'returns default values' do
get '/admin/customize/email_style.json'
expect(response.status).to eq(200)
json = response.parsed_body['email_style']
expect(json['html']).to eq(default_html)
expect(json['css']).to eq(default_css)
end
it 'returns customized values' do
SiteSetting.email_custom_template = "For you: %{email_content}"
SiteSetting.email_custom_css = ".user-name { font-size: 24px; }"
get '/admin/customize/email_style.json'
expect(response.status).to eq(200)
json = response.parsed_body['email_style']
expect(json['html']).to eq("For you: %{email_content}")
expect(json['css']).to eq(".user-name { font-size: 24px; }")
end
end
shared_examples "email styles inaccessible" do
it "denies access with a 404 response" do
get '/admin/customize/email_style.json'
expect(response.status).to eq(404)
expect(response.parsed_body["errors"]).to include(I18n.t("not_found"))
end
end
context "when logged in as a moderator" do
before { sign_in(moderator) }
include_examples "email styles inaccessible"
end
context "when logged in as a non-staff user" do
before { sign_in(user) }
include_examples "email styles inaccessible"
end
end
describe 'update' do
let(:valid_params) do
{
html: 'For you: %{email_content}',
css: '.user-name { color: purple; }'
}
end
context "when logged in as an admin" do
before { sign_in(admin) }
it 'changes the settings' do
SiteSetting.email_custom_css = ".user-name { font-size: 24px; }"
put '/admin/customize/email_style.json', params: { email_style: valid_params }
expect(response.status).to eq(200)
expect(SiteSetting.email_custom_template).to eq(valid_params[:html])
expect(SiteSetting.email_custom_css).to eq(valid_params[:css])
end
it 'reports errors' do
put '/admin/customize/email_style.json', params: {
email_style: valid_params.merge(html: 'No email content')
}
expect(response.status).to eq(422)
json = response.parsed_body
expect(json['errors']).to include(
I18n.t(
'email_style.html_missing_placeholder',
placeholder: '%{email_content}'
)
)
end
end
shared_examples "email style update not allowed" do
it "denies access with a 404 response" do
put '/admin/customize/email_style.json', params: { email_style: valid_params }
expect(response.status).to eq(404)
expect(response.parsed_body["errors"]).to include(I18n.t("not_found"))
end
end
context "when logged in as a moderator" do
before { sign_in(moderator) }
include_examples "email style update not allowed"
end
context "when logged in as a non-staff user" do
before { sign_in(user) }
include_examples "email style update not allowed"
end
end
end