mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
Define filter authorizer for enterprise fee report
This commit is contained in:
14
lib/open_food_network/reports/authorizer.rb
Normal file
14
lib/open_food_network/reports/authorizer.rb
Normal file
@@ -0,0 +1,14 @@
|
||||
module OpenFoodNetwork
|
||||
module Reports
|
||||
class Authorizer
|
||||
class ParameterNotAllowedError < StandardError; end
|
||||
|
||||
attr_accessor :parameters, :permissions
|
||||
|
||||
def initialize(parameters, permissions)
|
||||
@parameters = parameters
|
||||
@permissions = permissions
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,33 @@
|
||||
require "open_food_network/reports/authorizer"
|
||||
|
||||
module OrderManagement
|
||||
module Reports
|
||||
module EnterpriseFeeSummary
|
||||
class Authorizer < OpenFoodNetwork::Reports::Authorizer
|
||||
def authorize!
|
||||
authorize_by_distribution!
|
||||
authorize_by_fee!
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def authorize_by_distribution!
|
||||
require_ids_allowed(parameters.order_cycle_ids, permissions.allowed_order_cycles)
|
||||
require_ids_allowed(parameters.distributor_ids, permissions.allowed_distributors)
|
||||
require_ids_allowed(parameters.producer_ids, permissions.allowed_producers)
|
||||
end
|
||||
|
||||
def authorize_by_fee!
|
||||
require_ids_allowed(parameters.enterprise_fee_ids, permissions.allowed_enterprise_fees)
|
||||
require_ids_allowed(parameters.shipping_method_ids, permissions.allowed_shipping_methods)
|
||||
require_ids_allowed(parameters.payment_method_ids, permissions.allowed_payment_methods)
|
||||
end
|
||||
|
||||
def require_ids_allowed(array, allowed_objects)
|
||||
raise OpenFoodNetwork::Reports::Authorizer::ParameterNotAllowedError \
|
||||
if (array - allowed_objects.map(&:id).map(&:to_s)).any?
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,177 @@
|
||||
require "spec_helper"
|
||||
|
||||
require "order_management/reports/enterprise_fee_summary/parameters"
|
||||
require "order_management/reports/enterprise_fee_summary/permissions"
|
||||
require "order_management/reports/enterprise_fee_summary/authorizer"
|
||||
require "open_food_network/reports/authorizer"
|
||||
|
||||
describe OrderManagement::Reports::EnterpriseFeeSummary::Authorizer do
|
||||
let(:report_klass) { OrderManagement::Reports::EnterpriseFeeSummary }
|
||||
let(:user) { create(:user) }
|
||||
|
||||
let(:parameters) { report_klass::Parameters.new(params) }
|
||||
let(:permissions) { report_klass::Permissions.new(user) }
|
||||
let(:authorizer) { described_class.new(parameters, permissions) }
|
||||
|
||||
context "for distributors" do
|
||||
before do
|
||||
allow(permissions).to receive(:allowed_distributors) do
|
||||
stub_model_collection(Enterprise, :id, ["1", "2", "3"])
|
||||
end
|
||||
end
|
||||
|
||||
context "when distributors are allowed" do
|
||||
let(:params) { { distributor_ids: ["1", "3"] } }
|
||||
|
||||
it "does not raise error" do
|
||||
expect { authorizer.authorize! }.not_to raise_error
|
||||
end
|
||||
end
|
||||
|
||||
context "when a distributor is not allowed" do
|
||||
let(:params) { { distributor_ids: ["1", "4"] } }
|
||||
|
||||
it "raises ParameterNotAllowedError" do
|
||||
expect { authorizer.authorize! }
|
||||
.to raise_error(OpenFoodNetwork::Reports::Authorizer::ParameterNotAllowedError)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "for producers" do
|
||||
before do
|
||||
allow(permissions).to receive(:allowed_producers) do
|
||||
stub_model_collection(Enterprise, :id, ["1", "2", "3"])
|
||||
end
|
||||
end
|
||||
|
||||
context "when producers are allowed" do
|
||||
let(:params) { { producer_ids: ["1", "3"] } }
|
||||
|
||||
it "does not raise error" do
|
||||
expect { authorizer.authorize! }.not_to raise_error
|
||||
end
|
||||
end
|
||||
|
||||
context "when a producer is not allowed" do
|
||||
let(:params) { { producer_ids: ["1", "4"] } }
|
||||
|
||||
it "raises ParameterNotAllowedError" do
|
||||
expect { authorizer.authorize! }
|
||||
.to raise_error(OpenFoodNetwork::Reports::Authorizer::ParameterNotAllowedError)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "for order cycles" do
|
||||
before do
|
||||
allow(permissions).to receive(:allowed_order_cycles) do
|
||||
stub_model_collection(OrderCycle, :id, ["1", "2", "3"])
|
||||
end
|
||||
end
|
||||
|
||||
context "when order cycles are allowed" do
|
||||
let(:params) { { order_cycle_ids: ["1", "3"] } }
|
||||
|
||||
it "does not raise error" do
|
||||
expect { authorizer.authorize! }.not_to raise_error
|
||||
end
|
||||
end
|
||||
|
||||
context "when an order cycle is not allowed" do
|
||||
let(:params) { { order_cycle_ids: ["1", "4"] } }
|
||||
|
||||
it "raises ParameterNotAllowedError" do
|
||||
expect { authorizer.authorize! }
|
||||
.to raise_error(OpenFoodNetwork::Reports::Authorizer::ParameterNotAllowedError)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "for enterprise fees" do
|
||||
before do
|
||||
allow(permissions).to receive(:allowed_enterprise_fees) do
|
||||
stub_model_collection(EnterpriseFee, :id, ["1", "2", "3"])
|
||||
end
|
||||
end
|
||||
|
||||
context "when enterprise fees are allowed" do
|
||||
let(:params) { { enterprise_fee_ids: ["1", "3"] } }
|
||||
|
||||
it "does not raise error" do
|
||||
expect { authorizer.authorize! }.not_to raise_error
|
||||
end
|
||||
end
|
||||
|
||||
context "when an enterprise fee is not allowed" do
|
||||
let(:params) { { enterprise_fee_ids: ["1", "4"] } }
|
||||
|
||||
it "raises ParameterNotAllowedError" do
|
||||
expect { authorizer.authorize! }
|
||||
.to raise_error(OpenFoodNetwork::Reports::Authorizer::ParameterNotAllowedError)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "for shipping methods" do
|
||||
before do
|
||||
allow(permissions).to receive(:allowed_shipping_methods) do
|
||||
stub_model_collection(Spree::ShippingMethod, :id, ["1", "2", "3"])
|
||||
end
|
||||
end
|
||||
|
||||
context "when shipping methods are allowed" do
|
||||
let(:params) { { shipping_method_ids: ["1", "3"] } }
|
||||
|
||||
it "does not raise error" do
|
||||
expect { authorizer.authorize! }.not_to raise_error
|
||||
end
|
||||
end
|
||||
|
||||
context "when a shipping method is not allowed" do
|
||||
let(:params) { { shipping_method_ids: ["1", "4"] } }
|
||||
|
||||
it "raises ParameterNotAllowedError" do
|
||||
expect { authorizer.authorize! }
|
||||
.to raise_error(OpenFoodNetwork::Reports::Authorizer::ParameterNotAllowedError)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "for payment methods" do
|
||||
before do
|
||||
allow(permissions).to receive(:allowed_payment_methods) do
|
||||
stub_model_collection(Spree::PaymentMethod, :id, ["1", "2", "3"])
|
||||
end
|
||||
end
|
||||
|
||||
context "when payment methods are allowed" do
|
||||
let(:params) { { payment_method_ids: ["1", "3"] } }
|
||||
|
||||
it "does not raise error" do
|
||||
expect { authorizer.authorize! }.not_to raise_error
|
||||
end
|
||||
end
|
||||
|
||||
context "when a payment method is not allowed" do
|
||||
let(:params) { { payment_method_ids: ["1", "4"] } }
|
||||
|
||||
it "raises ParameterNotAllowedError" do
|
||||
expect { authorizer.authorize! }
|
||||
.to raise_error(OpenFoodNetwork::Reports::Authorizer::ParameterNotAllowedError)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def stub_model_collection(model, attribute_name, attribute_list)
|
||||
attribute_list.map do |attribute_value|
|
||||
stub_model(model, attribute_name => attribute_value)
|
||||
end
|
||||
end
|
||||
|
||||
def stub_model(model, params)
|
||||
model.new.tap do |instance|
|
||||
instance.stub(params)
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user