mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-04-04 07:09:14 +00:00
Revert a4be0ff..7b89e6a for deployment
This commit is contained in:
@@ -2,7 +2,7 @@ angular.module("ofn.admin").factory 'EnterpriseRelationships', ($http, enterpris
|
|||||||
new class EnterpriseRelationships
|
new class EnterpriseRelationships
|
||||||
create_errors: ""
|
create_errors: ""
|
||||||
all_permissions: [
|
all_permissions: [
|
||||||
'add_to_order_cycle'
|
'add_products_to_order_cycle'
|
||||||
'manage_products'
|
'manage_products'
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -24,5 +24,5 @@ angular.module("ofn.admin").factory 'EnterpriseRelationships', ($http, enterpris
|
|||||||
|
|
||||||
permission_presentation: (permission) ->
|
permission_presentation: (permission) ->
|
||||||
switch permission
|
switch permission
|
||||||
when "add_to_order_cycle" then "can add to order cycle"
|
when "add_products_to_order_cycle" then "can add products to order cycle from"
|
||||||
when "manage_products" then "can manage the products of"
|
when "manage_products" then "can manage the products of"
|
||||||
@@ -1,10 +1,7 @@
|
|||||||
require 'open_food_network/permissions'
|
|
||||||
require 'open_food_network/order_cycle_form_applicator'
|
require 'open_food_network/order_cycle_form_applicator'
|
||||||
|
|
||||||
module Admin
|
module Admin
|
||||||
class OrderCyclesController < ResourceController
|
class OrderCyclesController < ResourceController
|
||||||
include OrderCyclesHelper
|
|
||||||
|
|
||||||
before_filter :load_order_cycle_set, :only => :index
|
before_filter :load_order_cycle_set, :only => :index
|
||||||
|
|
||||||
def show
|
def show
|
||||||
@@ -26,7 +23,7 @@ module Admin
|
|||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
if @order_cycle.save
|
if @order_cycle.save
|
||||||
OpenFoodNetwork::OrderCycleFormApplicator.new(@order_cycle, order_cycle_permitted_enterprises).go!
|
OpenFoodNetwork::OrderCycleFormApplicator.new(@order_cycle, managed_enterprises).go!
|
||||||
|
|
||||||
flash[:notice] = 'Your order cycle has been created.'
|
flash[:notice] = 'Your order cycle has been created.'
|
||||||
format.html { redirect_to admin_order_cycles_path }
|
format.html { redirect_to admin_order_cycles_path }
|
||||||
@@ -43,7 +40,7 @@ module Admin
|
|||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
if @order_cycle.update_attributes(params[:order_cycle])
|
if @order_cycle.update_attributes(params[:order_cycle])
|
||||||
OpenFoodNetwork::OrderCycleFormApplicator.new(@order_cycle, order_cycle_permitted_enterprises).go!
|
OpenFoodNetwork::OrderCycleFormApplicator.new(@order_cycle, managed_enterprises).go!
|
||||||
|
|
||||||
flash[:notice] = 'Your order cycle has been updated.'
|
flash[:notice] = 'Your order cycle has been updated.'
|
||||||
format.html { redirect_to admin_order_cycles_path }
|
format.html { redirect_to admin_order_cycles_path }
|
||||||
|
|||||||
@@ -3,20 +3,8 @@ module OrderCyclesHelper
|
|||||||
@current_order_cycle ||= current_order(false).andand.order_cycle
|
@current_order_cycle ||= current_order(false).andand.order_cycle
|
||||||
end
|
end
|
||||||
|
|
||||||
def order_cycle_permitted_enterprises
|
|
||||||
OpenFoodNetwork::Permissions.new(spree_current_user).order_cycle_enterprises
|
|
||||||
end
|
|
||||||
|
|
||||||
def order_cycle_producer_enterprises
|
|
||||||
order_cycle_permitted_enterprises.is_primary_producer.by_name
|
|
||||||
end
|
|
||||||
|
|
||||||
def coordinating_enterprises
|
def coordinating_enterprises
|
||||||
order_cycle_hub_enterprises
|
Enterprise.is_distributor.managed_by(spree_current_user).order('name')
|
||||||
end
|
|
||||||
|
|
||||||
def order_cycle_hub_enterprises
|
|
||||||
order_cycle_permitted_enterprises.is_distributor.by_name
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def order_cycle_local_remote_class(distributor, order_cycle)
|
def order_cycle_local_remote_class(distributor, order_cycle)
|
||||||
|
|||||||
@@ -9,20 +9,12 @@ class EnterpriseRelationship < ActiveRecord::Base
|
|||||||
scope :with_enterprises,
|
scope :with_enterprises,
|
||||||
joins('LEFT JOIN enterprises AS parent_enterprises ON parent_enterprises.id = enterprise_relationships.parent_id').
|
joins('LEFT JOIN enterprises AS parent_enterprises ON parent_enterprises.id = enterprise_relationships.parent_id').
|
||||||
joins('LEFT JOIN enterprises AS child_enterprises ON child_enterprises.id = enterprise_relationships.child_id')
|
joins('LEFT JOIN enterprises AS child_enterprises ON child_enterprises.id = enterprise_relationships.child_id')
|
||||||
|
scope :by_name, with_enterprises.order('parent_enterprises.name, child_enterprises.name')
|
||||||
|
|
||||||
scope :involving_enterprises, ->(enterprises) {
|
scope :involving_enterprises, ->(enterprises) {
|
||||||
where('parent_id IN (?) OR child_id IN (?)', enterprises, enterprises)
|
where('parent_id IN (?) OR child_id IN (?)', enterprises, enterprises)
|
||||||
}
|
}
|
||||||
|
|
||||||
scope :permitting, ->(enterprises) { where('child_id IN (?)', enterprises) }
|
|
||||||
|
|
||||||
scope :with_permission, ->(permission) {
|
|
||||||
joins(:permissions).
|
|
||||||
where('enterprise_relationship_permissions.name = ?', permission)
|
|
||||||
}
|
|
||||||
|
|
||||||
scope :by_name, with_enterprises.order('child_enterprises.name, parent_enterprises.name')
|
|
||||||
|
|
||||||
|
|
||||||
def permissions_list=(perms)
|
def permissions_list=(perms)
|
||||||
perms.andand.each { |name| permissions.build name: name }
|
perms.andand.each { |name| permissions.build name: name }
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
%td {{ enterprise_relationship.child_name }}
|
%td {{ enterprise_relationship.parent_name }}
|
||||||
%td
|
%td
|
||||||
%ul
|
%ul
|
||||||
%li{"ng-repeat" => "permission in enterprise_relationship.permissions"}
|
%li{"ng-repeat" => "permission in enterprise_relationship.permissions"}
|
||||||
{{ EnterpriseRelationships.permission_presentation(permission.name) }}
|
{{ EnterpriseRelationships.permission_presentation(permission.name) }}
|
||||||
%td {{ enterprise_relationship.parent_name }}
|
%td {{ enterprise_relationship.child_name }}
|
||||||
%td.actions
|
%td.actions
|
||||||
%a.delete-enterprise-relationship.icon-trash.no-text{'ng-click' => 'delete(enterprise_relationship)'}
|
%a.delete-enterprise-relationship.icon-trash.no-text{'ng-click' => 'delete(enterprise_relationship)'}
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
%tr
|
%tr
|
||||||
%td
|
|
||||||
%select{name: "enterprise_relationship_child_id", "ng-model" => "child_id", "ng-options" => "e.id as e.name for e in Enterprises.all_enterprises"}
|
|
||||||
%td
|
|
||||||
%div{"ng-repeat" => "permission in EnterpriseRelationships.all_permissions"}
|
|
||||||
%label
|
|
||||||
%input{type: "checkbox", "ng-model" => "permissions[permission]"}
|
|
||||||
{{ EnterpriseRelationships.permission_presentation(permission) }}
|
|
||||||
%td
|
%td
|
||||||
%select{name: "enterprise_relationship_parent_id", "ng-model" => "parent_id", "ng-options" => "e.id as e.name for e in Enterprises.my_enterprises"}
|
%select{name: "enterprise_relationship_parent_id", "ng-model" => "parent_id", "ng-options" => "e.id as e.name for e in Enterprises.my_enterprises"}
|
||||||
|
%td
|
||||||
|
permits
|
||||||
|
/ %div{"ng-repeat" => "permission in EnterpriseRelationships.all_permissions"}
|
||||||
|
/ %label
|
||||||
|
/ %input{type: "checkbox", "ng-model" => "permissions[permission]"}
|
||||||
|
/ {{ EnterpriseRelationships.permission_presentation(permission) }}
|
||||||
|
%td
|
||||||
|
%select{name: "enterprise_relationship_child_id", "ng-model" => "child_id", "ng-options" => "e.id as e.name for e in Enterprises.all_enterprises"}
|
||||||
%td.actions
|
%td.actions
|
||||||
%input{type: "button", value: "Create", "ng-click" => "create()"}
|
%input{type: "button", value: "Create", "ng-click" => "create()"}
|
||||||
.errors {{ EnterpriseRelationships.create_errors }}
|
.errors {{ EnterpriseRelationships.create_errors }}
|
||||||
|
|||||||
@@ -23,4 +23,4 @@
|
|||||||
|
|
||||||
= f.submit 'Add fee', 'ng-click' => 'addExchangeFee($event, exchange)'
|
= f.submit 'Add fee', 'ng-click' => 'addExchangeFee($event, exchange)'
|
||||||
%td.actions
|
%td.actions
|
||||||
%a{'ng-click' => 'removeExchange($event, exchange)', :class => "icon-trash no-text remove-exchange"}
|
%a{'ng-click' => 'removeExchange($event, exchange)', :class => "icon-trash no-text"}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
%tr.products{'ng-show' => 'exchange.showProducts'}
|
%tr.products{'ng-show' => 'exchange.showProducts'}
|
||||||
= render 'exchange_supplied_products_form'
|
= render 'exchange_supplied_products_form'
|
||||||
|
|
||||||
= select_tag :new_supplier_id, options_from_collection_for_select(order_cycle_producer_enterprises, :id, :name), {'ng-model' => 'new_supplier_id'}
|
= select_tag :new_supplier_id, options_from_collection_for_select(Enterprise.is_primary_producer.managed_by(spree_current_user).by_name, :id, :name), {'ng-model' => 'new_supplier_id'}
|
||||||
= f.submit 'Add supplier', 'ng-click' => 'addSupplier($event)'
|
= f.submit 'Add supplier', 'ng-click' => 'addSupplier($event)'
|
||||||
|
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
%tr.products{'ng-show' => 'exchange.showProducts'}
|
%tr.products{'ng-show' => 'exchange.showProducts'}
|
||||||
= render 'exchange_distributed_products_form'
|
= render 'exchange_distributed_products_form'
|
||||||
|
|
||||||
= select_tag :new_distributor_id, options_from_collection_for_select(order_cycle_hub_enterprises, :id, :name), {'ng-model' => 'new_distributor_id'}
|
= select_tag :new_distributor_id, options_from_collection_for_select(Enterprise.is_distributor.managed_by(spree_current_user).by_name, :id, :name), {'ng-model' => 'new_distributor_id'}
|
||||||
= f.submit 'Add distributor', 'ng-click' => 'addDistributor($event)'
|
= f.submit 'Add distributor', 'ng-click' => 'addDistributor($event)'
|
||||||
|
|
||||||
.actions
|
.actions
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ r.element :order_cycle, @order_cycle do
|
|||||||
r.element :id
|
r.element :id
|
||||||
end
|
end
|
||||||
|
|
||||||
r.list_of :exchanges, OpenFoodNetwork::Permissions.new(spree_current_user).order_cycle_exchanges(@order_cycle).order('id ASC') do |exchange|
|
r.list_of :exchanges, @order_cycle.exchanges.managed_by(spree_current_user).order('id ASC') do |exchange|
|
||||||
r.element :id
|
r.element :id
|
||||||
r.element :sender_id
|
r.element :sender_id
|
||||||
r.element :receiver_id
|
r.element :receiver_id
|
||||||
|
|||||||
@@ -1,37 +0,0 @@
|
|||||||
module OpenFoodNetwork
|
|
||||||
class Permissions
|
|
||||||
def initialize(user)
|
|
||||||
@user = user
|
|
||||||
end
|
|
||||||
|
|
||||||
# Find enterprises that an admin is allowed to add to an order cycle
|
|
||||||
def order_cycle_enterprises
|
|
||||||
managed_enterprise_ids = managed_enterprises.pluck :id
|
|
||||||
permitted_enterprise_ids = related_enterprises_with(:add_to_order_cycle).pluck :id
|
|
||||||
|
|
||||||
Enterprise.where('id IN (?)', managed_enterprise_ids + permitted_enterprise_ids)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Find the exchanges of an order cycle that an admin can manage
|
|
||||||
def order_cycle_exchanges(order_cycle)
|
|
||||||
enterprises = managed_enterprises + related_enterprises_with(:add_to_order_cycle)
|
|
||||||
order_cycle.exchanges.to_enterprises(enterprises).from_enterprises(enterprises)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def managed_enterprises
|
|
||||||
Enterprise.managed_by(@user)
|
|
||||||
end
|
|
||||||
|
|
||||||
def related_enterprises_with(permission)
|
|
||||||
parent_ids = EnterpriseRelationship.
|
|
||||||
permitting(managed_enterprises).
|
|
||||||
with_permission(permission).
|
|
||||||
pluck(:parent_id)
|
|
||||||
|
|
||||||
Enterprise.where('id IN (?)', parent_ids)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -14,9 +14,9 @@ feature %q{
|
|||||||
scenario "listing relationships" do
|
scenario "listing relationships" do
|
||||||
# Given some enterprises with relationships
|
# Given some enterprises with relationships
|
||||||
e1, e2, e3, e4 = create(:enterprise), create(:enterprise), create(:enterprise), create(:enterprise)
|
e1, e2, e3, e4 = create(:enterprise), create(:enterprise), create(:enterprise), create(:enterprise)
|
||||||
create(:enterprise_relationship, parent: e1, child: e2, permissions_list: [:add_to_order_cycle])
|
create(:enterprise_relationship, parent: e1, child: e2, permissions_list: [:add_products_to_order_cycle])
|
||||||
create(:enterprise_relationship, parent: e2, child: e3, permissions_list: [:manage_products])
|
create(:enterprise_relationship, parent: e2, child: e3, permissions_list: [:manage_products])
|
||||||
create(:enterprise_relationship, parent: e3, child: e4, permissions_list: [:add_to_order_cycle, :manage_products])
|
create(:enterprise_relationship, parent: e3, child: e4, permissions_list: [:add_products_to_order_cycle, :manage_products])
|
||||||
|
|
||||||
# When I go to the relationships page
|
# When I go to the relationships page
|
||||||
click_link 'Enterprises'
|
click_link 'Enterprises'
|
||||||
@@ -24,10 +24,10 @@ feature %q{
|
|||||||
|
|
||||||
# Then I should see the relationships
|
# Then I should see the relationships
|
||||||
within('table#enterprise-relationships') do
|
within('table#enterprise-relationships') do
|
||||||
page.should have_relationship e1, e2, ['can add to order cycle']
|
page.should have_relationship e1, e2, ['can add products to order cycle from']
|
||||||
page.should have_relationship e2, e3, ['can manage the products of']
|
page.should have_relationship e2, e3, ['can manage the products of']
|
||||||
page.should have_relationship e3, e4,
|
page.should have_relationship e3, e4,
|
||||||
['can add to order cycle', 'can manage the products of']
|
['can add products to order cycle from', 'can manage the products of']
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -38,16 +38,16 @@ feature %q{
|
|||||||
|
|
||||||
visit admin_enterprise_relationships_path
|
visit admin_enterprise_relationships_path
|
||||||
select 'One', from: 'enterprise_relationship_parent_id'
|
select 'One', from: 'enterprise_relationship_parent_id'
|
||||||
check 'can add to order cycle'
|
check 'can add products to order cycle from'
|
||||||
check 'can manage the products of'
|
check 'can manage the products of'
|
||||||
uncheck 'can manage the products of'
|
uncheck 'can manage the products of'
|
||||||
select 'Two', from: 'enterprise_relationship_child_id'
|
select 'Two', from: 'enterprise_relationship_child_id'
|
||||||
click_button 'Create'
|
click_button 'Create'
|
||||||
|
|
||||||
page.should have_relationship e1, e2, ['can add to order cycle']
|
page.should have_relationship e1, e2, ['can add products to order cycle from']
|
||||||
er = EnterpriseRelationship.where(parent_id: e1, child_id: e2).first
|
er = EnterpriseRelationship.where(parent_id: e1, child_id: e2).first
|
||||||
er.should be_present
|
er.should be_present
|
||||||
er.permissions.map(&:name).should == ['add_to_order_cycle']
|
er.permissions.map(&:name).should == ['add_products_to_order_cycle']
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@@ -119,6 +119,6 @@ feature %q{
|
|||||||
def have_relationship(parent, child, perms=[])
|
def have_relationship(parent, child, perms=[])
|
||||||
perms = perms.join(' ') || 'permits'
|
perms = perms.join(' ') || 'permits'
|
||||||
|
|
||||||
have_table_row [child.name, perms, parent.name, '']
|
have_table_row [parent.name, perms, child.name, '']
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -436,37 +436,26 @@ feature %q{
|
|||||||
|
|
||||||
context "as an enterprise user" do
|
context "as an enterprise user" do
|
||||||
|
|
||||||
let!(:supplier_managed) { create(:supplier_enterprise, name: 'Managed supplier') }
|
let(:supplier1) { create(:supplier_enterprise, name: 'First Supplier') }
|
||||||
let!(:supplier_unmanaged) { create(:supplier_enterprise, name: 'Unmanaged supplier') }
|
let(:supplier2) { create(:supplier_enterprise, name: 'Another Supplier') }
|
||||||
let!(:supplier_permitted) { create(:supplier_enterprise, name: 'Permitted supplier') }
|
let(:distributor1) { create(:distributor_enterprise, name: 'First Distributor') }
|
||||||
let!(:distributor_managed) { create(:distributor_enterprise, name: 'Managed distributor') }
|
let(:distributor2) { create(:distributor_enterprise, name: 'Another Distributor') }
|
||||||
let!(:distributor_unmanaged) { create(:distributor_enterprise, name: 'Unmanaged Distributor') }
|
let!(:distributor1_fee) { create(:enterprise_fee, enterprise: distributor1, name: 'First Distributor Fee') }
|
||||||
let!(:distributor_permitted) { create(:distributor_enterprise, name: 'Permitted distributor') }
|
before(:each) do
|
||||||
let!(:distributor_managed_fee) { create(:enterprise_fee, enterprise: distributor_managed, name: 'Managed distributor fee') }
|
product = create(:product, supplier: supplier1)
|
||||||
let!(:supplier_permitted_relationship) do
|
product.distributors << distributor1
|
||||||
create(:enterprise_relationship, parent: supplier_permitted, child: supplier_managed,
|
|
||||||
permissions_list: [:add_to_order_cycle])
|
|
||||||
end
|
|
||||||
let!(:distributor_permitted_relationship) do
|
|
||||||
create(:enterprise_relationship, parent: distributor_permitted, child: distributor_managed,
|
|
||||||
permissions_list: [:add_to_order_cycle])
|
|
||||||
end
|
|
||||||
|
|
||||||
before do
|
|
||||||
product = create(:product, supplier: supplier_managed)
|
|
||||||
product.distributors << distributor_managed
|
|
||||||
product.save!
|
product.save!
|
||||||
|
|
||||||
@new_user = create_enterprise_user
|
@new_user = create_enterprise_user
|
||||||
@new_user.enterprise_roles.build(enterprise: supplier_managed).save
|
@new_user.enterprise_roles.build(enterprise: supplier1).save
|
||||||
@new_user.enterprise_roles.build(enterprise: distributor_managed).save
|
@new_user.enterprise_roles.build(enterprise: distributor1).save
|
||||||
|
|
||||||
login_to_admin_as @new_user
|
login_to_admin_as @new_user
|
||||||
end
|
end
|
||||||
|
|
||||||
scenario "viewing a list of order cycles I am coordinating" do
|
scenario "viewing a list of order cycles I am coordinating" do
|
||||||
oc_user_coordinating = create(:simple_order_cycle, { suppliers: [supplier_managed, supplier_unmanaged], coordinator: supplier_managed, distributors: [distributor_managed, distributor_unmanaged], name: 'Order Cycle 1' } )
|
oc_user_coordinating = create(:simple_order_cycle, { suppliers: [supplier1, supplier2], coordinator: supplier1, distributors: [distributor1, distributor2], name: 'Order Cycle 1' } )
|
||||||
oc_for_other_user = create(:simple_order_cycle, { coordinator: supplier_unmanaged, name: 'Order Cycle 2' } )
|
oc_for_other_user = create(:simple_order_cycle, { coordinator: supplier2, name: 'Order Cycle 2' } )
|
||||||
|
|
||||||
click_link "Order Cycles"
|
click_link "Order Cycles"
|
||||||
|
|
||||||
@@ -475,8 +464,8 @@ feature %q{
|
|||||||
page.should_not have_content oc_for_other_user.name
|
page.should_not have_content oc_for_other_user.name
|
||||||
|
|
||||||
# The order cycle should not show enterprises that I don't manage
|
# The order cycle should not show enterprises that I don't manage
|
||||||
page.should_not have_selector 'td.suppliers', text: supplier_unmanaged.name
|
page.should_not have_selector 'td.suppliers', text: supplier2.name
|
||||||
page.should_not have_selector 'td.distributors', text: distributor_unmanaged.name
|
page.should_not have_selector 'td.distributors', text: distributor2.name
|
||||||
end
|
end
|
||||||
|
|
||||||
scenario "creating a new order cycle" do
|
scenario "creating a new order cycle" do
|
||||||
@@ -487,81 +476,57 @@ feature %q{
|
|||||||
fill_in 'order_cycle_orders_open_at', with: '2012-11-06 06:00:00'
|
fill_in 'order_cycle_orders_open_at', with: '2012-11-06 06:00:00'
|
||||||
fill_in 'order_cycle_orders_close_at', with: '2012-11-13 17:00:00'
|
fill_in 'order_cycle_orders_close_at', with: '2012-11-13 17:00:00'
|
||||||
|
|
||||||
select 'Managed supplier', from: 'new_supplier_id'
|
select 'First Supplier', from: 'new_supplier_id'
|
||||||
click_button 'Add supplier'
|
|
||||||
select 'Permitted supplier', from: 'new_supplier_id'
|
|
||||||
click_button 'Add supplier'
|
click_button 'Add supplier'
|
||||||
|
|
||||||
select 'Managed distributor', from: 'order_cycle_coordinator_id'
|
select 'First Distributor', from: 'order_cycle_coordinator_id'
|
||||||
click_button 'Add coordinator fee'
|
click_button 'Add coordinator fee'
|
||||||
select 'Managed distributor fee', from: 'order_cycle_coordinator_fee_0_id'
|
select 'First Distributor Fee', from: 'order_cycle_coordinator_fee_0_id'
|
||||||
|
|
||||||
select 'Managed distributor', from: 'new_distributor_id'
|
select 'First Distributor', from: 'new_distributor_id'
|
||||||
click_button 'Add distributor'
|
|
||||||
select 'Permitted distributor', from: 'new_distributor_id'
|
|
||||||
click_button 'Add distributor'
|
click_button 'Add distributor'
|
||||||
|
|
||||||
# Should only have suppliers / distributors listed which the user is managing or
|
# Should only have suppliers / distributors listed which the user can manage
|
||||||
# has E2E permission to add products to order cycles
|
within "#new_supplier_id" do
|
||||||
page.should_not have_select 'new_supplier_id', with_options: [supplier_unmanaged.name]
|
page.should_not have_content supplier2.name
|
||||||
page.should_not have_select 'new_distributor_id', with_options: [distributor_unmanaged.name]
|
end
|
||||||
|
within "#new_distributor_id" do
|
||||||
[distributor_unmanaged.name, supplier_managed.name, supplier_unmanaged.name].each do |enterprise_name|
|
page.should_not have_content distributor2.name
|
||||||
page.should_not have_select 'order_cycle_coordinator_id', with_options: [enterprise_name]
|
end
|
||||||
|
within "#order_cycle_coordinator_id" do
|
||||||
|
page.should_not have_content distributor2.name
|
||||||
|
page.should_not have_content supplier1.name
|
||||||
|
page.should_not have_content supplier2.name
|
||||||
end
|
end
|
||||||
|
|
||||||
click_button 'Create'
|
click_button 'Create'
|
||||||
|
|
||||||
flash_message.should == "Your order cycle has been created."
|
flash_message.should == "Your order cycle has been created."
|
||||||
order_cycle = OrderCycle.find_by_name('My order cycle')
|
order_cycle = OrderCycle.find_by_name('My order cycle')
|
||||||
order_cycle.suppliers.sort.should == [supplier_managed, supplier_permitted].sort
|
order_cycle.coordinator.should == distributor1
|
||||||
order_cycle.coordinator.should == distributor_managed
|
|
||||||
order_cycle.distributors.sort.should == [distributor_managed, distributor_permitted].sort
|
|
||||||
end
|
end
|
||||||
|
|
||||||
scenario "editing an order cycle does not affect exchanges we don't manage" do
|
scenario "editing an order cycle" do
|
||||||
oc = create(:simple_order_cycle, { suppliers: [supplier_managed, supplier_permitted, supplier_unmanaged], coordinator: supplier_managed, distributors: [distributor_managed, distributor_permitted, distributor_unmanaged], name: 'Order Cycle 1' } )
|
oc = create(:simple_order_cycle, { suppliers: [supplier1, supplier2], coordinator: supplier1, distributors: [distributor1, distributor2], name: 'Order Cycle 1' } )
|
||||||
|
|
||||||
visit edit_admin_order_cycle_path(oc)
|
visit edit_admin_order_cycle_path(oc)
|
||||||
|
|
||||||
# I should not see exchanges for supplier_unmanaged or distributor_unmanaged
|
# I should not see exchanges for supplier2 or distributor2
|
||||||
page.all('tr.supplier').count.should == 2
|
page.all('tr.supplier').count.should == 1
|
||||||
page.all('tr.distributor').count.should == 2
|
page.all('tr.distributor').count.should == 1
|
||||||
|
|
||||||
# When I save, then those exchanges should remain
|
# When I save, then those exchanges should remain
|
||||||
click_button 'Update'
|
click_button 'Update'
|
||||||
page.should have_content "Your order cycle has been updated."
|
page.should have_content "Your order cycle has been updated."
|
||||||
|
|
||||||
oc.reload
|
oc.reload
|
||||||
oc.suppliers.sort.should == [supplier_managed, supplier_permitted, supplier_unmanaged].sort
|
oc.suppliers.sort.should == [supplier1, supplier2]
|
||||||
oc.coordinator.should == supplier_managed
|
oc.coordinator.should == supplier1
|
||||||
oc.distributors.sort.should == [distributor_managed, distributor_permitted, distributor_unmanaged].sort
|
oc.distributors.sort.should == [distributor1, distributor2]
|
||||||
end
|
end
|
||||||
|
|
||||||
scenario "editing an order cycle" do
|
|
||||||
oc = create(:simple_order_cycle, { suppliers: [supplier_managed, supplier_permitted, supplier_unmanaged], coordinator: supplier_managed, distributors: [distributor_managed, distributor_permitted, distributor_unmanaged], name: 'Order Cycle 1' } )
|
|
||||||
|
|
||||||
visit edit_admin_order_cycle_path(oc)
|
|
||||||
|
|
||||||
# When I remove all the exchanges and save
|
|
||||||
page.find("tr.supplier-#{supplier_managed.id} a.remove-exchange").click
|
|
||||||
page.find("tr.supplier-#{supplier_permitted.id} a.remove-exchange").click
|
|
||||||
page.find("tr.distributor-#{distributor_managed.id} a.remove-exchange").click
|
|
||||||
page.find("tr.distributor-#{distributor_permitted.id} a.remove-exchange").click
|
|
||||||
click_button 'Update'
|
|
||||||
|
|
||||||
# Then the exchanges should be removed
|
|
||||||
page.should have_content "Your order cycle has been updated."
|
|
||||||
|
|
||||||
oc.reload
|
|
||||||
oc.suppliers.should == [supplier_unmanaged]
|
|
||||||
oc.coordinator.should == supplier_managed
|
|
||||||
oc.distributors.should == [distributor_unmanaged]
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
scenario "cloning an order cycle" do
|
scenario "cloning an order cycle" do
|
||||||
oc = create(:simple_order_cycle, coordinator: distributor_managed)
|
oc = create(:simple_order_cycle)
|
||||||
|
|
||||||
click_link "Order Cycles"
|
click_link "Order Cycles"
|
||||||
first('a.clone-order-cycle').click
|
first('a.clone-order-cycle').click
|
||||||
|
|||||||
@@ -12,5 +12,5 @@ describe "enterprise relationships", ->
|
|||||||
EnterpriseRelationships = _EnterpriseRelationships_
|
EnterpriseRelationships = _EnterpriseRelationships_
|
||||||
|
|
||||||
it "presents permission names", ->
|
it "presents permission names", ->
|
||||||
expect(EnterpriseRelationships.permission_presentation("add_to_order_cycle")).toEqual "can add to order cycle"
|
expect(EnterpriseRelationships.permission_presentation("add_products_to_order_cycle")).toEqual "can add products to order cycle from"
|
||||||
expect(EnterpriseRelationships.permission_presentation("manage_products")).toEqual "can manage the products of"
|
expect(EnterpriseRelationships.permission_presentation("manage_products")).toEqual "can manage the products of"
|
||||||
|
|||||||
@@ -1,74 +0,0 @@
|
|||||||
require 'open_food_network/permissions'
|
|
||||||
|
|
||||||
module OpenFoodNetwork
|
|
||||||
describe Permissions do
|
|
||||||
let(:user) { double(:user) }
|
|
||||||
let(:permissions) { Permissions.new(user) }
|
|
||||||
let(:permission) { 'one' }
|
|
||||||
let(:e1) { create(:enterprise) }
|
|
||||||
let(:e2) { create(:enterprise) }
|
|
||||||
|
|
||||||
describe "finding enterprises that can be added to an order cycle" do
|
|
||||||
before do
|
|
||||||
permissions.stub(:managed_enterprises) { Enterprise.where('1=0') }
|
|
||||||
permissions.stub(:related_enterprises_with) { Enterprise.where('1=0') }
|
|
||||||
end
|
|
||||||
|
|
||||||
it "returns managed enterprises" do
|
|
||||||
permissions.stub(:managed_enterprises) { Enterprise.where(id: e1) }
|
|
||||||
permissions.order_cycle_enterprises.should == [e1]
|
|
||||||
end
|
|
||||||
|
|
||||||
it "returns permitted enterprises" do
|
|
||||||
permissions.stub(:related_enterprises_with) { Enterprise.where(id: e2) }
|
|
||||||
permissions.order_cycle_enterprises.should == [e2]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "finding exchanges of an order cycle that an admin can manage" do
|
|
||||||
let(:oc) { create(:simple_order_cycle) }
|
|
||||||
let!(:ex) { create(:exchange, order_cycle: oc, sender: e1, receiver: e2) }
|
|
||||||
|
|
||||||
before do
|
|
||||||
permissions.stub(:managed_enterprises) { [] }
|
|
||||||
permissions.stub(:related_enterprises_with) { [] }
|
|
||||||
end
|
|
||||||
|
|
||||||
it "returns exchanges involving enterprises managed by the user" do
|
|
||||||
permissions.stub(:managed_enterprises) { [e1, e2] }
|
|
||||||
permissions.order_cycle_exchanges(oc).should == [ex]
|
|
||||||
end
|
|
||||||
|
|
||||||
it "returns exchanges involving enterprises with E2E permission" do
|
|
||||||
permissions.stub(:related_enterprises_with) { [e1, e2] }
|
|
||||||
permissions.order_cycle_exchanges(oc).should == [ex]
|
|
||||||
end
|
|
||||||
|
|
||||||
it "does not return exchanges involving only the sender" do
|
|
||||||
permissions.stub(:managed_enterprises) { [e1] }
|
|
||||||
permissions.order_cycle_exchanges(oc).should == []
|
|
||||||
end
|
|
||||||
|
|
||||||
it "does not return exchanges involving only the receiver" do
|
|
||||||
permissions.stub(:managed_enterprises) { [e2] }
|
|
||||||
permissions.order_cycle_exchanges(oc).should == []
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
########################################
|
|
||||||
|
|
||||||
describe "finding related enterprises with a particular permission" do
|
|
||||||
let!(:er) { create(:enterprise_relationship, parent: e1, child: e2, permissions_list: [permission]) }
|
|
||||||
|
|
||||||
it "returns the enterprises" do
|
|
||||||
permissions.stub(:managed_enterprises) { e2 }
|
|
||||||
permissions.send(:related_enterprises_with, permission).should == [e1]
|
|
||||||
end
|
|
||||||
|
|
||||||
it "returns an empty array when there are none" do
|
|
||||||
permissions.stub(:managed_enterprises) { e1 }
|
|
||||||
permissions.send(:related_enterprises_with, permission).should == []
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -6,10 +6,10 @@ describe EnterpriseRelationship do
|
|||||||
let(:e2) { create(:enterprise, name: 'B') }
|
let(:e2) { create(:enterprise, name: 'B') }
|
||||||
let(:e3) { create(:enterprise, name: 'C') }
|
let(:e3) { create(:enterprise, name: 'C') }
|
||||||
|
|
||||||
it "sorts by child, parent enterprise name" do
|
it "sorts by parent, child enterprise name" do
|
||||||
er1 = create(:enterprise_relationship, parent: e3, child: e1)
|
er1 = create(:enterprise_relationship, parent: e1, child: e3)
|
||||||
er2 = create(:enterprise_relationship, parent: e1, child: e2)
|
er2 = create(:enterprise_relationship, parent: e2, child: e1)
|
||||||
er3 = create(:enterprise_relationship, parent: e2, child: e1)
|
er3 = create(:enterprise_relationship, parent: e1, child: e2)
|
||||||
|
|
||||||
EnterpriseRelationship.by_name.should == [er3, er1, er2]
|
EnterpriseRelationship.by_name.should == [er3, er1, er2]
|
||||||
end
|
end
|
||||||
@@ -43,24 +43,5 @@ describe EnterpriseRelationship do
|
|||||||
er.permissions.should be_empty
|
er.permissions.should be_empty
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it "finds relationships that grant permissions to some enterprises" do
|
|
||||||
er1 = create(:enterprise_relationship, parent: e2, child: e1)
|
|
||||||
er2 = create(:enterprise_relationship, parent: e3, child: e2)
|
|
||||||
er3 = create(:enterprise_relationship, parent: e1, child: e3)
|
|
||||||
|
|
||||||
EnterpriseRelationship.permitting([e1, e2]).sort.should == [er1, er2]
|
|
||||||
end
|
|
||||||
|
|
||||||
it "finds relationships that grant a particular permission" do
|
|
||||||
er1 = create(:enterprise_relationship, parent: e1, child: e2,
|
|
||||||
permissions_list: ['one', 'two'])
|
|
||||||
er2 = create(:enterprise_relationship, parent: e2, child: e3,
|
|
||||||
permissions_list: ['two', 'three'])
|
|
||||||
er3 = create(:enterprise_relationship, parent: e3, child: e1,
|
|
||||||
permissions_list: ['three', 'four'])
|
|
||||||
|
|
||||||
EnterpriseRelationship.with_permission('two').sort.should == [er1, er2].sort
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user