mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-25 20:46:48 +00:00
I considered adding a request spec, but figured it still doesnt' test the form, so better to use a full system spec.
148 lines
4.8 KiB
Ruby
148 lines
4.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "system_helper"
|
|
|
|
RSpec.describe "Connected Apps", feature: :connected_apps, vcr: true do
|
|
let(:enterprise) { create(:enterprise) }
|
|
|
|
before do
|
|
login_as enterprise.owner
|
|
end
|
|
|
|
it "is only visible when feature is enabled" do
|
|
allow(Spree::Config).to receive(:connected_apps_enabled).
|
|
and_return("discover_regen,affiliate_sales_data")
|
|
|
|
# Assuming that this feature will be the default one day, I'm treating this
|
|
# as special case and disable the feature. I don't want to wrap all other
|
|
# test cases in a context block for the feature toggle which will need
|
|
# removing one day.
|
|
Flipper.disable(:connected_apps)
|
|
visit edit_admin_enterprise_path(enterprise)
|
|
expect(page).not_to have_content "CONNECTED APPS"
|
|
|
|
Flipper.enable(:connected_apps, enterprise.owner)
|
|
visit edit_admin_enterprise_path(enterprise)
|
|
expect(page).to have_content "CONNECTED APPS"
|
|
|
|
Flipper.disable(:connected_apps)
|
|
Flipper.enable(:connected_apps, enterprise)
|
|
visit edit_admin_enterprise_path(enterprise)
|
|
expect(page).to have_content "CONNECTED APPS"
|
|
end
|
|
|
|
it "is only visible when setting is enabled" do
|
|
allow(Spree::Config).to receive(:connected_apps_enabled).and_return(nil)
|
|
visit edit_admin_enterprise_path(enterprise)
|
|
expect(page).not_to have_content "CONNECTED APPS"
|
|
|
|
allow(Spree::Config).to receive(:connected_apps_enabled).
|
|
and_return("discover_regen,affiliate_sales_data")
|
|
visit edit_admin_enterprise_path(enterprise)
|
|
expect(page).to have_content "CONNECTED APPS"
|
|
end
|
|
|
|
it "only shows enabled apps" do
|
|
allow(Spree::Config).to receive(:connected_apps_enabled).and_return("discover_regen")
|
|
|
|
visit "#{edit_admin_enterprise_path(enterprise)}#/connected_apps_panel"
|
|
|
|
expect(page).to have_selector "h3", text: "Discover Regenerative"
|
|
expect(page).not_to have_selector "h3", text: "INRAE / UFC QUE CHOISIR Research"
|
|
end
|
|
|
|
describe "Discover Regenerative" do
|
|
before do
|
|
allow(Spree::Config).to receive(:connected_apps_enabled).and_return("discover_regen")
|
|
end
|
|
let(:section_heading) { self.class.description }
|
|
|
|
it "can be enabled and disabled" do
|
|
visit edit_admin_enterprise_path(enterprise)
|
|
|
|
scroll_to :bottom
|
|
click_link "Connected apps"
|
|
|
|
within section_containing_heading do
|
|
click_button "Allow data sharing"
|
|
end
|
|
|
|
# (page is reloaded so we need to evaluate within block again)
|
|
within section_containing_heading do
|
|
expect(page).not_to have_button "Allow data sharing"
|
|
expect(page).to have_button "Loading", disabled: true
|
|
|
|
perform_enqueued_jobs(only: ConnectAppJob)
|
|
|
|
expect(page).not_to have_button "Loading", disabled: true
|
|
expect(page).to have_content "account is connected"
|
|
expect(page).to have_link "Manage listing"
|
|
|
|
click_button "Stop sharing"
|
|
end
|
|
|
|
within section_containing_heading do
|
|
expect(page).to have_button "Allow data sharing"
|
|
expect(page).not_to have_button "Stop sharing"
|
|
expect(page).not_to have_content "account is connected"
|
|
expect(page).not_to have_link "Manage listing"
|
|
end
|
|
end
|
|
|
|
it "can't be enabled by non-manager" do
|
|
login_as create(:admin_user)
|
|
|
|
visit "#{edit_admin_enterprise_path(enterprise)}#/connected_apps_panel"
|
|
|
|
within section_containing_heading do
|
|
expect(page).to have_button("Allow data sharing", disabled: true)
|
|
expect(page).to have_content "Only managers can connect apps."
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "Affiliate Sales Data" do
|
|
before do
|
|
allow(Spree::Config).to receive(:connected_apps_enabled).and_return("affiliate_sales_data")
|
|
end
|
|
let(:section_heading) { "INRAE / UFC QUE CHOISIR Research" }
|
|
|
|
it "can be enabled and disabled" do
|
|
visit edit_admin_enterprise_path(enterprise)
|
|
|
|
scroll_to :bottom
|
|
click_link "Connected apps"
|
|
|
|
within section_containing_heading do
|
|
click_button "Allow data sharing"
|
|
end
|
|
|
|
# (page is reloaded so we need to evaluate within block again)
|
|
within section_containing_heading do
|
|
expect(page).not_to have_button "Allow data sharing"
|
|
click_button "Stop sharing"
|
|
end
|
|
|
|
within section_containing_heading do
|
|
expect(page).to have_button "Allow data sharing"
|
|
expect(page).not_to have_button "Stop sharing"
|
|
end
|
|
end
|
|
|
|
it "can't be enabled by non-manager" do
|
|
login_as create(:admin_user)
|
|
|
|
visit "#{edit_admin_enterprise_path(enterprise)}#/connected_apps_panel"
|
|
|
|
within section_containing_heading do
|
|
expect(page).to have_button("Allow data sharing", disabled: true)
|
|
expect(page).to have_content "Only managers can connect apps."
|
|
end
|
|
end
|
|
end
|
|
|
|
def section_containing_heading(heading = section_heading)
|
|
page.find("h3", text: heading).ancestor("section")
|
|
end
|
|
end
|