diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 70d704a354a..ff1476b15b1 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -26,7 +26,7 @@ class ApplicationController < ActionController::Base rescue_from error, with: :render_timeout end - helper_method :decorated_sp_session, :user_fully_authenticated? + helper_method :decorated_sp_session, :current_sp, :user_fully_authenticated? prepend_before_action :add_new_relic_trace_attributes prepend_before_action :session_expires_at diff --git a/app/decorators/null_service_provider_session.rb b/app/decorators/null_service_provider_session.rb index d2366275a02..9de0bf95dc5 100644 --- a/app/decorators/null_service_provider_session.rb +++ b/app/decorators/null_service_provider_session.rb @@ -21,10 +21,6 @@ def sp_name; end def sp_issuer; end - def sp_logo; end - - def sp_logo_url; end - def sp_redirect_uris; end def requested_attributes; end diff --git a/app/decorators/service_provider_session.rb b/app/decorators/service_provider_session.rb index e9b5131969a..35bc51b5da3 100644 --- a/app/decorators/service_provider_session.rb +++ b/app/decorators/service_provider_session.rb @@ -4,8 +4,6 @@ class ServiceProviderSession include ActionView::Helpers::TranslationHelper include Rails.application.routes.url_helpers - DEFAULT_LOGO = 'generic.svg' - def initialize(sp:, view_context:, sp_session:, service_provider_request:) @sp = sp @view_context = view_context @@ -25,33 +23,6 @@ def sp_redirect_uris @sp.redirect_uris end - def sp_logo - sp.logo.presence || DEFAULT_LOGO - end - - def sp_logo_url - if FeatureManagement.logo_upload_enabled? && sp.remote_logo_key.present? - s3_logo_url(sp) - else - legacy_logo_url - end - end - - def s3_logo_url(service_provider) - region = IdentityConfig.store.aws_region - bucket = IdentityConfig.store.aws_logo_bucket - key = service_provider.remote_logo_key - - "https://s3.#{region}.amazonaws.com/#{bucket}/#{key}" - end - - def legacy_logo_url - logo = sp_logo - ActionController::Base.helpers.image_path("sp-logos/#{logo}") - rescue Propshaft::MissingAssetError - '' - end - def new_session_heading I18n.t('headings.sign_in_with_sp', sp: sp_name) end diff --git a/app/mailers/user_mailer.rb b/app/mailers/user_mailer.rb index 611e4c48d07..562afb31b59 100644 --- a/app/mailers/user_mailer.rb +++ b/app/mailers/user_mailer.rb @@ -305,12 +305,19 @@ def in_person_ready_to_verify(enrollment:, is_enhanced_ipp:) IdentityConfig.store.in_person_outage_emailed_by_date.present? && IdentityConfig.store.in_person_outage_expected_update_date.present? @header = is_enhanced_ipp ? - t('in_person_proofing.headings.barcode_eipp') : t('in_person_proofing.headings.barcode') + t('in_person_proofing.headings.barcode_eipp') : t('in_person_proofing.headings.barcode') @presenter = Idv::InPerson::ReadyToVerifyPresenter.new( enrollment: enrollment, barcode_image_url: attachments['barcode.png'].url, is_enhanced_ipp: is_enhanced_ipp, ) + + if enrollment&.service_provider&.logo_is_email_compatible? + @logo_url = enrollment.service_provider.logo_url + else + @logo_url = nil + end + @sp_name = enrollment.service_provider&.friendly_name @is_enhanced_ipp = is_enhanced_ipp mail( diff --git a/app/models/service_provider.rb b/app/models/service_provider.rb index 7555aac2891..d4c62e001a3 100644 --- a/app/models/service_provider.rb +++ b/app/models/service_provider.rb @@ -46,6 +46,8 @@ class ServiceProvider < ApplicationRecord scope(:internal, -> { where(iaa: IAA_INTERNAL) }) scope(:external, -> { where.not(iaa: IAA_INTERNAL).or(where(iaa: nil)) }) + DEFAULT_LOGO = 'generic.svg' + def metadata attributes.symbolize_keys.merge(certs: ssl_certs) end @@ -94,8 +96,33 @@ def attempts_public_key end end + def logo_url + if FeatureManagement.logo_upload_enabled? && remote_logo_key.present? + s3_logo_url + else + legacy_logo_url + end + end + + def logo_is_email_compatible? + logo_url.end_with?('.png') + end + private + def s3_logo_url + region = IdentityConfig.store.aws_region + bucket = IdentityConfig.store.aws_logo_bucket + + "https://s3.#{region}.amazonaws.com/#{bucket}/#{remote_logo_key}" + end + + def legacy_logo_url + ActionController::Base.helpers.image_path("sp-logos/#{logo || DEFAULT_LOGO}") + rescue Propshaft::MissingAssetError + '' + end + def attempts_config IdentityConfig.store.allowed_attempts_providers.find do |config| config['issuer'] == issuer diff --git a/app/views/layouts/mailer.html.erb b/app/views/layouts/mailer.html.erb index 562ff68439a..4c849abb4c1 100644 --- a/app/views/layouts/mailer.html.erb +++ b/app/views/layouts/mailer.html.erb @@ -37,6 +37,30 @@ + <% if @sp_name %> + + + + <% else %> + <% end %>
+ + + + <% if @logo_url %> + + <% else %> + + <% end %> + + +
+ <%= image_tag( + attachments['logo.png'].url, + size: '142x19', + style: 'width: 142px; height: 19px;', + alt: t('mailer.logo', app_name: APP_NAME), + ) %> + <%= image_tag(@logo_url, height: 40, width: 'auto', alt: @sp_name) %> <%= @sp_name =%>
+
@@ -54,6 +78,7 @@
diff --git a/app/views/shared/_nav_branded.html.erb b/app/views/shared/_nav_branded.html.erb index 8dfcf6fe79c..01121d949be 100644 --- a/app/views/shared/_nav_branded.html.erb +++ b/app/views/shared/_nav_branded.html.erb @@ -1,3 +1,3 @@ <%= image_tag(asset_url('logo.svg'), height: 15, width: 111, alt: APP_NAME) %>
-<%= image_tag(decorated_sp_session.sp_logo_url, height: 40, alt: decorated_sp_session.sp_name) %> +<%= image_tag(current_sp.logo_url, height: 40, alt: decorated_sp_session.sp_name) %> diff --git a/spec/controllers/idv/enter_password_controller_spec.rb b/spec/controllers/idv/enter_password_controller_spec.rb index ed86a3988e1..ba62d1b64e4 100644 --- a/spec/controllers/idv/enter_password_controller_spec.rb +++ b/spec/controllers/idv/enter_password_controller_spec.rb @@ -1042,6 +1042,7 @@ def show receive(:resolved_authn_context_result).and_return(authn_context_result), ) end + it 'passes the correct param to the enrollment helper method' do expect(UspsInPersonProofing::EnrollmentHelper).to receive(:schedule_in_person_enrollment) .with( diff --git a/spec/decorators/null_service_provider_session_spec.rb b/spec/decorators/null_service_provider_session_spec.rb index 5c85e742e6d..501ea3e35d4 100644 --- a/spec/decorators/null_service_provider_session_spec.rb +++ b/spec/decorators/null_service_provider_session_spec.rb @@ -9,12 +9,6 @@ end end - describe '#sp_logo' do - it 'returns nil' do - expect(subject.sp_logo).to be_nil - end - end - describe '#sp_name' do it 'returns nil' do expect(subject.sp_name).to be_nil diff --git a/spec/decorators/service_provider_session_spec.rb b/spec/decorators/service_provider_session_spec.rb index 7f19f225ba0..395d86a14f8 100644 --- a/spec/decorators/service_provider_session_spec.rb +++ b/spec/decorators/service_provider_session_spec.rb @@ -90,87 +90,6 @@ end end - describe '#sp_logo' do - context 'service provider has a logo' do - it 'returns the logo' do - sp_logo = 'real_logo.svg' - sp = build_stubbed(:service_provider, logo: sp_logo) - - subject = ServiceProviderSession.new( - sp: sp, - view_context: view_context, - sp_session: {}, - service_provider_request: ServiceProviderRequestProxy.new, - ) - - expect(subject.sp_logo).to eq sp_logo - end - end - - context 'service provider does not have a logo' do - it 'returns the default logo' do - sp = build_stubbed(:service_provider, logo: nil) - - subject = ServiceProviderSession.new( - sp: sp, - view_context: view_context, - sp_session: {}, - service_provider_request: ServiceProviderRequestProxy.new, - ) - - expect(subject.sp_logo).to eq 'generic.svg' - end - end - end - - describe '#sp_logo_url' do - context 'service provider has a logo' do - it 'returns the logo' do - sp_logo = '18f.svg' - sp = build_stubbed(:service_provider, logo: sp_logo) - - subject = ServiceProviderSession.new( - sp: sp, - view_context: view_context, - sp_session: {}, - service_provider_request: ServiceProviderRequestProxy.new, - ) - - expect(subject.sp_logo_url).to match(%r{sp-logos/18f-[0-9a-f]+\.svg$}) - end - end - - context 'service provider does not have a logo' do - it 'returns the default logo' do - sp = build_stubbed(:service_provider, logo: nil) - - subject = ServiceProviderSession.new( - sp: sp, - view_context: view_context, - sp_session: {}, - service_provider_request: ServiceProviderRequestProxy.new, - ) - - expect(subject.sp_logo_url).to match(%r{/sp-logos/generic-.+\.svg}) - end - end - - context 'service provider has a poorly configured logo' do - it 'does not raise an exception' do - sp = build_stubbed(:service_provider, logo: 'abc') - - subject = ServiceProviderSession.new( - sp: sp, - view_context: view_context, - sp_session: {}, - service_provider_request: ServiceProviderRequestProxy.new, - ) - - expect(subject.sp_logo_url).to be_kind_of(String) - end - end - end - describe '#cancel_link_url' do subject(:decorator) do ServiceProviderSession.new( diff --git a/spec/mailers/previews/user_mailer_preview.rb b/spec/mailers/previews/user_mailer_preview.rb index 7842c6c04f4..a4e330df1a6 100644 --- a/spec/mailers/previews/user_mailer_preview.rb +++ b/spec/mailers/previews/user_mailer_preview.rb @@ -332,6 +332,7 @@ def in_person_enrollment_id_ipp service_provider: ServiceProvider.new( friendly_name: 'Test Service Provider', issuer: SecureRandom.uuid, + logo: 'gsa.png', ), status_updated_at: Time.zone.now - 1.hour, current_address_matches_id: params['current_address_matches_id'] == 'true', @@ -359,6 +360,7 @@ def in_person_enrollment_enhanced_ipp service_provider: ServiceProvider.new( friendly_name: 'Test Service Provider', issuer: SecureRandom.uuid, + logo: '18f.svg', ), status_updated_at: Time.zone.now - 1.hour, current_address_matches_id: params['current_address_matches_id'] == 'true', diff --git a/spec/mailers/user_mailer_spec.rb b/spec/mailers/user_mailer_spec.rb index 5bcaffbe3ba..9e22363362e 100644 --- a/spec/mailers/user_mailer_spec.rb +++ b/spec/mailers/user_mailer_spec.rb @@ -805,6 +805,7 @@ def expect_email_body_to_have_help_and_contact_links create( :in_person_enrollment, :pending, + :with_service_provider, selected_location_details: { name: 'FRIENDSHIP' }, status_updated_at: Time.zone.now - 2.hours, current_address_matches_id: current_address_matches_id, @@ -815,6 +816,7 @@ def expect_email_body_to_have_help_and_contact_links :in_person_enrollment, :pending, :enhanced_ipp, + :with_service_provider, ) end let(:visited_location_name) { 'ACQUAINTANCESHIP' } @@ -824,6 +826,7 @@ def expect_email_body_to_have_help_and_contact_links create( :in_person_enrollment, :expired, + :with_service_provider, selected_location_details: { name: 'FRIENDSHIP' }, ) end @@ -1205,6 +1208,7 @@ def expect_email_body_to_have_help_and_contact_links let(:enrollment) do create( :in_person_enrollment, + :with_service_provider, selected_location_details: { name: 'FRIENDSHIP' }, status_updated_at: Time.zone.now - 2.hours, ) @@ -1236,6 +1240,7 @@ def expect_email_body_to_have_help_and_contact_links let!(:enrollment) do create( :in_person_enrollment, + :with_service_provider, selected_location_details: { name: 'FRIENDSHIP' }, status_updated_at: Time.zone.now - 2.hours, current_address_matches_id: current_address_matches_id, @@ -1268,6 +1273,7 @@ def expect_email_body_to_have_help_and_contact_links let(:enrollment) do create( :in_person_enrollment, + :with_service_provider, selected_location_details: { name: 'FRIENDSHIP' }, status_updated_at: Time.zone.now - 2.hours, ) diff --git a/spec/models/service_provider_spec.rb b/spec/models/service_provider_spec.rb index da35cc8a1c0..b56583cfd05 100644 --- a/spec/models/service_provider_spec.rb +++ b/spec/models/service_provider_spec.rb @@ -237,4 +237,78 @@ end end end + + describe '#logo_is_email_compatible?' do + subject { ServiceProvider.new(logo: logo) } + before do + allow(FeatureManagement).to receive(:logo_upload_enabled?).and_return(true) + end + + context 'service provider has a png logo' do + let(:logo) { 'gsa.png' } + + it 'returns true' do + expect(subject.logo_is_email_compatible?).to be(true) + end + end + + context 'service provider has a svg logo' do + let(:logo) { '18f.svg' } + + it 'returns false' do + expect(subject.logo_is_email_compatible?).to be(false) + end + end + + context 'service provider has no logo' do + let(:logo) { nil } + + it 'returns false' do + expect(subject.logo_is_email_compatible?).to be(false) + end + end + end + + describe '#logo_url' do + let(:logo) { '18f.svg' } + subject { ServiceProvider.new(logo: logo) } + context 'service provider has a logo' do + it 'returns the logo' do + expect(subject.logo_url).to match(%r{sp-logos/18f-[0-9a-f]+\.svg$}) + end + end + + context 'service provider does not have a logo' do + let(:logo) { nil } + it 'returns the default logo' do + expect(subject.logo_url).to match(%r{/sp-logos/generic-.+\.svg}) + end + end + + context 'service provider has a poorly configured logo' do + let(:logo) { 'abc' } + it 'does not raise an exception' do + expect(subject.logo_url).to be_kind_of(String) + end + end + + context 'when the logo upload feature is enabled' do + let(:aws_region) { 'us-west-2' } + let(:aws_logo_bucket) { 'logo-bucket' } + let(:remote_logo_key) { 'llave' } + before do + allow(FeatureManagement).to receive(:logo_upload_enabled?).and_return(true) + allow(IdentityConfig.store).to receive(:aws_logo_bucket) + .and_return(aws_logo_bucket) + end + + context 'when the remote logo key is present' do + subject { ServiceProvider.new(logo: logo, remote_logo_key: remote_logo_key) } + + it 'uses the s3_logo_url' do + expect(subject.logo_url).to match("https://s3.#{aws_region}.amazonaws.com/#{aws_logo_bucket}/#{remote_logo_key}") + end + end + end + end end diff --git a/spec/services/usps_in_person_proofing/enrollment_helper_spec.rb b/spec/services/usps_in_person_proofing/enrollment_helper_spec.rb index c2bfd607731..cd0440ab3c9 100644 --- a/spec/services/usps_in_person_proofing/enrollment_helper_spec.rb +++ b/spec/services/usps_in_person_proofing/enrollment_helper_spec.rb @@ -46,7 +46,9 @@ it 'returns without error' do expect do - subject.schedule_in_person_enrollment(user:, pii:, is_enhanced_ipp: false) + subject.schedule_in_person_enrollment( + user:, pii:, is_enhanced_ipp: false, + ) end.not_to raise_error end end @@ -69,7 +71,9 @@ it 'uses a mock proofer' do expect(UspsInPersonProofing::Mock::Proofer).to receive(:new).and_call_original - subject.schedule_in_person_enrollment(user:, pii:, is_enhanced_ipp:) + subject.schedule_in_person_enrollment( + user:, pii:, is_enhanced_ipp:, + ) end end @@ -84,7 +88,9 @@ it 'updates the existing enrollment record' do expect(user.in_person_enrollments.length).to eq(1) - subject.schedule_in_person_enrollment(user:, pii:, is_enhanced_ipp:) + subject.schedule_in_person_enrollment( + user:, pii:, is_enhanced_ipp:, + ) enrollment.reload # tests that the value of current_address_matches_id on the enrollment corresponds @@ -120,14 +126,18 @@ UspsInPersonProofing::Mock::Proofer.new.request_enroll(applicant, is_enhanced_ipp) end - subject.schedule_in_person_enrollment(user:, pii:, is_enhanced_ipp:) + subject.schedule_in_person_enrollment( + user:, pii:, is_enhanced_ipp:, + ) end it <<~STR.squish do sets enrollment status to pending, sponsor_id to usps_ipp_sponsor_id, and sets established at date and unique id STR - subject.schedule_in_person_enrollment(user:, pii:, is_enhanced_ipp:) + subject.schedule_in_person_enrollment( + user:, pii:, is_enhanced_ipp:, + ) expect(user.in_person_enrollments.first.status).to eq(InPersonEnrollment::STATUS_PENDING) expect(user.in_person_enrollments.first.sponsor_id).to eq(usps_ipp_sponsor_id) @@ -138,7 +148,9 @@ context 'event logging' do context 'with no service provider' do it 'logs event' do - subject.schedule_in_person_enrollment(user:, pii:, is_enhanced_ipp:) + subject.schedule_in_person_enrollment( + user:, pii:, is_enhanced_ipp:, + ) expect(subject_analytics).to have_logged_event( 'USPS IPPaaS enrollment created', @@ -169,7 +181,9 @@ let(:is_enhanced_ipp) { true } it 'logs event' do - subject.schedule_in_person_enrollment(user:, pii:, is_enhanced_ipp:) + subject.schedule_in_person_enrollment( + user:, pii:, is_enhanced_ipp:, + ) expect(subject_analytics).to have_logged_event( 'USPS IPPaaS enrollment created', @@ -184,7 +198,9 @@ context 'when the enrollment is not enhanced_ipp' do it 'logs event' do - subject.schedule_in_person_enrollment(user:, pii:, is_enhanced_ipp:) + subject.schedule_in_person_enrollment( + user:, pii:, is_enhanced_ipp:, + ) expect(subject_analytics).to have_logged_event( 'USPS IPPaaS enrollment created', @@ -211,7 +227,9 @@ it 'does not log the presence of address line 2 only in residential address' do pii['identity_doc_address2'] = nil - subject.schedule_in_person_enrollment(user:, pii:, is_enhanced_ipp:) + subject.schedule_in_person_enrollment( + user:, pii:, is_enhanced_ipp:, + ) expect(subject_analytics).to have_logged_event( 'USPS IPPaaS enrollment created', @@ -229,7 +247,9 @@ pii['same_address_as_id'] = false pii['address2'] = nil - subject.schedule_in_person_enrollment(user:, pii:, is_enhanced_ipp:) + subject.schedule_in_person_enrollment( + user:, pii:, is_enhanced_ipp:, + ) expect(subject_analytics).to have_logged_event( 'USPS IPPaaS enrollment created', @@ -246,7 +266,9 @@ let(:opt_in) { true } it 'logs user\'s opt-in choice' do - subject.schedule_in_person_enrollment(user:, pii:, is_enhanced_ipp:, opt_in:) + subject.schedule_in_person_enrollment( + user:, pii:, is_enhanced_ipp:, opt_in:, + ) expect(subject_analytics).to have_logged_event( 'USPS IPPaaS enrollment created', @@ -261,7 +283,9 @@ end it 'sends verification emails' do - subject.schedule_in_person_enrollment(user:, pii:, is_enhanced_ipp:) + subject.schedule_in_person_enrollment( + user:, pii:, is_enhanced_ipp:, + ) expect_delivered_email_count(1) expect_delivered_email( diff --git a/spec/views/layouts/mailer.html.erb_spec.rb b/spec/views/layouts/mailer.html.erb_spec.rb index b87977b1ca2..390bc06b6ba 100644 --- a/spec/views/layouts/mailer.html.erb_spec.rb +++ b/spec/views/layouts/mailer.html.erb_spec.rb @@ -3,53 +3,104 @@ RSpec.describe 'layouts/mailer.html.erb' do let(:user) { build_stubbed(:user) } - before do - @mail = UserMailer.with(user: user, email_address: user.email_addresses.first).email_added - allow(view).to receive(:message).and_return(@mail) - allow(view).to receive(:attachments).and_return(@mail.attachments) + context 'email_added emails' do + before do + @mail = UserMailer.with(user: user, email_address: user.email_addresses.first).email_added + allow(view).to receive(:message).and_return(@mail) + allow(view).to receive(:attachments).and_return(@mail.attachments) - render - end + render + end - it 'includes the message subject as the title' do - expect(rendered).to have_title @mail.subject - end + it 'includes the message subject as the title' do + expect(rendered).to have_title @mail.subject + end - it 'includes the app logo' do - expect(rendered).to have_css("img[src*='.mail']") - end + it 'includes the app logo' do + expect(rendered).to have_css("img[src*='.mail']") + end - it 'includes alt text for app logo that reads Login.gov logo' do - expect(rendered).to have_css("img[alt='#{t('mailer.logo', app_name: APP_NAME)}']") - end + it 'includes alt text for app logo that reads Login.gov logo' do + expect(rendered).to have_css("img[alt='#{t('mailer.logo', app_name: APP_NAME)}']") + end - it 'includes the message subject in the body' do - expect(rendered).to have_content @mail.subject - end + it 'includes the message subject in the body' do + expect(rendered).to have_content @mail.subject + end - it 'includes a request to not reply to this messsage' do - expect(rendered).to have_content(t('mailer.no_reply')) - end + it 'includes a request to not reply to this messsage' do + expect(rendered).to have_content(t('mailer.no_reply')) + end - it 'includes the support text and link' do - expect(rendered).to have_content(t('mailer.no_reply')) - expect(rendered).to have_content( - t('mailer.help_html', app_name: APP_NAME, link_html: MarketingSite.nice_help_url), - ) - expect(rendered).to have_link(MarketingSite.nice_help_url, href: MarketingSite.help_url) - end + it 'includes the support text and link' do + expect(rendered).to have_content(t('mailer.no_reply')) + expect(rendered).to have_content( + t('mailer.help_html', app_name: APP_NAME, link_html: MarketingSite.nice_help_url), + ) + expect(rendered).to have_link(MarketingSite.nice_help_url, href: MarketingSite.help_url) + end + + it 'includes link to About Login.gov' do + expect(rendered).to have_link( + t('mailer.about', app_name: APP_NAME), + href: MarketingSite.base_url, + ) + end - it 'includes link to About Login.gov' do - expect(rendered).to have_link( - t('mailer.about', app_name: APP_NAME), - href: MarketingSite.base_url, - ) + it 'includes link to the privacy policy' do + expect(rendered).to have_link( + t('mailer.privacy_policy'), + href: MarketingSite.security_and_privacy_practices_url, + ) + end end - it 'includes link to the privacy policy' do - expect(rendered).to have_link( - t('mailer.privacy_policy'), - href: MarketingSite.security_and_privacy_practices_url, - ) + context 'in-person proofing ready to verify emails' do + let(:user) { create(:user, :with_pending_in_person_enrollment) } + let(:sp_name) { 'Friendly Service Provider' } + let(:service_provider) do + create(:service_provider, logo: logo, friendly_name: sp_name) + end + let(:enrollment) { create(:in_person_enrollment, :pending, service_provider: service_provider) } + + before do + @mail = UserMailer.with( + user: user, + email_address: user.email_addresses.first, + ).in_person_ready_to_verify(enrollment:, is_enhanced_ipp: false) + allow(view).to receive(:message).and_return(@mail) + allow(view).to receive(:attachments).and_return(@mail.attachments) + @sp_name = sp_name + @logo_url = logo_url + + render + end + + context 'when the partner agency logo is a png' do + let(:logo) { 'gsa.png' } + let(:logo_url) { '/assets/sp-logos/gsa.png' } + + it 'displays the partner agency logo' do + expect(rendered).to have_css("img[src*='gsa.png']") + end + end + + context 'when the partner agency logo is a svg' do + let(:logo) { 'generic.svg' } + let(:logo_url) { nil } + + it 'displays the partner agency name' do + expect(rendered).to have_content('Friendly Service Provider') + end + end + + context 'when there is no partner agency logo' do + let(:logo) { nil } + let(:logo_url) { nil } + + it 'displays the partner agency name' do + expect(rendered).to have_content('Friendly Service Provider') + end + end end end diff --git a/spec/views/shared/_banner.html.erb_spec.rb b/spec/views/shared/_banner.html.erb_spec.rb index 1c7d5cf819a..35ff2f6da32 100644 --- a/spec/views/shared/_banner.html.erb_spec.rb +++ b/spec/views/shared/_banner.html.erb_spec.rb @@ -1,18 +1,23 @@ require 'rails_helper' RSpec.describe 'shared/_banner.html.erb' do - before do - sp_with_logo = build_stubbed( + let(:sp_with_logo) do + build_stubbed( :service_provider, logo: 'generic.svg', friendly_name: 'Best SP ever' ) - - decorated_sp_session = ServiceProviderSession.new( + end + let(:decorated_sp_session) do + ServiceProviderSession.new( sp: sp_with_logo, view_context: '', sp_session: {}, service_provider_request: nil, ) + end + + before do allow(view).to receive(:decorated_sp_session).and_return(decorated_sp_session) + allow(view).to receive(:current_sp).and_return(sp_with_logo) end it 'properly HTML escapes the secure notification' do diff --git a/spec/views/shared/_nav_branded.html.erb_spec.rb b/spec/views/shared/_nav_branded.html.erb_spec.rb index dca15917aba..36d1f73f2a3 100644 --- a/spec/views/shared/_nav_branded.html.erb_spec.rb +++ b/spec/views/shared/_nav_branded.html.erb_spec.rb @@ -2,19 +2,24 @@ RSpec.describe 'shared/_nav_branded.html.erb' do let(:view_context) { ActionController::Base.new.view_context } + let(:sp_with_logo) do + build_stubbed( + :service_provider, logo: 'generic.svg', friendly_name: 'Best SP ever' + ) + end + let(:decorated_sp_session) do + ServiceProviderSession.new( + sp: sp_with_logo, + view_context: view_context, + sp_session: {}, + service_provider_request: nil, + ) + end context 'with a SP-logo configured' do before do - sp_with_logo = build_stubbed( - :service_provider, logo: 'generic.svg', friendly_name: 'Best SP ever' - ) - decorated_sp_session = ServiceProviderSession.new( - sp: sp_with_logo, - view_context: view_context, - sp_session: {}, - service_provider_request: nil, - ) allow(view).to receive(:decorated_sp_session).and_return(decorated_sp_session) + allow(view).to receive(:current_sp).and_return(sp_with_logo) render end @@ -35,17 +40,20 @@ let(:bucket) { 'bucket_id' } let(:region) { IdentityConfig.store.aws_region } let(:img_url) { "https://s3.#{region}.amazonaws.com/#{bucket}/key-to-logo" } - - before do - allow(IdentityConfig.store).to receive(:aws_logo_bucket).and_return(bucket) - allow(FeatureManagement).to receive(:logo_upload_enabled?).and_return(true) - decorated_sp_session = ServiceProviderSession.new( + let(:decorated_sp_session) do + ServiceProviderSession.new( sp: sp_with_s3_logo, view_context: view_context, sp_session: {}, service_provider_request: nil, ) + end + + before do + allow(IdentityConfig.store).to receive(:aws_logo_bucket).and_return(bucket) + allow(FeatureManagement).to receive(:logo_upload_enabled?).and_return(true) allow(view).to receive(:decorated_sp_session).and_return(decorated_sp_session) + allow(view).to receive(:current_sp).and_return(sp_with_s3_logo) render end @@ -56,15 +64,19 @@ end context 'without a SP-logo configured' do - before do - sp_without_logo = build_stubbed(:service_provider, friendly_name: 'No logo no problem') - decorated_sp_session = ServiceProviderSession.new( + let(:sp_without_logo) { build_stubbed(:service_provider, friendly_name: 'No logo no problem') } + let(:decorated_sp_session) do + ServiceProviderSession.new( sp: sp_without_logo, view_context: view_context, sp_session: {}, service_provider_request: nil, ) + end + + before do allow(view).to receive(:decorated_sp_session).and_return(decorated_sp_session) + allow(view).to receive(:current_sp).and_return(sp_without_logo) render end @@ -74,15 +86,18 @@ end context 'service provider has a poorly configured logo' do - before do - sp = build_stubbed(:service_provider, logo: 'abc') - decorated_sp_session = ServiceProviderSession.new( + let(:sp) { build_stubbed(:service_provider, logo: 'abc') } + let(:decorated_sp_session) do + ServiceProviderSession.new( sp:, view_context:, sp_session: {}, service_provider_request: nil, ) + end + before do allow(view).to receive(:decorated_sp_session).and_return(decorated_sp_session) + allow(view).to receive(:current_sp).and_return(sp) end it 'does not raise an exception' do