mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-25 20:46:48 +00:00
222 lines
8.7 KiB
Ruby
222 lines
8.7 KiB
Ruby
require 'spec_helper'
|
|
|
|
feature 'Enterprises Index' do
|
|
include AuthenticationWorkflow
|
|
include WebHelper
|
|
|
|
context "as an admin user" do
|
|
scenario "listing enterprises" do
|
|
s = create(:supplier_enterprise)
|
|
d = create(:distributor_enterprise)
|
|
|
|
login_to_admin_section
|
|
click_link 'Enterprises'
|
|
|
|
within("tr.enterprise-#{s.id}") do
|
|
expect(page).to have_content s.name
|
|
expect(page).to have_select "enterprise_set_collection_attributes_1_sells"
|
|
expect(page).to have_content "Settings"
|
|
expect(page).to have_content "Delete"
|
|
expect(page).to have_no_content "Payment Methods"
|
|
expect(page).to have_no_content "Shipping Methods"
|
|
expect(page).to have_content "Enterprise Fees"
|
|
end
|
|
|
|
within("tr.enterprise-#{d.id}") do
|
|
expect(page).to have_content d.name
|
|
expect(page).to have_select "enterprise_set_collection_attributes_0_sells"
|
|
expect(page).to have_content "Settings"
|
|
expect(page).to have_content "Delete"
|
|
expect(page).to have_content "Payment Methods"
|
|
expect(page).to have_content "Shipping Methods"
|
|
expect(page).to have_content "Enterprise Fees"
|
|
end
|
|
end
|
|
|
|
context "editing enterprises in bulk" do
|
|
let!(:s){ create(:supplier_enterprise) }
|
|
let!(:d){ create(:distributor_enterprise, sells: 'none') }
|
|
let!(:d_manager) { create_enterprise_user(enterprise_limit: 1) }
|
|
|
|
before do
|
|
d_manager.enterprise_roles.build(enterprise: d).save
|
|
expect(d.owner).to_not eq d_manager
|
|
end
|
|
|
|
context "without violating rules" do
|
|
before do
|
|
quick_login_as_admin
|
|
visit admin_enterprises_path
|
|
end
|
|
|
|
it "updates the enterprises" do
|
|
within("tr.enterprise-#{d.id}") do
|
|
expect(page).to have_checked_field "enterprise_set_collection_attributes_0_visible"
|
|
uncheck "enterprise_set_collection_attributes_0_visible"
|
|
select 'any', from: "enterprise_set_collection_attributes_0_sells"
|
|
select d_manager.email, from: 'enterprise_set_collection_attributes_0_owner_id'
|
|
end
|
|
click_button "Update"
|
|
expect(flash_message).to eq('Enterprises updated successfully')
|
|
distributor = Enterprise.find(d.id)
|
|
expect(distributor.visible).to eq false
|
|
expect(distributor.sells).to eq 'any'
|
|
expect(distributor.owner).to eq d_manager
|
|
end
|
|
end
|
|
|
|
context "with data that violates rules" do
|
|
let!(:second_distributor) { create(:distributor_enterprise, sells: 'none') }
|
|
|
|
before do
|
|
d_manager.enterprise_roles.build(enterprise: second_distributor).save
|
|
expect(d.owner).to_not eq d_manager
|
|
|
|
quick_login_as_admin
|
|
visit admin_enterprises_path
|
|
end
|
|
|
|
def enterprise_row_index(enterprise_name)
|
|
enterprise_row_number = all('tr').index { |tr| tr.text.include? enterprise_name }
|
|
enterprise_row_number - 1
|
|
end
|
|
|
|
it "does not update the enterprises and displays errors" do
|
|
d_row_index = enterprise_row_index(d.name)
|
|
within("tr.enterprise-#{d.id}") do
|
|
select d_manager.email, from: "enterprise_set_collection_attributes_#{d_row_index}_owner_id"
|
|
end
|
|
|
|
second_distributor_row_index = enterprise_row_index(second_distributor.name)
|
|
within("tr.enterprise-#{second_distributor.id}") do
|
|
select d_manager.email, from: "enterprise_set_collection_attributes_#{second_distributor_row_index}_owner_id"
|
|
end
|
|
click_button "Update"
|
|
expect(flash_message).to eq('Update failed')
|
|
expect(page).to have_content "#{d_manager.email} is not permitted to own any more enterprises (limit is 1)."
|
|
second_distributor.reload
|
|
expect(second_distributor.owner).to_not eq d_manager
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "as the manager of an enterprise" do
|
|
let(:supplier1) { create(:supplier_enterprise, name: 'First Supplier') }
|
|
let(:supplier2) { create(:supplier_enterprise, name: 'Another Supplier') }
|
|
let(:distributor1) { create(:distributor_enterprise, name: 'First Distributor') }
|
|
let(:distributor2) { create(:distributor_enterprise, name: 'Another Distributor') }
|
|
let(:distributor3) { create(:distributor_enterprise, name: 'Yet Another Distributor') }
|
|
let(:enterprise_manager) { create_enterprise_user }
|
|
let!(:er) { create(:enterprise_relationship, parent: distributor3, child: distributor1, permissions_list: [:edit_profile]) }
|
|
|
|
before(:each) do
|
|
enterprise_manager.enterprise_roles.build(enterprise: supplier1).save
|
|
enterprise_manager.enterprise_roles.build(enterprise: distributor1).save
|
|
|
|
quick_login_as enterprise_manager
|
|
end
|
|
|
|
context "listing enterprises", js: true do
|
|
it "displays enterprises I have permission to manage" do
|
|
visit admin_enterprises_path
|
|
|
|
within("tbody#e_#{distributor1.id}") do
|
|
expect(page).to have_content distributor1.name
|
|
expect(page).to have_selector "td.producer", text: 'Non-Producer'
|
|
expect(page).to have_selector "td.package", text: 'Hub'
|
|
end
|
|
|
|
within("tbody#e_#{distributor3.id}") do
|
|
expect(page).to have_content distributor3.name
|
|
expect(page).to have_selector "td.producer", text: 'Non-Producer'
|
|
expect(page).to have_selector "td.package", text: 'Hub'
|
|
end
|
|
|
|
within("tbody#e_#{supplier1.id}") do
|
|
expect(page).to have_content supplier1.name
|
|
expect(page).to have_selector "td.producer", text: 'Producer'
|
|
expect(page).to have_selector "td.package", text: 'Profile'
|
|
end
|
|
|
|
expect(page).to have_no_content "supplier2.name"
|
|
expect(page).to have_no_content "distributor2.name"
|
|
|
|
expect(find("#content-header")).to have_link "New Enterprise"
|
|
end
|
|
|
|
it "does not give me an option to change or update the package and producer properties of enterprises I manage" do
|
|
visit admin_enterprises_path
|
|
|
|
within("tbody#e_#{distributor1.id}") do
|
|
find("td.producer").click
|
|
expect(page).to have_selector "a.selector.producer.disabled"
|
|
find("a.selector.producer.disabled").click
|
|
expect(page).to have_selector "a.selector.non-producer.selected.disabled"
|
|
expect(page).to have_no_selector "a.update"
|
|
find("td.package").click
|
|
expect(page).to have_selector "a.selector.hub-profile.disabled"
|
|
find("a.selector.hub-profile.disabled").click
|
|
expect(page).to have_selector "a.selector.hub.selected.disabled"
|
|
expect(page).to have_no_selector "a.update"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "as the owner of an enterprise" do
|
|
let!(:user) { create_enterprise_user }
|
|
let!(:owned_distributor) { create(:distributor_enterprise, name: 'Owned Distributor', owner: user) }
|
|
|
|
before do
|
|
quick_login_as user
|
|
end
|
|
|
|
context "listing enterprises", js: true do
|
|
it "allows me to change or update the package and producer properties of enterprises I manage" do
|
|
visit admin_enterprises_path
|
|
|
|
within("tbody#e_#{owned_distributor.id}") do
|
|
# Open the producer panel
|
|
find("td.producer").click
|
|
|
|
expect(page).to have_no_selector "a.selector.producer.selected"
|
|
expect(page).to have_selector "a.selector.non-producer.selected"
|
|
|
|
# Change to a producer
|
|
find("a.selector.producer").click
|
|
|
|
expect(page).to have_no_selector "a.selector.non-producer.selected"
|
|
expect(page).to have_selector "a.selector.producer.selected"
|
|
expect(page).to have_selector "a.update", text: "SAVE"
|
|
|
|
# Save selection
|
|
find('a.update').click
|
|
expect(page).to have_selector "a.update", text: "SAVED"
|
|
expect(owned_distributor.reload.is_primary_producer).to eq true
|
|
|
|
# Open the package panel
|
|
find("td.package").click
|
|
|
|
expect(page).to have_no_selector "a.selector.producer-profile.selected"
|
|
expect(page).to have_no_selector "a.selector.producer-shop.selected"
|
|
expect(page).to have_selector "a.selector.producer-hub.selected"
|
|
|
|
# Change to a producer-shop
|
|
find("a.selector.producer-shop").click
|
|
|
|
expect(page).to have_no_selector "a.selector.producer-profile.selected"
|
|
expect(page).to have_selector "a.selector.producer-shop.selected"
|
|
expect(page).to have_no_selector "a.selector.producer-hub.selected"
|
|
expect(page).to have_selector "a.update", text: "SAVE"
|
|
|
|
# Save selection
|
|
find('a.update').click
|
|
expect(page).to have_selector "a.update", text: "SAVED"
|
|
expect(owned_distributor.reload.sells).to eq "own"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|