diff --git a/app/models/saved_search.rb b/app/models/saved_search.rb index df4c2dddc..e384da9a1 100644 --- a/app/models/saved_search.rb +++ b/app/models/saved_search.rb @@ -8,7 +8,7 @@ class SavedSearch < ApplicationRecord before_validation :normalize_query before_validation :normalize_labels validates :query, presence: true - validate :validate_count + validate :validate_count, on: :create scope :labeled, ->(label) { where_array_includes_any_lower(:labels, [normalize_label(label)]) } scope :has_tag, ->(name) { where_regex(:query, "(^| )[~-]?#{Regexp.escape(name)}( |$)", flags: "i") } @@ -173,7 +173,7 @@ class SavedSearch < ApplicationRecord end def validate_count - if user.saved_searches.count + 1 > user.max_saved_searches + if user.saved_searches.count >= user.max_saved_searches self.errors[:user] << "can only have up to #{user.max_saved_searches} " + "saved search".pluralize(user.max_saved_searches) end end diff --git a/test/unit/saved_search_test.rb b/test/unit/saved_search_test.rb index b875fc021..75cbcf8f6 100644 --- a/test/unit/saved_search_test.rb +++ b/test/unit/saved_search_test.rb @@ -161,14 +161,23 @@ class SavedSearchTest < ActiveSupport::TestCase context "A user with max saved searches" do setup do - @user = FactoryBot.create(:gold_user) - CurrentUser.user = @user - User.any_instance.stubs(:max_saved_searches).returns(0) - @saved_search = @user.saved_searches.create(:query => "xxx") + @user = create(:gold_user) + User.any_instance.stubs(:max_saved_searches).returns(1) + @ss1 = create(:saved_search, user: @user) end should "not be able to create another saved search" do - assert_equal(["You can only have up to 0 saved searches"], @saved_search.errors.full_messages) + @ss2 = build(:saved_search, user: @user) + + assert_equal(false, @ss2.valid?) + assert_equal(["You can only have up to 1 saved search"], @ss2.errors.full_messages) + end + + should "be able to edit existing saved searches" do + @ss1.update!(query: "blah") + + assert_equal(true, @ss1.valid?) + assert_equal("blah", @ss1.query) end end end