mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-03-27 06:05:19 +00:00
When a user is created with the same email as existing customers Then the user is associated with these customers So that the user can access the private shops where he has been invited to before signup
126 lines
4.2 KiB
Ruby
126 lines
4.2 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe Spree.user_class do
|
|
describe "associations" do
|
|
it { should have_many(:owned_enterprises) }
|
|
|
|
describe "addresses" do
|
|
let(:user) { create(:user, bill_address: create(:address)) }
|
|
|
|
it 'updates billing address with new address' do
|
|
old_bill_address = user.bill_address
|
|
new_bill_address = create(:address, firstname: 'abc')
|
|
|
|
user.update_attributes(bill_address_attributes: new_bill_address.clone.attributes.merge('id' => old_bill_address.id))
|
|
|
|
expect(user.bill_address.id).to eq old_bill_address.id
|
|
expect(user.bill_address.firstname).to eq new_bill_address.firstname
|
|
end
|
|
|
|
it 'creates new shipping address' do
|
|
new_ship_address = create(:address, firstname: 'abc')
|
|
|
|
user.update_attributes(ship_address_attributes: new_ship_address.clone.attributes)
|
|
|
|
expect(user.ship_address.id).not_to eq new_ship_address.id
|
|
expect(user.ship_address.firstname).to eq new_ship_address.firstname
|
|
end
|
|
end
|
|
|
|
describe "enterprise ownership" do
|
|
let(:u1) { create(:user, enterprise_limit: 2) }
|
|
let(:u2) { create(:user, enterprise_limit: 1) }
|
|
let!(:e1) { create(:enterprise, owner: u1) }
|
|
let!(:e2) { create(:enterprise, owner: u1) }
|
|
|
|
it "provides access to owned enterprises" do
|
|
expect(u1.owned_enterprises(:reload)).to include e1, e2
|
|
end
|
|
|
|
it "enforces the limit on the number of enterprise owned" do
|
|
expect(u2.owned_enterprises(:reload)).to eq []
|
|
u2.owned_enterprises << e1
|
|
expect { u2.save! }.to_not raise_error
|
|
expect do
|
|
u2.owned_enterprises << e2
|
|
u2.save!
|
|
end.to raise_error ActiveRecord::RecordInvalid, "Validation failed: #{u2.email} is not permitted to own any more enterprises (limit is 1)."
|
|
end
|
|
end
|
|
|
|
describe "group ownership" do
|
|
let(:u1) { create(:user) }
|
|
let(:u2) { create(:user) }
|
|
let!(:g1) { create(:enterprise_group, owner: u1) }
|
|
let!(:g2) { create(:enterprise_group, owner: u1) }
|
|
let!(:g3) { create(:enterprise_group, owner: u2) }
|
|
|
|
it "provides access to owned groups" do
|
|
expect(u1.owned_groups(:reload)).to match_array([g1, g2])
|
|
expect(u2.owned_groups(:reload)).to match_array([g3])
|
|
end
|
|
end
|
|
|
|
it "loads a user's customer representation at a particular enterprise" do
|
|
u = create(:user)
|
|
e = create(:enterprise)
|
|
c = create(:customer, user: u, enterprise: e)
|
|
|
|
u.customer_of(e).should == c
|
|
end
|
|
end
|
|
|
|
context "#create" do
|
|
it "should send a confirmation email" do
|
|
expect do
|
|
create(:user, confirmed_at: nil)
|
|
end.to enqueue_job Delayed::PerformableMethod
|
|
expect(Delayed::Job.last.payload_object.method_name).to eq(:send_on_create_confirmation_instructions_without_delay)
|
|
end
|
|
|
|
context "with the the same email as existing customers" do
|
|
let(:email) { Faker::Internet.email }
|
|
let!(:customer1) { create(:customer, user: nil, email: email) }
|
|
let!(:customer2) { create(:customer, user: nil, email: email) }
|
|
let!(:user) { create(:user, email: email) }
|
|
|
|
it "should associate these customers with the created user" do
|
|
expect(user.customers.reload).to include customer1, customer2
|
|
end
|
|
end
|
|
end
|
|
|
|
context "confirming email" do
|
|
it "should send a welcome email" do
|
|
expect do
|
|
create(:user, confirmed_at: nil).confirm!
|
|
end.to enqueue_job ConfirmSignupJob
|
|
end
|
|
end
|
|
|
|
describe "known_users" do
|
|
let!(:u1) { create(:user) }
|
|
let!(:u2) { create(:user) }
|
|
let!(:u3) { create(:user) }
|
|
let!(:e1) { create(:enterprise, owner: u1, users: [u1, u2]) }
|
|
|
|
describe "as an enterprise user" do
|
|
it "returns a list of users which manage shared enterprises" do
|
|
expect(u1.known_users).to include u1, u2
|
|
expect(u1.known_users).to_not include u3
|
|
expect(u2.known_users).to include u1, u2
|
|
expect(u2.known_users).to_not include u3
|
|
expect(u3.known_users).to_not include u1, u2, u3
|
|
end
|
|
end
|
|
|
|
describe "as admin" do
|
|
let(:admin) { create(:admin_user) }
|
|
|
|
it "returns all users" do
|
|
expect(admin.known_users).to include u1, u2, u3
|
|
end
|
|
end
|
|
end
|
|
end
|