# frozen_string_literal: true require 'system_helper' RSpec.describe ' As a backend user I want to be given information about the state of my enterprises, products and order cycles ' do include WebHelper include AuthenticationHelper context "as an enterprise user" do before do @enterprise_user = create(:user) allow_any_instance_of(Spree::Admin::OverviewController).to receive(:spree_current_user) .and_return @enterprise_user login_as @enterprise_user end context "with an enterprise" do let(:d1) { create(:distributor_enterprise) } before :each do @enterprise_user.enterprise_roles.build(enterprise: d1).save end it "displays a link to the map page" do visit '/admin' expect(page).to have_selector ".dashboard_item h3", text: "Your profile live" expect(page).to have_selector ".dashboard_item .button.bottom", text: "See #{d1.name} live" end context "when visibilty is set to false" do before do d1.visible = "only_through_links" d1.save! end it "displays a message telling how to set visibility" do visit '/admin' expect(page).to have_selector ".alert-box", text: "To allow people to find you, turn on your " \ "visibility under Manage #{d1.name}." end end context "when user is a profile only" do before do d1.sells = "none" d1.save! end it "does not show a products item" do visit '/admin' expect(page).not_to have_selector "#products" end end end context "with multiple enterprises" do let(:d1) { create(:distributor_enterprise) } let(:d2) { create(:distributor_enterprise) } let(:non_distributor_enterprise) { create(:enterprise, sells: 'none') } before do @enterprise_user.enterprise_roles.build(enterprise: d1).save @enterprise_user.enterprise_roles.build(enterprise: d2).save @enterprise_user .enterprise_roles.build(enterprise: non_distributor_enterprise).save end it "displays information about the enterprise" do visit '/admin' expect(page).to have_selector ".dashboard_item#enterprises h3", text: "My Enterprises" expect(page).to have_selector ".dashboard_item#products" expect(page).to have_selector ".dashboard_item#order_cycles" expect(page).to have_selector ".dashboard_item#enterprises .list-item", text: d1.name expect(page).to have_selector ".dashboard_item#enterprises .list-item", text: non_distributor_enterprise.name expect(page).to have_selector ".dashboard_item#enterprises .button.bottom", text: "MANAGE MY ENTERPRISES" end context "but no products or order cycles" do it "prompts the user to create a new product and to manage order cycles" do visit '/admin' expect(page).to have_selector ".dashboard_item#products h3", text: "Products" expect(page).to have_selector ".dashboard_item#products .list-item", text: "You don't have any active products." expect(page).to have_selector ".dashboard_item#products .button.bottom", text: "CREATE A NEW PRODUCT" expect(page).to have_selector ".dashboard_item#order_cycles h3", text: "Order Cycles" expect(page).to have_selector ".dashboard_item#order_cycles .list-item", text: "You don't have any active order cycles." expect(page).to have_selector ".dashboard_item#order_cycles .button.bottom", text: "MANAGE ORDER CYCLES" end end context "and at least one product and active order cycle" do let(:oc1) { create(:simple_order_cycle, distributors: [d1]) } let(:p1) { create(:product, distributor: d1) } it "displays information about products and order cycles" do visit '/admin' expect(page).to have_selector ".dashboard_item#products h3", text: "Products" expect(page).to have_selector ".dashboard_item#products .list-item", text: "You don't have any active products." expect(page).to have_selector ".dashboard_item#products .button.bottom", text: "CREATE A NEW PRODUCT" expect(page).to have_selector ".dashboard_item#order_cycles h3", text: "Order Cycles" expect(page).to have_selector ".dashboard_item#order_cycles .list-item", text: "You don't have any active order cycles." expect(page).to have_selector ".dashboard_item#order_cycles .button.bottom", text: "MANAGE ORDER CYCLES" end end context "with open order cycles of distributors not ready for checkout" do let!(:order_cycle) { create(:simple_order_cycle, distributors: [d1]) } it 'should only display the order cycle warning once after login' do # First visit the page after login visit spree.admin_dashboard_path expected_oc_warning = I18n.t( :active_distributors_not_ready_for_checkout_message_singular, distributor_names: d1.name ) expect(page).to have_content(expected_oc_warning) # Reload the page visit spree.admin_dashboard_path expect(page).not_to have_content(expected_oc_warning) end end end end end