Files
openfoodnetwork/spec/requests/spree/admin/overview_spec.rb
2025-05-21 09:43:24 +02:00

89 lines
2.8 KiB
Ruby

# frozen_string_literal: true
require "spec_helper"
RSpec.describe "/admin" do
let(:enterprise) { create(:supplier_enterprise, name: "Feedme") }
let(:enterprise_user) { create(:user, enterprise_limit: 1) }
before do
enterprise_user.enterprise_roles.build(enterprise:).save
sign_in enterprise_user
end
describe "GET /admin" do
before do
mocked_tos = double(TermsOfServiceFile, updated_at: 2.hours.ago)
allow(TermsOfServiceFile).to receive(:current).and_return(mocked_tos)
# Mock current_url so we don't have to set up a complicated TermsOfServiceFile mock
# with attachement
allow(TermsOfServiceFile).to receive(:current_url).and_return("tmp/tos.pdf")
end
it "loads the dashboard page" do
get "/admin"
expect(response).to render_template("spree/admin/overview/single_enterprise_dashboard")
end
# The banner will show on all admin page, we are just testing it here
describe "terms of service updated banner" do
context "when terms of service has been updated" do
before { Spree::Config.enterprises_require_tos = true }
it "shows accept new ToS banner" do
enterprise_user.update(terms_of_service_accepted_at: nil)
get "/admin"
expect(response.body).to include("Terms of Service have been updated")
end
context "when user has accepted new terms of service" do
it "doesn't show accept new ToS banner" do
enterprise_user.update(terms_of_service_accepted_at: 1.hour.ago)
get "/admin"
expect(response.body).not_to include("Terms of Service have been updated")
end
end
# Shouldn't be possible
context "when user has accepted new terms of service in the future" do
it "shows accept new ToS banner" do
enterprise_user.update(terms_of_service_accepted_at: 1.hour.from_now)
get "/admin"
expect(response.body).to include("Terms of Service have been updated")
end
end
context "when no ToS has been uploaded" do
it "doesn't show accept new ToS banner" do
allow(TermsOfServiceFile).to receive(:current).and_return(nil)
get "/admin"
expect(response.body).not_to include("Terms of Service have been updated")
end
end
context "when enterprises don't need to accept ToS" do
before do
Spree::Config.enterprises_require_tos = false
enterprise_user.update(terms_of_service_accepted_at: nil)
end
it "doesn't show accept new ToS banner" do
get "/admin"
expect(response.body).not_to include("Terms of Service have been updated")
end
end
end
end
end
end