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 %>
+
+
+
+
+ |
+ <%= image_tag(
+ attachments['logo.png'].url,
+ size: '142x19',
+ style: 'width: 142px; height: 19px;',
+ alt: t('mailer.logo', app_name: APP_NAME),
+ ) %>
+ |
+ <% if @logo_url %>
+ <%= image_tag(@logo_url, height: 40, width: 'auto', alt: @sp_name) %> |
+ <% else %>
+ <%= @sp_name =%> |
+ <% end %>
+ |
+
+
+ |
+
+ <% else %>
|
|
+ <% end %>
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