+
<%= flash[:notice] %>
<% end %>
diff --git a/config/routes.rb b/config/routes.rb
index c05443eec..bdedf20a8 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -57,6 +57,7 @@ Rails.application.routes.draw do
namespace :settings do
resources :authentications, only: [:create]
resources :campaigns, only: [:create]
+ resources :rate_limits, only: [:create]
end
namespace :users do
resources :gdpr_delete_requests, only: %i[index destroy]
diff --git a/cypress/integration/adminFlows/config/rateLimitSection.js b/cypress/integration/adminFlows/config/rateLimitSection.js
new file mode 100644
index 000000000..f4a3973e6
--- /dev/null
+++ b/cypress/integration/adminFlows/config/rateLimitSection.js
@@ -0,0 +1,49 @@
+describe('Campaign Section', () => {
+ beforeEach(() => {
+ cy.testSetup();
+ cy.fixture('users/adminUser.json').as('user');
+
+ cy.get('@user').then((user) => {
+ cy.loginUser(user);
+ });
+ });
+
+ describe('rate limit settings', () => {
+ it('can change for how many days a user is considered new', () => {
+ cy.get('@user').then(({ username }) => {
+ cy.visit('/admin/config');
+ cy.get('#new_settings_rate_limit').as('rateLimitSectionForm');
+
+ cy.get('@rateLimitSectionForm')
+ .findByText('Rate limits and anti-spam')
+ .click();
+
+ cy.get('@rateLimitSectionForm')
+ .get('#settings_rate_limit_user_considered_new_days')
+ .clear()
+ .type('42');
+
+ cy.get('@rateLimitSectionForm')
+ .findByPlaceholderText('Confirmation text')
+ .type(
+ `My username is @${username} and this action is 100% safe and appropriate.`,
+ );
+
+ cy.get('@rateLimitSectionForm')
+ .findByText('Update Site Configuration')
+ .click();
+
+ cy.url().should('contains', '/admin/config');
+
+ cy.findByText('Site configuration was successfully updated.').should(
+ 'be.visible',
+ );
+
+ cy.get('#settings_rate_limit_user_considered_new_days').should(
+ 'have.value',
+ '42',
+ );
+ });
+ });
+ });
+});
diff --git a/cypress/integration/loggedOutFlows/showLoginModal.spec.js b/cypress/integration/loggedOutFlows/showLoginModal.spec.js
index 8e8b306ac..6fa2b4e4f 100644
--- a/cypress/integration/loggedOutFlows/showLoginModal.spec.js
+++ b/cypress/integration/loggedOutFlows/showLoginModal.spec.js
@@ -24,8 +24,12 @@ describe('Show log in modal', () => {
cy.findAllByText('Test article').last().click();
cy.findByRole('button', { name: 'Like' }).as('heartReaction');
- cy.findByRole('button', { name: 'React with unicorn' }).as('unicornReaction');
- cy.findByRole('button', { name: 'Add to reading list' }).as('bookmarkReaction');
+ cy.findByRole('button', { name: 'React with unicorn' }).as(
+ 'unicornReaction',
+ );
+ cy.findByRole('button', { name: 'Add to reading list' }).as(
+ 'bookmarkReaction',
+ );
['@heartReaction', '@unicornReaction', '@bookmarkReaction'].forEach(
(reaction) => {
@@ -46,7 +50,9 @@ describe('Show log in modal', () => {
it('should show login modal for comment subscription', () => {
cy.findAllByText('Test article').last().click();
- cy.findByRole('button', { name: /Subscribe/ }).as('subscribe').click();
+ cy.findByRole('button', { name: /Subscribe/ })
+ .as('subscribe')
+ .click();
cy.findByTestId('modal-container').as('modal');
cy.get('@modal').findByText('Log in to continue').should('exist');
diff --git a/db/migrate/20210414033457_create_settings_rate_limits.rb b/db/migrate/20210414033457_create_settings_rate_limits.rb
new file mode 100644
index 000000000..d054fe78f
--- /dev/null
+++ b/db/migrate/20210414033457_create_settings_rate_limits.rb
@@ -0,0 +1,16 @@
+class CreateSettingsRateLimits < ActiveRecord::Migration[6.1]
+ def self.up
+ create_table :settings_rate_limits do |t|
+ t.string :var, null: false
+ t.text :value, null: true
+
+ t.timestamps
+ end
+
+ add_index :settings_rate_limits, :var, unique: true
+ end
+
+ def self.down
+ drop_table :settings_rate_limits
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 742fd510a..ea6b364b6 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 2021_04_07_172628) do
+ActiveRecord::Schema.define(version: 2021_04_14_033457) do
# These are extensions that must be enabled in order to support this database
enable_extension "citext"
@@ -1066,6 +1066,14 @@ ActiveRecord::Schema.define(version: 2021_04_07_172628) do
t.index ["var"], name: "index_settings_campaigns_on_var", unique: true
end
+ create_table "settings_rate_limits", force: :cascade do |t|
+ t.datetime "created_at", precision: 6, null: false
+ t.datetime "updated_at", precision: 6, null: false
+ t.text "value"
+ t.string "var", null: false
+ t.index ["var"], name: "index_settings_rate_limits_on_var", unique: true
+ end
+
create_table "site_configs", force: :cascade do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
diff --git a/docs/backend/configuration.md b/docs/backend/configuration.md
index ffbb84176..a7ab70a47 100644
--- a/docs/backend/configuration.md
+++ b/docs/backend/configuration.md
@@ -30,14 +30,14 @@ Settings managed via your ENV can be found in
We use this gem for managing settings used within the app's business logic.
Examples:
-- `main_social_image`
-- `rate_limit_follow_count_daily`
-- `suggested_tags`
+- `SiteConfig.main_social_image`
+- `Settings::RateLimit.follow_count_daily`
+- `Settings::Authentication.twitter_secret`
These settings can be accessed via the
-[`SiteConfig`](https://github.com/forem/forem/blob/main/app/models/site_config.rb)
-object and viewed / modified via `/admin/config` (see
-[the Admin guide](/admin)).
+[`SiteConfig`](https://github.com/forem/forem/blob/master/app/models/site_config.rb)
+object and various models in the `Settings::` namespace and viewed / modified
+via `/admin/config` (see [the Admin guide](/admin)).

diff --git a/lib/data_update_scripts/20210114174504_update_user_update_rate_limit_default.rb b/lib/data_update_scripts/20210114174504_update_user_update_rate_limit_default.rb
index c056c0aae..aab67a9aa 100644
--- a/lib/data_update_scripts/20210114174504_update_user_update_rate_limit_default.rb
+++ b/lib/data_update_scripts/20210114174504_update_user_update_rate_limit_default.rb
@@ -1,9 +1,9 @@
module DataUpdateScripts
class UpdateUserUpdateRateLimitDefault
def run
- return if SiteConfig.rate_limit_user_update > 5
+ return if Settings::RateLimit.user_update > 5
- SiteConfig.rate_limit_user_update = 15
+ Settings::RateLimit.user_update = 15
end
end
end
diff --git a/lib/data_update_scripts/20210414060839_move_rate_limit_settings.rb b/lib/data_update_scripts/20210414060839_move_rate_limit_settings.rb
new file mode 100644
index 000000000..95a753f68
--- /dev/null
+++ b/lib/data_update_scripts/20210414060839_move_rate_limit_settings.rb
@@ -0,0 +1,36 @@
+module DataUpdateScripts
+ class MoveRateLimitSettings
+ RENAMED_RATE_LIMIT_SETTINGS = %w[
+ article_update
+ comment_antispam_creation
+ comment_creation
+ email_recipient
+ feedback_message_creation
+ follow_count_daily
+ image_upload
+ listing_creation
+ organization_creation
+ published_article_antispam_creation
+ published_article_creation
+ reaction_creation
+ send_email_confirmation
+ user_subscription_creation
+ user_update
+ ].freeze
+
+ def run
+ return if Settings::RateLimit.any?
+
+ RENAMED_RATE_LIMIT_SETTINGS.each do |setting|
+ Settings::RateLimit.public_send(
+ "#{setting}=",
+ SiteConfig.public_send("rate_limit_#{setting}"),
+ )
+ end
+
+ Settings::RateLimit.spam_trigger_terms = SiteConfig.spam_trigger_terms
+ Settings::RateLimit.user_considered_new_days =
+ SiteConfig.user_considered_new_days
+ end
+ end
+end
diff --git a/spec/helpers/rate_limit_checker_helper_spec.rb b/spec/helpers/rate_limit_checker_helper_spec.rb
index 48e8ce76c..ae950ebd3 100644
--- a/spec/helpers/rate_limit_checker_helper_spec.rb
+++ b/spec/helpers/rate_limit_checker_helper_spec.rb
@@ -3,8 +3,9 @@ require "rails_helper"
describe RateLimitCheckerHelper, type: :helper do
describe "#configurable_rate_limits" do
it "returns a hash with the right structure" do
+ settings_keys = Settings::RateLimit.keys.map(&:to_sym)
helper.configurable_rate_limits.each do |key, value_hash|
- expect(key).to match(/\Arate_limit/)
+ expect(settings_keys).to include(key)
expect(value_hash.keys).to match_array(%i[title min placeholder description])
end
end
diff --git a/spec/lib/data_update_scripts/move_rate_limit_settings_spec.rb b/spec/lib/data_update_scripts/move_rate_limit_settings_spec.rb
new file mode 100644
index 000000000..390ed9052
--- /dev/null
+++ b/spec/lib/data_update_scripts/move_rate_limit_settings_spec.rb
@@ -0,0 +1,17 @@
+require "rails_helper"
+require Rails.root.join(
+ "lib/data_update_scripts/20210414060839_move_rate_limit_settings.rb",
+)
+
+describe DataUpdateScripts::MoveRateLimitSettings do
+ it "migrates settings from SiteConfig to Settings::RateLimit" do
+ allow(SiteConfig).to receive(:rate_limit_follow_count_daily).and_return(23)
+ allow(SiteConfig).to receive(:user_considered_new_days).and_return(42)
+
+ expect do
+ described_class.new.run
+ end
+ .to change(Settings::RateLimit, :follow_count_daily)
+ .and change(Settings::RateLimit, :user_considered_new_days)
+ end
+end
diff --git a/spec/lib/data_update_scripts/update_user_update_rate_limit_default_spec.rb b/spec/lib/data_update_scripts/update_user_update_rate_limit_default_spec.rb
index bab2d6ac9..cda59642b 100644
--- a/spec/lib/data_update_scripts/update_user_update_rate_limit_default_spec.rb
+++ b/spec/lib/data_update_scripts/update_user_update_rate_limit_default_spec.rb
@@ -6,12 +6,12 @@ require Rails.root.join(
describe DataUpdateScripts::UpdateUserUpdateRateLimitDefault do
it "updates rate limit if 5 or less" do
described_class.new.run
- expect(SiteConfig.rate_limit_user_update).to eq(15)
+ expect(Settings::RateLimit.user_update).to eq(15)
end
it "does NOT update the rate limit if greater than 5" do
- allow(SiteConfig).to receive(:rate_limit_user_update).and_return(10)
+ allow(Settings::RateLimit).to receive(:user_update).and_return(10)
described_class.new.run
- expect(SiteConfig.rate_limit_user_update).to eq(10)
+ expect(Settings::RateLimit.user_update).to eq(10)
end
end
diff --git a/spec/requests/admin/configs_spec.rb b/spec/requests/admin/configs_spec.rb
index 39b94e601..7ea2a3e1d 100644
--- a/spec/requests/admin/configs_spec.rb
+++ b/spec/requests/admin/configs_spec.rb
@@ -634,122 +634,152 @@ RSpec.describe "/admin/config", type: :request do
end
describe "Rate Limits and spam" do
- it "updates rate_limit_follow_count_daily" do
- default_value = SiteConfig.get_default(:rate_limit_follow_count_daily)
+ it "updates follow_count_daily" do
+ default_value = Settings::RateLimit.get_default(:follow_count_daily)
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(default_value).to(3)
+ post admin_settings_rate_limits_path, params: {
+ settings_rate_limit: { follow_count_daily: 3 },
+ confirmation: confirmation_message
+ }
+ end.to change(Settings::RateLimit, :follow_count_daily).from(default_value).to(3)
end
- it "updates rate_limit_comment_creation" do
- default_value = SiteConfig.get_default(:rate_limit_comment_creation)
+ it "updates comment_creation" do
+ default_value = Settings::RateLimit.get_default(:comment_creation)
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(default_value).to(3)
+ post admin_settings_rate_limits_path, params: {
+ settings_rate_limit: { comment_creation: 3 },
+ confirmation: confirmation_message
+ }
+ end.to change(Settings::RateLimit, :comment_creation).from(default_value).to(3)
end
- it "updates rate_limit_published_article_creation" do
- default_value = SiteConfig.get_default(:rate_limit_published_article_creation)
+ it "updates published_article_creation" do
+ default_value = Settings::RateLimit.get_default(:published_article_creation)
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(default_value).to(3)
+ post admin_settings_rate_limits_path, params: {
+ settings_rate_limit: { published_article_creation: 3 },
+ confirmation: confirmation_message
+ }
+ end.to change(Settings::RateLimit, :published_article_creation).from(default_value).to(3)
end
- it "updates rate_limit_published_article_antispam_creation" do
- default_value = SiteConfig.get_default(:rate_limit_published_article_antispam_creation)
+ it "updates published_article_antispam_creation" do
+ default_value = Settings::RateLimit.get_default(:published_article_antispam_creation)
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(default_value).to(3)
+ post admin_settings_rate_limits_path, params: {
+ settings_rate_limit: { published_article_antispam_creation: 3 },
+ confirmation: confirmation_message
+ }
+ end.to change(Settings::RateLimit, :published_article_antispam_creation).from(default_value).to(3)
end
- it "updates rate_limit_organization_creation" do
- default_value = SiteConfig.get_default(:rate_limit_organization_creation)
+ it "updates organization_creation" do
+ default_value = Settings::RateLimit.get_default(:organization_creation)
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(default_value).to(3)
+ post admin_settings_rate_limits_path, params: {
+ settings_rate_limit: { organization_creation: 3 },
+ confirmation: confirmation_message
+ }
+ end.to change(Settings::RateLimit, :organization_creation).from(default_value).to(3)
end
- it "updates rate_limit_image_upload" do
- default_value = SiteConfig.get_default(:rate_limit_image_upload)
+ it "updates image_upload" do
+ default_value = Settings::RateLimit.get_default(:image_upload)
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(default_value).to(3)
+ post admin_settings_rate_limits_path, params: {
+ settings_rate_limit: { image_upload: 3 },
+ confirmation: confirmation_message
+ }
+ end.to change(Settings::RateLimit, :image_upload).from(default_value).to(3)
end
- it "updates rate_limit_email_recipient" do
- default_value = SiteConfig.get_default(:rate_limit_email_recipient)
+ it "updates email_recipient" do
+ default_value = Settings::RateLimit.get_default(:email_recipient)
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(default_value).to(3)
+ post admin_settings_rate_limits_path, params: {
+ settings_rate_limit: { email_recipient: 3 },
+ confirmation: confirmation_message
+ }
+ end.to change(Settings::RateLimit, :email_recipient).from(default_value).to(3)
end
- it "updates rate_limit_user_subscription_creation" do
- default_value = SiteConfig.get_default(:rate_limit_user_subscription_creation)
+ it "updates user_subscription_creation" do
+ default_value = Settings::RateLimit.get_default(:user_subscription_creation)
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(default_value).to(1)
+ post admin_settings_rate_limits_path, params: {
+ settings_rate_limit: { user_subscription_creation: 1 },
+ confirmation: confirmation_message
+ }
+ end.to change(Settings::RateLimit, :user_subscription_creation).from(default_value).to(1)
end
- it "updates rate_limit_article_update" do
- default_value = SiteConfig.get_default(:rate_limit_article_update)
+ it "updates article_update" do
+ default_value = Settings::RateLimit.get_default(:article_update)
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(default_value).to(3)
+ post admin_settings_rate_limits_path, params: {
+ settings_rate_limit: { article_update: 3 },
+ confirmation: confirmation_message
+ }
+ end.to change(Settings::RateLimit, :article_update).from(default_value).to(3)
end
- it "updates rate_limit_user_update" do
+ it "updates 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).to(3)
+ post admin_settings_rate_limits_path, params: {
+ settings_rate_limit: { user_update: 3 },
+ confirmation: confirmation_message
+ }
+ end.to change(Settings::RateLimit, :user_update).to(3)
end
- it "updates rate_limit_feedback_message_creation" do
- default_value = SiteConfig.get_default(:rate_limit_feedback_message_creation)
+ it "updates feedback_message_creation" do
+ default_value = Settings::RateLimit.get_default(:feedback_message_creation)
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(default_value).to(3)
+ post admin_settings_rate_limits_path, params: {
+ settings_rate_limit: { feedback_message_creation: 3 },
+ confirmation: confirmation_message
+ }
+ end.to change(Settings::RateLimit, :feedback_message_creation).from(default_value).to(3)
end
- it "updates rate_limit_listing_creation" do
- default_value = SiteConfig.get_default(:rate_limit_listing_creation)
+ it "updates listing_creation" do
+ default_value = Settings::RateLimit.get_default(:listing_creation)
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(default_value).to(3)
+ post admin_settings_rate_limits_path, params: {
+ settings_rate_limit: { listing_creation: 3 },
+ confirmation: confirmation_message
+ }
+ end.to change(Settings::RateLimit, :listing_creation).from(default_value).to(3)
end
- it "updates rate_limit_reaction_creation" do
- default_value = SiteConfig.get_default(:rate_limit_reaction_creation)
+ it "updates reaction_creation" do
+ default_value = Settings::RateLimit.get_default(:reaction_creation)
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(default_value).to(3)
+ post admin_settings_rate_limits_path, params: {
+ settings_rate_limit: { reaction_creation: 3 },
+ confirmation: confirmation_message
+ }
+ end.to change(Settings::RateLimit, :reaction_creation).from(default_value).to(3)
end
- it "updates rate_limit_send_email_confirmation" do
- default_value = SiteConfig.get_default(:rate_limit_send_email_confirmation)
+ it "updates send_email_confirmation" do
+ default_value = Settings::RateLimit.get_default(:send_email_confirmation)
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(default_value).to(3)
+ post admin_settings_rate_limits_path, params: {
+ settings_rate_limit: { send_email_confirmation: 3 },
+ confirmation: confirmation_message
+ }
+ end.to change(Settings::RateLimit, :send_email_confirmation).from(default_value).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"])
+ post admin_settings_rate_limits_path, params: {
+ settings_rate_limit: { spam_trigger_terms: spam_trigger_terms },
+ confirmation: confirmation_message
+ }
+ expect(Settings::RateLimit.spam_trigger_terms).to eq(["hey", "pokemon go hack"])
end
it "updates recaptcha_site_key and recaptcha_secret_key" do
diff --git a/spec/requests/follows_create_spec.rb b/spec/requests/follows_create_spec.rb
index 903b4c77c..0cde41da2 100644
--- a/spec/requests/follows_create_spec.rb
+++ b/spec/requests/follows_create_spec.rb
@@ -22,7 +22,7 @@ RSpec.describe "Follows #create", type: :request do
allow(rate_limit_checker)
.to receive(:user_today_follow_count)
- .and_return(SiteConfig.rate_limit_follow_count_daily + 1)
+ .and_return(Settings::RateLimit.follow_count_daily + 1)
allow(RateLimitChecker)
.to receive(:new)
diff --git a/spec/services/rate_limit_checker_spec.rb b/spec/services/rate_limit_checker_spec.rb
index da14fba9c..cd5ad03ec 100644
--- a/spec/services/rate_limit_checker_spec.rb
+++ b/spec/services/rate_limit_checker_spec.rb
@@ -23,7 +23,8 @@ RSpec.describe RateLimitChecker, type: :service do
it "raises an error if no unique component is present for a cache key" do
action = described_class::ACTION_LIMITERS.keys.first
limiter = described_class.new(build(:user))
- expect { limiter.limit_by_action(action) }.to raise_error("Invalid Cache Key: no unique component present")
+ expect { limiter.limit_by_action(action) }
+ .to raise_error("Invalid Cache Key: no unique component present")
end
# We check the excepted limits against the database, rather than our cache.
@@ -34,7 +35,7 @@ RSpec.describe RateLimitChecker, type: :service do
it "returns true if #{action} limit has been reached" do
allow(Rails.cache).to receive(:read).with(
cache_key(action), raw: true
- ).and_return(SiteConfig.public_send("rate_limit_#{action}") + 1)
+ ).and_return(Settings::RateLimit.public_send(action) + 1)
expect(rate_limit_checker.limit_by_action(action)).to be(true)
end
@@ -42,7 +43,7 @@ RSpec.describe RateLimitChecker, type: :service do
it "returns false if #{action} limit has NOT been reached" do
allow(Rails.cache).to receive(:read).with(
cache_key(action), raw: true
- ).and_return(SiteConfig.public_send("rate_limit_#{action}"))
+ ).and_return(Settings::RateLimit.public_send(action))
expect(rate_limit_checker.limit_by_action(action)).to be(false)
end
@@ -50,7 +51,7 @@ RSpec.describe RateLimitChecker, type: :service do
context "when creating comments" do
before do
- allow(SiteConfig).to receive(:rate_limit_comment_creation).and_return(1)
+ allow(Settings::RateLimit).to receive(:comment_creation).and_return(1)
end
it "returns true if too many comments at once" do
@@ -64,13 +65,13 @@ RSpec.describe RateLimitChecker, type: :service do
end
it "returns true if too many published articles at once and potentially spammy" do
- allow(SiteConfig).to receive(:rate_limit_published_article_antispam_creation).and_return(1)
+ allow(Settings::RateLimit).to receive(:published_article_antispam_creation).and_return(1)
create_list(:article, 2, user_id: user.id, published: true)
expect(rate_limit_checker.limit_by_action("published_article_antispam_creation")).to be(true)
end
it "returns true if too many published articles at once" do
- allow(SiteConfig).to receive(:rate_limit_published_article_creation).and_return(1)
+ allow(Settings::RateLimit).to receive(:published_article_creation).and_return(1)
create_list(:article, 2, user_id: user.id, published: true)
expect(rate_limit_checker.limit_by_action("published_article_creation")).to be(true)
end
@@ -78,7 +79,7 @@ RSpec.describe RateLimitChecker, type: :service do
it "returns true if a user has followed more than
accounts today" do
allow(rate_limit_checker)
.to receive(:user_today_follow_count)
- .and_return(SiteConfig.rate_limit_follow_count_daily + 1)
+ .and_return(Settings::RateLimit.follow_count_daily + 1)
expect(rate_limit_checker.limit_by_action("follow_account")).to be(true)
end
@@ -86,7 +87,7 @@ RSpec.describe RateLimitChecker, type: :service do
it "returns false if a user's following_users_count is less than " do
allow(user)
.to receive(:following_users_count)
- .and_return(SiteConfig.rate_limit_follow_count_daily - 1)
+ .and_return(Settings::RateLimit.follow_count_daily - 1)
expect(rate_limit_checker.limit_by_action("follow_account")).to be(false)
end
@@ -94,7 +95,7 @@ RSpec.describe RateLimitChecker, type: :service do
it "returns false if a user has followed less than accounts today" do
allow(rate_limit_checker)
.to receive(:user_today_follow_count)
- .and_return(SiteConfig.rate_limit_follow_count_daily)
+ .and_return(Settings::RateLimit.follow_count_daily)
expect(rate_limit_checker.limit_by_action("follow_account")).to be(false)
end
@@ -110,7 +111,7 @@ RSpec.describe RateLimitChecker, type: :service do
it "logs a rate limit hit to datadog" do
allow(Rails.cache)
.to receive(:read).with("#{user.id}_organization_creation", raw: true)
- .and_return(SiteConfig.rate_limit_organization_creation + 1)
+ .and_return(Settings::RateLimit.organization_creation + 1)
allow(ForemStatsClient).to receive(:increment)
described_class.new(user).limit_by_action("organization_creation")
@@ -147,7 +148,7 @@ RSpec.describe RateLimitChecker, type: :service do
describe "#limit_by_email_recipient_address" do
before do
- allow(SiteConfig).to receive(:rate_limit_email_recipient).and_return(1)
+ allow(Settings::RateLimit).to receive(:email_recipient).and_return(1)
end
it "returns true if too many emails are sent to the same recipient" do