docbrown/spec/requests/admin/configs_spec.rb
Alexis Moody f4a10e4a44
[deploy] Adds a new admin setting for experience levels. (#10870)
* Adds a new admin setting for experience levels.

This is used in the post management UI to determine the range of experience. These values fallback to the ones we currently see in DEV, Total Newbies and Senior Devs. There is also a removal of the word coding when talking about experience level, since the context for each forem instance should be implied when referencing experience.

* Cleans up experience defaults

* Fixes instance_of usage
2020-10-16 12:40:25 -06:00

723 lines
33 KiB
Ruby

require "rails_helper"
RSpec.describe "/admin/config", type: :request do
let(:user) { create(:user) }
let(:admin) { create(:user, :super_admin) }
let(:admin_plus_config) { create(:user, :super_plus_single_resource_admin, resource: Config) }
let(:confirmation_message) do
"My username is @#{admin_plus_config.username} and this action is 100% safe and appropriate."
end
describe "POST admin/config as a user" do
before do
sign_in(user)
end
it "bars the regular user to access" do
expect { post "/admin/config", params: {} }.to raise_error(Pundit::NotAuthorizedError)
end
end
# rubocop:disable RSpec/NestedGroups
describe "POST admin/config" do
context "when admin has typical admin permissions but not single resource" do
before do
sign_in(admin)
end
it "does not allow user to update config if they have proper confirmation" do
expected_image_url = "https://dummyimage.com/300x300"
expect do
post "/admin/config", params: { site_config: { favicon_url: expected_image_url },
confirmation: confirmation_message }
end.to raise_error Pundit::NotAuthorizedError
end
it "does not allow user to update config if they do not have proper confirmation" do
expected_image_url = "https://dummyimage.com/300x300"
expect do
post "/admin/config", params: { site_config: { favicon_url: expected_image_url },
confirmation: "Not proper" }
end.to raise_error Pundit::NotAuthorizedError
end
end
context "when admin has full permissions including single resource" do
before do
sign_in(admin_plus_config)
end
it "deletes release-tied fragment caches" do
allow(Rails.cache).to receive(:delete_matched).and_call_original
post "/admin/config", params: { site_config: { health_check_token: "token" },
confirmation: confirmation_message }
expect(Rails.cache).to have_received(:delete_matched).with("*-#{ApplicationConfig['RELEASE_FOOTPRINT']}")
end
describe "API tokens" do
it "updates the health_check_token" do
token = rand(20).to_s
post "/admin/config", params: { site_config: { health_check_token: token },
confirmation: confirmation_message }
expect(SiteConfig.health_check_token).to eq token
end
it "sets video_encoder_key" do
post "/admin/config", params: { site_config: { video_encoder_key: "123abc" },
confirmation: confirmation_message }
expect(SiteConfig.video_encoder_key).to eq("123abc")
end
end
describe "Authentication" do
it "updates enabled authentication providers" do
enabled = Array.wrap(Authentication::Providers.available.first.to_s)
post "/admin/config", params: { site_config: { authentication_providers: enabled },
confirmation: confirmation_message }
expect(SiteConfig.authentication_providers).to eq(enabled)
end
it "strips empty elements" do
provider = Authentication::Providers.available.first.to_s
enabled = [provider, "", nil]
post "/admin/config", params: { site_config: { authentication_providers: enabled },
confirmation: confirmation_message }
expect(SiteConfig.authentication_providers).to eq([provider])
end
it "allows all providers to be disabled" do
# We have to send _something_ for an update, so we'll simulate the borwser omitting the auth
# providers array when no options are selected
expect do
post "/admin/config", params: { site_config: { ga_tracking_id: "123" },
confirmation: confirmation_message }
end.to change(SiteConfig, :authentication_providers).to([])
end
it "allows all authentication providers to be unset" do
post "/admin/config", params: { site_config: { authentication_providers: [] },
confirmation: confirmation_message }
expect(SiteConfig.authentication_providers).to be_empty
end
end
describe "Community Content" do
it "updates the community_description" do
allow(SiteConfig).to receive(:community_description).and_call_original
description = "Hey hey #{rand(100)}"
post "/admin/config", params: { site_config: { community_description: description },
confirmation: confirmation_message }
expect(SiteConfig.community_description).to eq(description)
end
it "updates the community_name" do
name_magoo = "Hey hey #{rand(100)}"
post "/admin/config", params: { site_config: { community_name: name_magoo },
confirmation: confirmation_message }
expect(SiteConfig.community_name).to eq(name_magoo)
end
it "updates the community_member_label" do
name = "developer"
post "/admin/config", params: { site_config: { community_member_label: name },
confirmation: confirmation_message }
expect(SiteConfig.community_member_label).to eq(name)
end
it "updates the community_copyright_start_year" do
year = "2018"
post "/admin/config", params: { site_config: { community_copyright_start_year: year },
confirmation: confirmation_message }
expect(SiteConfig.community_copyright_start_year).to eq(2018)
end
it "updates the tagline" do
description = "Hey hey #{rand(100)}"
post "/admin/config", params: { site_config: { tagline: description }, confirmation: confirmation_message }
expect(SiteConfig.tagline).to eq(description)
end
it "updates the staff_user_id" do
post "/admin/config", params: { site_config: { staff_user_id: 22 }, confirmation: confirmation_message }
expect(SiteConfig.staff_user_id).to eq(22)
end
it "updates the experience_low" do
experience_low = "Noobs"
post "/admin/config", params: { site_config: { experience_low: experience_low },
confirmation: confirmation_message }
expect(SiteConfig.experience_low).to eq(experience_low)
end
it "updates the experience_high" do
experience_high = "Advanced Peeps"
post "/admin/config", params: { site_config: { experience_high: experience_high },
confirmation: confirmation_message }
expect(SiteConfig.experience_high).to eq(experience_high)
end
end
describe "Emails" do
it "updates email_addresses" do
expected_email_addresses = {
business: "partners@example.com",
privacy: "privacy@example.com",
members: "members@example.com"
}
post "/admin/config", params: { site_config: { email_addresses: expected_email_addresses },
confirmation: confirmation_message }
expect(SiteConfig.email_addresses[:privacy]).to eq("privacy@example.com")
expect(SiteConfig.email_addresses[:business]).to eq("partners@example.com")
expect(SiteConfig.email_addresses[:members]).to eq("members@example.com")
expect(SiteConfig.email_addresses[:default]).to eq(ApplicationConfig["DEFAULT_EMAIL"])
end
end
describe "Email digest frequency" do
it "updates periodic_email_digest_max" do
post "/admin/config", params: { site_config: { periodic_email_digest_max: 1 },
confirmation: confirmation_message }
expect(SiteConfig.periodic_email_digest_max).to eq(1)
end
it "updates periodic_email_digest_min" do
post "/admin/config", params: { site_config: { periodic_email_digest_min: 3 },
confirmation: confirmation_message }
expect(SiteConfig.periodic_email_digest_min).to eq(3)
end
it "rejects update without proper confirmation" do
expect do
post "/admin/config", params: { site_config: { periodic_email_digest_min: 6 },
confirmation: "Incorrect yo!" }
end.to raise_error ActionController::BadRequest
expect(SiteConfig.periodic_email_digest_min).not_to eq(6)
end
end
describe "Jobs" do
it "updates jobs_url" do
post "/admin/config", params: { site_config: { jobs_url: "www.jobs.com" },
confirmation: confirmation_message }
expect(SiteConfig.jobs_url).to eq("www.jobs.com")
end
it "updates display_jobs_banner" do
post "/admin/config", params: { site_config: { display_jobs_banner: true },
confirmation: confirmation_message }
expect(SiteConfig.display_jobs_banner).to eq(true)
end
end
describe "Google Analytics Reporting API v4" do
it "updates ga_tracking_id" do
post "/admin/config", params: { site_config: { ga_tracking_id: "abc" }, confirmation: confirmation_message }
expect(SiteConfig.ga_tracking_id).to eq("abc")
end
end
describe "Images" do
it "updates main_social_image" do
expected_image_url = "https://dummyimage.com/300x300"
post "/admin/config", params: { site_config: { main_social_image: expected_image_url },
confirmation: confirmation_message }
expect(SiteConfig.main_social_image).to eq(expected_image_url)
end
it "updates favicon_url" do
expected_image_url = "https://dummyimage.com/300x300"
post "/admin/config", params: { site_config: { favicon_url: expected_image_url },
confirmation: confirmation_message }
expect(SiteConfig.favicon_url).to eq(expected_image_url)
end
it "updates logo_png" do
expected_image_url = "https://dummyimage.com/300x300"
post "/admin/config", params: { site_config: { logo_png: expected_image_url },
confirmation: confirmation_message }
expect(SiteConfig.logo_png).to eq(expected_image_url)
end
it "updates logo_svg" do
expected_image_url = "https://dummyimage.com/300x300"
post "/admin/config", params: { site_config: { logo_svg: expected_image_url },
confirmation: confirmation_message }
expect(SiteConfig.logo_svg).to eq(expected_image_url)
end
it "updates secondary_logo_url" do
expected_image_url = "https://dummyimage.com/300x300"
post "/admin/config", params: { site_config: { secondary_logo_url: expected_image_url },
confirmation: confirmation_message }
expect(SiteConfig.secondary_logo_url).to eq(expected_image_url)
end
it "updates left_navbar_svg_icon" do
expected_svg = "<svg height='100' width='100'><circle cx='50' cy='50' r='40' " \
"stroke='black' stroke-width='3'/></svg>"
post "/admin/config", params: { site_config: { left_navbar_svg_icon: expected_svg },
confirmation: confirmation_message }
expect(SiteConfig.left_navbar_svg_icon).to eq(expected_svg)
end
it "updates right_navbar_svg_icon" do
expected_svg = "<svg height='100' width='100'><circle cx='50' cy='50' r='40' " \
"stroke='black' stroke-width='1'/></svg>"
post "/admin/config", params: { site_config: { right_navbar_svg_icon: expected_svg },
confirmation: confirmation_message }
expect(SiteConfig.right_navbar_svg_icon).to eq(expected_svg)
end
it "rejects update without proper confirmation" do
expected_image_url = "https://dummyimage.com/300x300"
expect do
post "/admin/config", params: { site_config: { logo_svg: expected_image_url },
confirmation: "Incorrect yo!" }
end.to raise_error ActionController::BadRequest
end
it "rejects update without any confirmation" do
expected_image_url = "https://dummyimage.com/300x300"
expect do
post "/admin/config", params: { site_config: { logo_svg: expected_image_url },
confirmation: "" }
end.to raise_error ActionController::ParameterMissing
end
end
describe "Mascot" do
it "updates the mascot_user_id" do
expected_mascot_user_id = 2
post "/admin/config", params: { site_config: { mascot_user_id: expected_mascot_user_id },
confirmation: confirmation_message }
expect(SiteConfig.mascot_user_id).to eq(expected_mascot_user_id)
end
it "updates mascot_image_url" do
expected_image_url = "https://dummyimage.com/300x300"
post "/admin/config", params: { site_config: { mascot_image_url: expected_image_url },
confirmation: confirmation_message }
expect(SiteConfig.mascot_image_url).to eq(expected_image_url)
end
it "updates mascot_footer_image_url" do
expected_image_url = "https://dummyimage.com/300x300"
post "/admin/config", params: { site_config: { mascot_footer_image_url: expected_image_url },
confirmation: confirmation_message }
expect(SiteConfig.mascot_footer_image_url).to eq(expected_image_url)
end
it "updates the mascot_footer_image_width" do
expected_default_mascot_footer_image_width = 52
expected_mascot_footer_image_width = 1002
expect(SiteConfig.mascot_footer_image_width).to eq(expected_default_mascot_footer_image_width)
post "/admin/config", params: { site_config:
{ mascot_footer_image_width: expected_mascot_footer_image_width },
confirmation: confirmation_message }
expect(SiteConfig.mascot_footer_image_width).to eq(expected_mascot_footer_image_width)
end
it "updates the mascot_footer_image_height" do
expected_default_mascot_footer_image_height = 120
expected_mascot_footer_image_height = 3002
expect(SiteConfig.mascot_footer_image_height).to eq(expected_default_mascot_footer_image_height)
post "/admin/config", params: { site_config:
{ mascot_footer_image_height: expected_mascot_footer_image_height },
confirmation: confirmation_message }
expect(SiteConfig.mascot_footer_image_height).to eq(expected_mascot_footer_image_height)
end
it "updates mascot_image_description" do
description = "Hey hey #{rand(100)}"
post "/admin/config", params: { site_config: { mascot_image_description: description },
confirmation: confirmation_message }
expect(SiteConfig.mascot_image_description).to eq(description)
end
end
describe "Meta Keywords" do
it "updates meta keywords" do
expected_keywords = { "default" => "software, people", "article" => "user, experience", "tag" => "bye" }
post "/admin/config", params: { site_config: { meta_keywords: expected_keywords },
confirmation: confirmation_message }
expect(SiteConfig.meta_keywords[:default]).to eq("software, people")
expect(SiteConfig.meta_keywords[:article]).to eq("user, experience")
expect(SiteConfig.meta_keywords[:tag]).to eq("bye")
end
end
describe "Monetization" do
it "updates payment pointer" do
post "/admin/config", params: { site_config: { payment_pointer: "$pay.yo" },
confirmation: confirmation_message }
expect(SiteConfig.payment_pointer).to eq("$pay.yo")
end
it "updates stripe configs" do
post "/admin/config", params: { site_config: { stripe_api_key: "sk_live_yo",
stripe_publishable_key: "pk_live_haha" },
confirmation: confirmation_message }
expect(SiteConfig.stripe_api_key).to eq("sk_live_yo")
expect(SiteConfig.stripe_publishable_key).to eq("pk_live_haha")
end
describe "Shop" do
it "rejects update to shop_url without proper confirmation" do
expected_shop_url = "https://qshop.dev.to"
expect do
params = { site_config: { shop_url: expected_shop_url }, confirmation: "Incorrect confirmation" }
post "/admin/config", params: params
end.to raise_error ActionController::BadRequest
expect(SiteConfig.shop_url).not_to eq(expected_shop_url)
end
it "sets shop_url to nil" do
previous_shop_url = "some-shop-url"
post "/admin/config", params: { site_config: { shop_url: "" }, confirmation: confirmation_message }
expect(SiteConfig.shop_url).to eq("")
get "/privacy"
expect(response.body).not_to include(previous_shop_url)
expect(response.body).not_to include("#{SiteConfig.community_name} Shop")
end
it "updates shop url" do
expected_shop_url = "https://qshop.dev.to"
post "/admin/config", params: { site_config: { shop_url: expected_shop_url },
confirmation: confirmation_message }
expect(SiteConfig.shop_url).to eq(expected_shop_url)
get "/privacy"
expect(response.body).to include(expected_shop_url)
expect(response.body).to include("#{SiteConfig.community_name} Shop")
end
end
end
describe "Newsletter" do
it "updates mailchimp_api_key" do
post "/admin/config", params: { site_config: { mailchimp_api_key: "abc" },
confirmation: confirmation_message }
expect(SiteConfig.mailchimp_api_key).to eq("abc")
end
it "updates mailchimp_newsletter_id" do
post "/admin/config", params: { site_config: { mailchimp_newsletter_id: "abc" },
confirmation: confirmation_message }
expect(SiteConfig.mailchimp_newsletter_id).to eq("abc")
end
it "updates mailchimp_sustaining_members_id" do
post "/admin/config", params: { site_config: { mailchimp_sustaining_members_id: "abc" },
confirmation: confirmation_message }
expect(SiteConfig.mailchimp_sustaining_members_id).to eq("abc")
end
it "updates mailchimp_tag_moderators_id" do
post "/admin/config", params: { site_config: { mailchimp_tag_moderators_id: "abc" },
confirmation: confirmation_message }
expect(SiteConfig.mailchimp_tag_moderators_id).to eq("abc")
end
it "updates mailchimp_community_moderators_id" do
post "/admin/config", params: { site_config: { mailchimp_community_moderators_id: "abc" },
confirmation: confirmation_message }
expect(SiteConfig.mailchimp_community_moderators_id).to eq("abc")
end
end
describe "Onboarding" do
it "updates onboarding_taskcard_image" do
expected_image_url = "https://dummyimage.com/300x300"
post "/admin/config", params: { site_config: { onboarding_taskcard_image: expected_image_url },
confirmation: confirmation_message }
expect(SiteConfig.onboarding_taskcard_image).to eq(expected_image_url)
end
it "updates onboarding_logo_image" do
expected_image_url = "https://dummyimage.com/300x300"
post "/admin/config", params: { site_config: { onboarding_logo_image: expected_image_url },
confirmation: confirmation_message }
expect(SiteConfig.onboarding_logo_image).to eq(expected_image_url)
end
it "updates onboarding_background_image" do
expected_image_url = "https://dummyimage.com/300x300"
post "/admin/config", params: { site_config: { onboarding_background_image: expected_image_url },
confirmation: confirmation_message }
expect(SiteConfig.onboarding_background_image).to eq(expected_image_url)
end
it "removes space suggested_tags" do
post "/admin/config", params: { site_config: { suggested_tags: "hey, haha,hoho, bobo fofo" },
confirmation: confirmation_message }
expect(SiteConfig.suggested_tags).to eq(%w[hey haha hoho bobofofo])
end
it "downcases suggested_tags" do
post "/admin/config", params: { site_config: { suggested_tags: "hey, haha,hoHo, Bobo Fofo" },
confirmation: confirmation_message }
expect(SiteConfig.suggested_tags).to eq(%w[hey haha hoho bobofofo])
end
it "removes space suggested_users" do
post "/admin/config", params: {
site_config: { suggested_users: "piglet, tigger,eeyore, Christopher Robin, kanga,roo" },
confirmation: confirmation_message
}
expect(SiteConfig.suggested_users).to eq(%w[piglet tigger eeyore christopherrobin kanga roo])
end
it "downcases suggested_users" do
post "/admin/config", params: {
site_config: { suggested_users: "piglet, tigger,EEYORE, Christopher Robin, KANGA,RoO" },
confirmation: confirmation_message
}
expect(SiteConfig.suggested_users).to eq(%w[piglet tigger eeyore christopherrobin kanga roo])
end
end
describe "Rate Limits and spam" do
it "updates rate_limit_follow_count_daily" do
expect do
post "/admin/config", params: { site_config: { rate_limit_follow_count_daily: 3 },
confirmation: confirmation_message }
end.to change(SiteConfig, :rate_limit_follow_count_daily).from(500).to(3)
end
it "updates rate_limit_comment_creation" do
expect do
post "/admin/config", params: { site_config: { rate_limit_comment_creation: 3 },
confirmation: confirmation_message }
end.to change(SiteConfig, :rate_limit_comment_creation).from(9).to(3)
end
it "updates rate_limit_published_article_creation" do
expect do
post "/admin/config", params: { site_config: { rate_limit_published_article_creation: 3 },
confirmation: confirmation_message }
end.to change(SiteConfig, :rate_limit_published_article_creation).from(9).to(3)
end
it "updates rate_limit_published_article_antispam_creation" do
expect do
post "/admin/config", params: { site_config: { rate_limit_published_article_antispam_creation: 3 },
confirmation: confirmation_message }
end.to change(SiteConfig, :rate_limit_published_article_antispam_creation).from(1).to(3)
end
it "updates rate_limit_organization_creation" do
expect do
post "/admin/config", params: { site_config: { rate_limit_organization_creation: 3 },
confirmation: confirmation_message }
end.to change(SiteConfig, :rate_limit_organization_creation).from(1).to(3)
end
it "updates rate_limit_image_upload" do
expect do
post "/admin/config", params: { site_config: { rate_limit_image_upload: 3 },
confirmation: confirmation_message }
end.to change(SiteConfig, :rate_limit_image_upload).from(9).to(3)
end
it "updates rate_limit_email_recipient" do
expect do
post "/admin/config", params: { site_config: { rate_limit_email_recipient: 3 },
confirmation: confirmation_message }
end.to change(SiteConfig, :rate_limit_email_recipient).from(5).to(3)
end
it "updates rate_limit_user_subscription_creation" do
expect do
post "/admin/config", params: { site_config: { rate_limit_user_subscription_creation: 1 },
confirmation: confirmation_message }
end.to change(SiteConfig, :rate_limit_user_subscription_creation).from(3).to(1)
end
it "updates rate_limit_article_update" do
expect do
post "/admin/config", params: { site_config: { rate_limit_article_update: 3 },
confirmation: confirmation_message }
end.to change(SiteConfig, :rate_limit_article_update).from(30).to(3)
end
it "updates rate_limit_user_update" do
expect do
post "/admin/config", params: { site_config: { rate_limit_user_update: 3 },
confirmation: confirmation_message }
end.to change(SiteConfig, :rate_limit_user_update).from(5).to(3)
end
it "updates rate_limit_feedback_message_creation" do
expect do
post "/admin/config", params: { site_config: { rate_limit_feedback_message_creation: 3 },
confirmation: confirmation_message }
end.to change(SiteConfig, :rate_limit_feedback_message_creation).from(5).to(3)
end
it "updates rate_limit_listing_creation" do
expect do
post "/admin/config", params: { site_config: { rate_limit_listing_creation: 3 },
confirmation: confirmation_message }
end.to change(SiteConfig, :rate_limit_listing_creation).from(1).to(3)
end
it "updates rate_limit_reaction_creation" do
expect do
post "/admin/config", params: { site_config: { rate_limit_reaction_creation: 3 },
confirmation: confirmation_message }
end.to change(SiteConfig, :rate_limit_reaction_creation).from(10).to(3)
end
it "updates rate_limit_send_email_confirmation" do
expect do
post "/admin/config", params: { site_config: { rate_limit_send_email_confirmation: 3 },
confirmation: confirmation_message }
end.to change(SiteConfig, :rate_limit_send_email_confirmation).from(2).to(3)
end
it "updates spam_trigger_terms" do
spam_trigger_terms = "hey, pokemon go hack"
post "/admin/config", params: { site_config: { spam_trigger_terms: spam_trigger_terms },
confirmation: confirmation_message }
expect(SiteConfig.spam_trigger_terms).to eq(["hey", "pokemon go hack"])
end
it "updates recaptcha_site_key and recaptcha_secret_key" do
site_key = "hi-ho"
secret_key = "lets-go"
post "/admin/config", params: {
site_config: { recaptcha_site_key: site_key, recaptcha_secret_key: secret_key },
confirmation: confirmation_message
}
expect(SiteConfig.recaptcha_site_key).to eq site_key
expect(SiteConfig.recaptcha_secret_key).to eq secret_key
end
end
describe "Social Media" do
it "updates social_media_handles" do
expected_handle = { "facebook" => "tpd", "github" => "", "instagram" => "", "twitch" => "", "twitter" => "" }
post "/admin/config", params: { site_config: { social_media_handles: expected_handle },
confirmation: confirmation_message }
expect(SiteConfig.social_media_handles[:facebook]).to eq("tpd")
expect(SiteConfig.social_media_handles[:github]).to eq("")
end
describe "twitter_hashtag" do
twitter_hashtag = "#DEVCommunity"
params = { site_config: { twitter_hashtag: twitter_hashtag }, confirmation: "Incorrect confirmation" }
it "does not update the twitter hashtag without the correct confirmation text" do
expect { post "/admin/config", params: params }.to raise_error ActionController::BadRequest
end
it "updates the twitter hashtag" do
params["confirmation"] = confirmation_message
post "/admin/config", params: params
expect(SiteConfig.twitter_hashtag.to_s).to eq twitter_hashtag
end
end
end
describe "Sponsors" do
it "updates the sponsor_headline" do
headline = "basic"
post "/admin/config", params: { site_config: { sponsor_headline: headline },
confirmation: confirmation_message }
expect(SiteConfig.sponsor_headline).to eq(headline)
end
end
describe "Tags" do
it "removes space sidebar_tags" do
post "/admin/config", params: { site_config: { sidebar_tags: "hey, haha,hoho, bobo fofo" },
confirmation: confirmation_message }
expect(SiteConfig.sidebar_tags).to eq(%w[hey haha hoho bobofofo])
end
it "downcases sidebar_tags" do
post "/admin/config", params: { site_config: { sidebar_tags: "hey, haha,hoHo, Bobo Fofo" },
confirmation: confirmation_message }
expect(SiteConfig.sidebar_tags).to eq(%w[hey haha hoho bobofofo])
end
end
describe "User Experience" do
it "updates the feed_style" do
feed_style = "basic"
post "/admin/config", params: { site_config: { feed_style: feed_style },
confirmation: confirmation_message }
expect(SiteConfig.feed_style).to eq(feed_style)
end
it "updates the feed_strategy" do
feed_strategy = "optimized"
post "/admin/config", params: { site_config: { feed_strategy: feed_strategy },
confirmation: confirmation_message }
expect(SiteConfig.feed_strategy).to eq(feed_strategy)
end
it "updates the brand color if proper hex" do
hex = "#0a0a0a" # dark enough
post "/admin/config", params: { site_config: { primary_brand_color_hex: hex },
confirmation: confirmation_message }
expect(SiteConfig.primary_brand_color_hex).to eq(hex)
end
it "does not update brand color if hex not contrasting enough" do
hex = "#bd746f" # not dark enough
post "/admin/config", params: { site_config: { primary_brand_color_hex: hex },
confirmation: confirmation_message }
expect(SiteConfig.primary_brand_color_hex).not_to eq(hex)
end
it "does not update brand color if hex not a hex with proper format" do
hex = "0a0a0a" # dark enough, but not proper format
post "/admin/config", params: { site_config: { primary_brand_color_hex: hex },
confirmation: confirmation_message }
expect(SiteConfig.primary_brand_color_hex).not_to eq(hex)
end
it "updates public to true" do
is_public = true
post "/admin/config", params: { site_config: { public: is_public },
confirmation: confirmation_message }
expect(SiteConfig.public).to eq(is_public)
end
it "updates public to false" do
is_public = false
post "/admin/config", params: { site_config: { public: is_public },
confirmation: confirmation_message }
expect(SiteConfig.public).to eq(is_public)
end
end
describe "Credits" do
it "updates the credit prices", :aggregate_failures do
original_prices = {
small: 500,
medium: 400,
large: 300,
xlarge: 250
}
SiteConfig.credit_prices_in_cents = original_prices
SiteConfig.credit_prices_in_cents.each_key do |size|
new_prices = original_prices.merge(size => 123)
expect do
post "/admin/config", params: { site_config: { credit_prices_in_cents: new_prices },
confirmation: confirmation_message }
end.to change { SiteConfig.credit_prices_in_cents[size] }.from(original_prices[size.to_sym]).to(123)
end
end
end
end
end
# rubocop:enable RSpec/NestedGroups
end