mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
User validates the number of enterprises owned
This commit is contained in:
@@ -9,6 +9,8 @@ Spree.user_class.class_eval do
|
||||
attr_accessible :enterprise_ids, :enterprise_roles_attributes
|
||||
after_create :send_signup_confirmation
|
||||
|
||||
validate :owned_enterprises_count
|
||||
|
||||
def build_enterprise_roles
|
||||
Enterprise.all.each do |enterprise|
|
||||
unless self.enterprise_roles.find_by_enterprise_id enterprise.id
|
||||
@@ -20,4 +22,12 @@ Spree.user_class.class_eval do
|
||||
def send_signup_confirmation
|
||||
Spree::UserMailer.signup_confirmation(self).deliver
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def owned_enterprises_count
|
||||
if owned_enterprises.size > enterprise_limit
|
||||
errors.add(:owned_enterprises, "^The nominated user is not permitted to own own any more enterprises.")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -3,17 +3,28 @@ describe Spree.user_class do
|
||||
it { should have_many(:owned_enterprises) }
|
||||
|
||||
describe "enterprise ownership" do
|
||||
let(:u) { create(:user) }
|
||||
let(:e1) { create(:enterprise, owner: u) }
|
||||
let(:e2) { create(:enterprise, owner: u) }
|
||||
let(:u1) { create(:user) }
|
||||
let(:u2) { create(:user) }
|
||||
let(:e1) { create(:enterprise, owner: u1) }
|
||||
let(:e2) { create(:enterprise, owner: u1) }
|
||||
|
||||
it "provides access to owned enteprises" do
|
||||
expect(u.owned_enterprises).to include e1, e2
|
||||
expect(u1.owned_enterprises).to include e1, e2
|
||||
end
|
||||
|
||||
it "enforces the limit on the number of enterprise owned" do
|
||||
expect(u2.owned_enterprises).to eq []
|
||||
u2.owned_enterprises << e1
|
||||
u2.owned_enterprises << e2
|
||||
expect {
|
||||
u2.save!
|
||||
}.to raise_error ActiveRecord::RecordInvalid, "Validation failed: The nominated user is not permitted to own own any more enterprises."
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "#create" do
|
||||
|
||||
it "should send a signup email" do
|
||||
Spree::UserMailer.should_receive(:signup_confirmation).and_return(double(:deliver => true))
|
||||
create(:user)
|
||||
|
||||
Reference in New Issue
Block a user