From fcb14f32d2c1ae4fe9c47fe89b1185258f2647a4 Mon Sep 17 00:00:00 2001 From: Rob Harrington Date: Fri, 19 Dec 2014 09:33:04 +1100 Subject: [PATCH] Validating user input for shopfront taxon order --- app/models/enterprise.rb | 7 +++++++ spec/models/enterprise_spec.rb | 35 ++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/app/models/enterprise.rb b/app/models/enterprise.rb index 51c12fa011..f0337adbec 100644 --- a/app/models/enterprise.rb +++ b/app/models/enterprise.rb @@ -56,6 +56,7 @@ class Enterprise < ActiveRecord::Base validates :address, presence: true, associated: true validates :email, presence: true validates_presence_of :owner + validate :shopfront_taxons validate :enforce_ownership_limit, if: lambda { owner_id_changed? && !owner_id.nil? } validates_length_of :description, :maximum => 255 @@ -341,4 +342,10 @@ class Enterprise < ActiveRecord::Base errors.add(:owner, "^#{owner.email} is not permitted to own any more enterprises (limit is #{owner.enterprise_limit}).") end end + + def shopfront_taxons + unless preferred_shopfront_taxon_order =~ /\A((\d+,)*\d+)?\z/ + errors.add(:shopfront_taxon_order, "must contain a list of taxons.") + end + end end diff --git a/spec/models/enterprise_spec.rb b/spec/models/enterprise_spec.rb index 50b8204a9c..b65ab8b8e4 100644 --- a/spec/models/enterprise_spec.rb +++ b/spec/models/enterprise_spec.rb @@ -175,6 +175,41 @@ describe Enterprise do e = create(:enterprise, owner: nil) }.to raise_error ActiveRecord::RecordInvalid, "Validation failed: Owner can't be blank" end + + describe "preferred_shopfront_taxon_order" do + it "empty strings are valid" do + enterprise = build(:enterprise, preferred_shopfront_taxon_order: "") + expect(enterprise).to be_valid + end + + it "a single integer is valid" do + enterprise = build(:enterprise, preferred_shopfront_taxon_order: "11") + expect(enterprise).to be_valid + end + + it "comma delimited integers are valid" do + enterprise = build(:enterprise, preferred_shopfront_taxon_order: "1,2,3") + expect(enterprise).to be_valid + enterprise = build(:enterprise, preferred_shopfront_taxon_order: "1,22,333") + expect(enterprise).to be_valid + end + + it "commas at the beginning and end are disallowed" do + enterprise = build(:enterprise, preferred_shopfront_taxon_order: ",1,2,3") + expect(enterprise).to be_invalid + enterprise = build(:enterprise, preferred_shopfront_taxon_order: "1,2,3,") + expect(enterprise).to be_invalid + end + + it "any other characters are invalid" do + enterprise = build(:enterprise, preferred_shopfront_taxon_order: "a1,2,3") + expect(enterprise).to be_invalid + enterprise = build(:enterprise, preferred_shopfront_taxon_order: ".1,2,3") + expect(enterprise).to be_invalid + enterprise = build(:enterprise, preferred_shopfront_taxon_order: " 1,2,3") + expect(enterprise).to be_invalid + end + end end describe "delegations" do