mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-25 20:46:48 +00:00
137 lines
4.6 KiB
Ruby
137 lines
4.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'system_helper'
|
|
|
|
RSpec.describe 'Groups' do
|
|
include AuthenticationHelper
|
|
include UIComponentHelper
|
|
|
|
let(:enterprise) { create(:distributor_enterprise) }
|
|
let!(:group) { create(:enterprise_group, enterprises: [enterprise], on_front_page: true) }
|
|
|
|
it "renders groups" do
|
|
visit groups_path
|
|
expect(page).to have_content group.name
|
|
end
|
|
|
|
it "searches by URL" do
|
|
visit groups_path(anchor: "/?query=xyzzy")
|
|
expect(page).to have_content "No groups found"
|
|
end
|
|
|
|
describe "producers" do
|
|
describe "filtering by product property" do
|
|
let!(:producer1) { create(:supplier_enterprise) }
|
|
let!(:producer2) { create(:supplier_enterprise) }
|
|
|
|
let!(:product1) { create(:simple_product, supplier_id: producer1.id) }
|
|
let!(:product2) { create(:simple_product, supplier_id: producer2.id) }
|
|
|
|
before do
|
|
product1.set_property 'Organic', 'NASAA 12345'
|
|
product2.set_property 'Biodynamic', 'ABC123'
|
|
|
|
producer1.set_producer_property 'Local', 'Victoria'
|
|
producer2.set_producer_property 'Fair Trade', 'FT123'
|
|
|
|
group.enterprises << producer1
|
|
group.enterprises << producer2
|
|
|
|
visit group_path(group, anchor: "/producers")
|
|
end
|
|
|
|
it "filters" do
|
|
toggle_filters
|
|
|
|
toggle_filter 'Organic'
|
|
|
|
expect(page).to have_content producer1.name
|
|
expect(page).not_to have_content producer2.name
|
|
|
|
toggle_filter 'Organic'
|
|
toggle_filter 'Fair Trade'
|
|
|
|
expect(page).not_to have_content producer1.name
|
|
expect(page).to have_content producer2.name
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "hubs" do
|
|
describe "filtering by product property" do
|
|
let!(:group) {
|
|
create(:enterprise_group, enterprises: [d1, d2, d3, d4], on_front_page: true)
|
|
}
|
|
let!(:order_cycle) {
|
|
create(:simple_order_cycle, distributors: [d1, d2, d3],
|
|
coordinator: create(:distributor_enterprise))
|
|
}
|
|
let!(:closed_order_cycle) {
|
|
create(:closed_order_cycle, distributors: [d4],
|
|
coordinator: create(:distributor_enterprise))
|
|
}
|
|
let(:producer) { create(:supplier_enterprise) }
|
|
let(:d1) {
|
|
create(:distributor_enterprise, with_payment_and_shipping: true, visible: "public")
|
|
}
|
|
let(:d2) {
|
|
create(:distributor_enterprise, with_payment_and_shipping: true, visible: "public")
|
|
}
|
|
let(:d3) {
|
|
create(:distributor_enterprise,
|
|
with_payment_and_shipping: true,
|
|
visible: "only_through_links")
|
|
}
|
|
let(:d4) {
|
|
create(:distributor_enterprise, with_payment_and_shipping: true, visible: "public")
|
|
}
|
|
let(:p1) { create(:simple_product, supplier_id: producer.id) }
|
|
let(:p2) { create(:simple_product, supplier_id: create(:supplier_enterprise).id) }
|
|
let(:p3) { create(:simple_product, supplier_id: create(:supplier_enterprise).id) }
|
|
let(:p4) { create(:simple_product, supplier_id: create(:supplier_enterprise).id) }
|
|
let(:ex_d1) { order_cycle.exchanges.outgoing.where(receiver_id: d1).first }
|
|
let(:ex_d2) { order_cycle.exchanges.outgoing.where(receiver_id: d2).first }
|
|
let(:ex_d3) { order_cycle.exchanges.outgoing.where(receiver_id: d3).first }
|
|
let(:ex_d4) { closed_order_cycle.exchanges.outgoing.where(receiver_id: d4).first }
|
|
|
|
before do
|
|
producer.set_producer_property 'Organic', 'NASAA 12345'
|
|
p2.set_property 'Local', 'XYZ 123'
|
|
p3.set_property 'Not vibsible', 'Not vibsible'
|
|
p4.set_property 'No active order cycle', 'No active order cycle'
|
|
|
|
ex_d1.variants << p1.variants.first
|
|
ex_d2.variants << p2.variants.first
|
|
ex_d3.variants << p3.variants.first
|
|
ex_d4.variants << p4.variants.first
|
|
|
|
visit group_path(group, anchor: "/hubs")
|
|
end
|
|
|
|
it "adjusts visibilities of enterprises depending on their status" do
|
|
expect(page).to have_css('hub', text: d1.name)
|
|
expect(page).not_to have_css('hub.inactive', text: d1.name)
|
|
expect(page).to have_css('hub', text: d2.name)
|
|
expect(page).not_to have_css('hub.inactive', text: d2.name)
|
|
expect(page).not_to have_text d3.name
|
|
expect(page).to have_css('hub.inactive', text: d4.name)
|
|
end
|
|
|
|
it "filters" do
|
|
toggle_filters
|
|
|
|
toggle_filter 'Organic'
|
|
|
|
expect(page).to have_content d1.name
|
|
expect(page).not_to have_content d2.name
|
|
|
|
toggle_filter 'Organic'
|
|
toggle_filter 'Local'
|
|
|
|
expect(page).not_to have_content d1.name
|
|
expect(page).to have_content d2.name
|
|
end
|
|
end
|
|
end
|
|
end
|