Files
openfoodnetwork/spec/features/consumer/groups_spec.rb
Yasuhiro Yoshida 8090945c34 Change visibilities of hubs on group page
Issue:
https://github.com/openfoodfoundation/openfoodnetwork/issues/5106

Hubs on group page for consumers are displayed unconditionally.
But they should only appear under the following conditions: Visible.

In addition, those that are active should only be filled with red color
when they have open order cycles.

This commit apply these rules and changes the visibility of each hub on
"Our Hubs" tab of group page for consumers accordingly.
2021-09-17 17:12:08 +03:00

127 lines
4.5 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
feature 'Groups', js: true 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: producer1) }
let!(:product2) { create(:simple_product, supplier: producer2) }
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: true) }
let(:d2) { create(:distributor_enterprise, with_payment_and_shipping: true, visible: true) }
let(:d3) { create(:distributor_enterprise, with_payment_and_shipping: true, visible: false) }
let(:d4) { create(:distributor_enterprise, with_payment_and_shipping: true, visible: true) }
let(:p1) { create(:simple_product, supplier: producer) }
let(:p2) { create(:simple_product, supplier: create(:supplier_enterprise)) }
let(:p3) { create(:simple_product, supplier: create(:supplier_enterprise)) }
let(:p4) { create(:simple_product, supplier: create(:supplier_enterprise)) }
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).to_not have_css('hub.inactive', text: d1.name)
expect(page).to have_css('hub', text: d2.name)
expect(page).to_not have_css('hub.inactive', text: d2.name)
expect(page).to_not 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