Adding visible products method to permissions

This commit is contained in:
Rob Harrington
2015-05-20 15:53:10 +10:00
parent 01d4cf6ecf
commit 8132f07d88
2 changed files with 48 additions and 19 deletions

View File

@@ -108,8 +108,18 @@ module OpenFoodNetwork
def editable_products
managed_enterprise_products_ids = managed_enterprise_products.pluck :id
permitted_enterprise_products_ids = related_enterprise_products.pluck :id
Spree::Product.where('id IN (?)', managed_enterprise_products_ids + permitted_enterprise_products_ids)
permitted_enterprise_products_ids = products_supplied_by(
related_enterprises_granting(:manage_products).pluck(:id)
).pluck :id
Spree::Product.where('spree_products.id IN (?)', managed_enterprise_products_ids | permitted_enterprise_products_ids)
end
def visible_products
managed_enterprise_products_ids = managed_enterprise_products.pluck :id
permitted_enterprise_products_ids = products_supplied_by(
related_enterprises_granting(:manage_products).pluck(:id) | related_enterprises_granting(:add_to_order_cycle).pluck(:id)
).pluck :id
Spree::Product.where('spree_products.id IN (?)', managed_enterprise_products_ids | permitted_enterprise_products_ids)
end
def managed_product_enterprises
@@ -181,8 +191,8 @@ module OpenFoodNetwork
Spree::Product.managed_by(@user)
end
def related_enterprise_products
Spree::Product.where('supplier_id IN (?)', related_enterprises_granting(:manage_products))
def products_supplied_by(suppliers)
Spree::Product.where('supplier_id IN (?)', suppliers)
end
end
end

View File

@@ -165,12 +165,12 @@ module OpenFoodNetwork
end
describe "finding editable products" do
let!(:p1) { create(:simple_product) }
let!(:p2) { create(:simple_product) }
let!(:p1) { create(:simple_product, supplier: create(:supplier_enterprise) ) }
let!(:p2) { create(:simple_product, supplier: create(:supplier_enterprise) ) }
before do
permissions.stub(:managed_enterprise_products) { Spree::Product.where('1=0') }
permissions.stub(:related_enterprise_products) { Spree::Product.where('1=0') }
allow(permissions).to receive(:related_enterprises_granting).with(:manage_products) { Enterprise.where("1=0") }
end
it "returns products produced by managed enterprises" do
@@ -179,11 +179,41 @@ module OpenFoodNetwork
end
it "returns products produced by permitted enterprises" do
permissions.stub(:related_enterprise_products) { Spree::Product.where(id: p2) }
allow(permissions).to receive(:related_enterprises_granting).
with(:manage_products) { Enterprise.where(id: p2.supplier) }
permissions.editable_products.should == [p2]
end
end
describe "finding visible products" do
let!(:p1) { create(:simple_product, supplier: create(:supplier_enterprise) ) }
let!(:p2) { create(:simple_product, supplier: create(:supplier_enterprise) ) }
let!(:p3) { create(:simple_product, supplier: create(:supplier_enterprise) ) }
before do
permissions.stub(:managed_enterprise_products) { Spree::Product.where("1=0") }
allow(permissions).to receive(:related_enterprises_granting).with(:manage_products) { Enterprise.where("1=0") }
allow(permissions).to receive(:related_enterprises_granting).with(:add_to_order_cycle) { Enterprise.where("1=0") }
end
it "returns products produced by managed enterprises" do
permissions.stub(:managed_enterprise_products) { Spree::Product.where(id: p1) }
permissions.visible_products.should == [p1]
end
it "returns products produced by enterprises that have granted manage products" do
allow(permissions).to receive(:related_enterprises_granting).
with(:manage_products) { Enterprise.where(id: p2.supplier) }
permissions.visible_products.should == [p2]
end
it "returns products produced by enterprises that have granted P-OC" do
allow(permissions).to receive(:related_enterprises_granting).
with(:add_to_order_cycle) { Enterprise.where(id: p3.supplier) }
permissions.visible_products.should == [p3]
end
end
describe "finding enterprises that we manage products for" do
let(:e) { double(:enterprise) }
@@ -232,17 +262,6 @@ module OpenFoodNetwork
end
end
describe "finding the supplied products of related enterprises" do
let!(:e) { create(:enterprise) }
let!(:p) { create(:simple_product, supplier: e) }
it "returns supplied products" do
permissions.should_receive(:related_enterprises_granting).with(:manage_products) { [e] }
permissions.send(:related_enterprise_products).should == [p]
end
end
describe "finding orders that are visible in reports" do
let(:distributor) { create(:distributor_enterprise) }
let(:coordinator) { create(:distributor_enterprise) }