mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
175 lines
7.6 KiB
Ruby
175 lines
7.6 KiB
Ruby
require 'spec_helper'
|
|
|
|
feature '
|
|
As an administrator
|
|
I want to manage enterprise fees
|
|
', js: true do
|
|
include AuthenticationWorkflow
|
|
include WebHelper
|
|
|
|
let!(:tax_category_gst) { create(:tax_category, name: 'GST') }
|
|
|
|
scenario "listing enterprise fees" do
|
|
fee = create(:enterprise_fee, name: '$0.50 / kg', fee_type: 'packing', tax_category: tax_category_gst)
|
|
amount = fee.calculator.preferred_amount
|
|
|
|
login_to_admin_section
|
|
click_link 'Configuration'
|
|
click_link 'Enterprise Fees'
|
|
|
|
expect(page).to have_select "enterprise_fee_set_collection_attributes_0_enterprise_id"
|
|
expect(page).to have_select "enterprise_fee_set_collection_attributes_0_fee_type", selected: 'Packing fee'
|
|
expect(page).to have_selector "input[value='$0.50 / kg']"
|
|
expect(page).to have_select "enterprise_fee_set_collection_attributes_0_tax_category_id", selected: 'GST'
|
|
expect(page).to have_select "enterprise_fee_set_collection_attributes_0_calculator_type", selected: 'Flat Rate (per item)'
|
|
expect(page).to have_selector "input[value='#{amount}']"
|
|
end
|
|
|
|
scenario "creating an enterprise fee" do
|
|
# Given an enterprise
|
|
e = create(:supplier_enterprise, name: 'Feedme')
|
|
|
|
# When I go to the enterprise fees page
|
|
quick_login_as_admin
|
|
visit admin_enterprise_fees_path
|
|
|
|
# And I fill in the fields for a new enterprise fee and click update
|
|
select 'Feedme', from: 'enterprise_fee_set_collection_attributes_0_enterprise_id'
|
|
select 'Admin', from: 'enterprise_fee_set_collection_attributes_0_fee_type'
|
|
fill_in 'enterprise_fee_set_collection_attributes_0_name', with: 'Hello!'
|
|
select 'GST', from: 'enterprise_fee_set_collection_attributes_0_tax_category_id'
|
|
select 'Flat Percent', from: 'enterprise_fee_set_collection_attributes_0_calculator_type'
|
|
click_button 'Update'
|
|
|
|
# Then I should see my fee and fields for the calculator
|
|
expect(page).to have_content "Your enterprise fees have been updated."
|
|
expect(page).to have_selector "input[value='Hello!']"
|
|
|
|
# When I fill in the calculator fields and click update
|
|
fill_in 'enterprise_fee_set_collection_attributes_0_calculator_attributes_preferred_flat_percent', with: '12.34'
|
|
click_button 'Update'
|
|
|
|
# Then I should see the correct values in my calculator fields
|
|
expect(page).to have_selector "#enterprise_fee_set_collection_attributes_0_calculator_attributes_preferred_flat_percent[value='12.34']"
|
|
end
|
|
|
|
scenario "editing an enterprise fee" do
|
|
# Given an enterprise fee
|
|
fee = create(:enterprise_fee)
|
|
enterprise = create(:enterprise, name: 'Foo')
|
|
|
|
# When I go to the enterprise fees page
|
|
quick_login_as_admin
|
|
visit admin_enterprise_fees_path
|
|
|
|
# And I update the fields for the enterprise fee and click update
|
|
select 'Foo', from: 'enterprise_fee_set_collection_attributes_0_enterprise_id'
|
|
select 'Admin', from: 'enterprise_fee_set_collection_attributes_0_fee_type'
|
|
fill_in 'enterprise_fee_set_collection_attributes_0_name', with: 'Greetings!'
|
|
select 'Inherit From Product', from: 'enterprise_fee_set_collection_attributes_0_tax_category_id'
|
|
select 'Flat Percent', from: 'enterprise_fee_set_collection_attributes_0_calculator_type'
|
|
click_button 'Update'
|
|
|
|
# Then I should see the updated fields for my fee
|
|
expect(page).to have_select "enterprise_fee_set_collection_attributes_0_enterprise_id", selected: 'Foo'
|
|
expect(page).to have_select "enterprise_fee_set_collection_attributes_0_fee_type", selected: 'Admin fee'
|
|
expect(page).to have_selector "input[value='Greetings!']"
|
|
expect(page).to have_select 'enterprise_fee_set_collection_attributes_0_tax_category_id', selected: 'Inherit From Product'
|
|
expect(page).to have_selector "option[selected]", text: 'Flat Percent (per item)'
|
|
|
|
fee.reload
|
|
expect(fee.enterprise).to eq(enterprise)
|
|
expect(fee.name).to eq('Greetings!')
|
|
expect(fee.fee_type).to eq('admin')
|
|
expect(fee.calculator_type).to eq("Calculator::FlatPercentPerItem")
|
|
|
|
# Sets tax_category and inherits_tax_category
|
|
expect(fee.tax_category).to eq(nil)
|
|
expect(fee.inherits_tax_category).to eq(true)
|
|
end
|
|
|
|
scenario "deleting an enterprise fee" do
|
|
# Given an enterprise fee
|
|
fee = create(:enterprise_fee)
|
|
|
|
# When I go to the enterprise fees page
|
|
quick_login_as_admin
|
|
visit admin_enterprise_fees_path
|
|
|
|
# And I click delete
|
|
accept_alert do
|
|
find("a.delete-resource").click
|
|
end
|
|
|
|
# Then my enterprise fee should have been deleted
|
|
visit admin_enterprise_fees_path
|
|
expect(page).to have_no_selector "input[value='#{fee.name}']"
|
|
end
|
|
|
|
context "as an enterprise manager" do
|
|
let(:enterprise_user) { create_enterprise_user }
|
|
let(:distributor1) { create(:distributor_enterprise, name: 'First Distributor') }
|
|
let(:distributor2) { create(:distributor_enterprise, name: 'Second Distributor') }
|
|
let(:distributor3) { create(:distributor_enterprise, name: 'Third Distributor') }
|
|
let(:ef1) { create(:enterprise_fee, name: 'One', enterprise: distributor1) }
|
|
let(:ef2) { create(:enterprise_fee, name: 'Two', enterprise: distributor2) }
|
|
|
|
before(:each) do
|
|
enterprise_user.enterprise_roles.build(enterprise: distributor1).save
|
|
enterprise_user.enterprise_roles.build(enterprise: distributor2).save
|
|
quick_login_as enterprise_user
|
|
end
|
|
|
|
it "creates enterprise fees" do
|
|
visit edit_admin_enterprise_path(distributor1)
|
|
within(".side_menu") { click_link 'Enterprise Fees' }
|
|
click_link "Create One Now"
|
|
|
|
select distributor1.name, from: 'enterprise_fee_set_collection_attributes_0_enterprise_id'
|
|
select 'Packing', from: 'enterprise_fee_set_collection_attributes_0_fee_type'
|
|
fill_in 'enterprise_fee_set_collection_attributes_0_name', with: 'foo'
|
|
select 'GST', from: 'enterprise_fee_set_collection_attributes_0_tax_category_id'
|
|
select 'Flat Percent', from: 'enterprise_fee_set_collection_attributes_0_calculator_type'
|
|
click_button 'Update'
|
|
|
|
expect(flash_message).to eq('Your enterprise fees have been updated.')
|
|
|
|
# After saving, we should be redirected to the fees for our chosen enterprise
|
|
expect(page).not_to have_select 'enterprise_fee_set_collection_attributes_1_enterprise_id', selected: 'Second Distributor'
|
|
|
|
enterprise_fee = EnterpriseFee.find_by name: 'foo'
|
|
expect(enterprise_fee.enterprise).to eq(distributor1)
|
|
end
|
|
|
|
it "shows me only enterprise fees for the enterprise I select" do
|
|
ef1
|
|
ef2
|
|
|
|
visit edit_admin_enterprise_path(distributor1)
|
|
within(".side_menu") { click_link 'Enterprise Fees' }
|
|
click_link "Manage Enterprise Fees"
|
|
expect(page).to have_field 'enterprise_fee_set_collection_attributes_0_name', with: 'One'
|
|
expect(page).not_to have_field 'enterprise_fee_set_collection_attributes_1_name', with: 'Two'
|
|
|
|
visit edit_admin_enterprise_path(distributor2)
|
|
within(".side_menu") { click_link 'Enterprise Fees' }
|
|
click_link "Manage Enterprise Fees"
|
|
expect(page).not_to have_field 'enterprise_fee_set_collection_attributes_0_name', with: 'One'
|
|
expect(page).to have_field 'enterprise_fee_set_collection_attributes_0_name', with: 'Two'
|
|
end
|
|
|
|
it "only allows me to select enterprises I have access to" do
|
|
ef1
|
|
ef2
|
|
distributor3
|
|
|
|
visit edit_admin_enterprise_path(distributor2)
|
|
within(".side_menu") { click_link 'Enterprise Fees' }
|
|
click_link "Manage Enterprise Fees"
|
|
expect(page).to have_select('enterprise_fee_set_collection_attributes_0_enterprise_id',
|
|
selected: 'Second Distributor',
|
|
options: ['', 'First Distributor', 'Second Distributor'])
|
|
end
|
|
end
|
|
end
|