diff --git a/app/assets/images/carat-right.svg b/app/assets/images/carat-right.svg
new file mode 100644
index 00000000000..3eb96ad96ab
--- /dev/null
+++ b/app/assets/images/carat-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/stylesheets/variables/_app.scss b/app/assets/stylesheets/variables/_app.scss
index c0aeded5bc1..2125b2ec0fb 100644
--- a/app/assets/stylesheets/variables/_app.scss
+++ b/app/assets/stylesheets/variables/_app.scss
@@ -13,7 +13,7 @@ $line-height: 1.5 !default;
$bold-font-weight: bold !default;
$heading-font-family: $serif-font-family !default;
$heading-font-weight: bold !default;
-$heading-line-height: 1.3 !default;
+$heading-line-height: 1.5 !default;
$caps-letter-spacing: 1px !default;
$line-height-0: .75 !default; // For when a tighter-than-normal leading is desired.
diff --git a/app/decorators/service_provider_session_decorator.rb b/app/decorators/service_provider_session_decorator.rb
index 8e91dce7f04..2d6e511ec95 100644
--- a/app/decorators/service_provider_session_decorator.rb
+++ b/app/decorators/service_provider_session_decorator.rb
@@ -103,6 +103,10 @@ def cancel_link_url
view_context.sign_up_start_url(request_id: sp_session[:request_id])
end
+ def failure_to_proof_url
+ sp.failure_to_proof_url || sp_return_url
+ end
+
def sp_alert?(path)
sp_alert.present? && !sp_alert[:exclude_paths]&.include?(path)
end
diff --git a/app/decorators/session_decorator.rb b/app/decorators/session_decorator.rb
index bac80eb89ba..1a890710051 100644
--- a/app/decorators/session_decorator.rb
+++ b/app/decorators/session_decorator.rb
@@ -31,6 +31,8 @@ def cancel_link_url
view_context.root_url
end
+ def failure_to_proof_url; end
+
def sp_name; end
def sp_agency; end
diff --git a/app/presenters/idv/idv_failure_presenter.rb b/app/presenters/idv/idv_failure_presenter.rb
index bae0cdc260d..4bbaf6d8a6f 100644
--- a/app/presenters/idv/idv_failure_presenter.rb
+++ b/app/presenters/idv/idv_failure_presenter.rb
@@ -30,24 +30,7 @@ def message
end
def next_steps
- [help_step, sp_step, profile_step].compact
- end
-
- private
-
- def help_step
- link_to t('idv.messages.help_center_html'), MarketingSite.help_url
- end
-
- def sp_step
- return unless (sp_name = decorated_session.sp_name)
- link = link_to(sp_name, decorated_session.sp_return_url)
- t('idv.messages.jurisdiction.sp_support', link: link)
- end
-
- def profile_step
- link = link_to(t('idv.messages.jurisdiction.profile_link'), account_path)
- t('idv.messages.jurisdiction.profile', link: link)
+ []
end
end
end
diff --git a/app/presenters/idv/jurisdiction_failure_presenter.rb b/app/presenters/idv/jurisdiction_failure_presenter.rb
index 29e18bc0964..b3be3840237 100644
--- a/app/presenters/idv/jurisdiction_failure_presenter.rb
+++ b/app/presenters/idv/jurisdiction_failure_presenter.rb
@@ -34,7 +34,7 @@ def message
end
def next_steps
- [try_again_step, sp_step, profile_step].compact
+ []
end
private
@@ -42,21 +42,5 @@ def next_steps
def i18n_args
jurisdiction ? { state: state_name_for_abbrev(jurisdiction) } : {}
end
-
- def try_again_step
- link = link_to(t('idv.messages.jurisdiction.try_again_link'), idv_jurisdiction_path)
- t('idv.messages.jurisdiction.try_again', link: link)
- end
-
- def sp_step
- return unless (sp_name = decorated_session.sp_name)
- link = link_to(sp_name, decorated_session.sp_return_url)
- t('idv.messages.jurisdiction.sp_support', link: link)
- end
-
- def profile_step
- link = link_to(t('idv.messages.jurisdiction.profile_link'), account_path)
- t('idv.messages.jurisdiction.profile', link: link)
- end
end
end
diff --git a/app/presenters/idv/max_attempts_failure_presenter.rb b/app/presenters/idv/max_attempts_failure_presenter.rb
index 33df16ab249..d3ff836993c 100644
--- a/app/presenters/idv/max_attempts_failure_presenter.rb
+++ b/app/presenters/idv/max_attempts_failure_presenter.rb
@@ -32,28 +32,7 @@ def message
end
def next_steps
- [sp_step, help_step, profile_step].compact
- end
-
- private
-
- def sp_step
- return unless (sp_name = decorated_session.sp_name)
- link = link_to(sp_name, decorated_session.sp_return_url)
- t('idv.messages.jurisdiction.sp_support', link: link)
- end
-
- def help_step
- link = link_to(
- t('idv.messages.read_about_security_and_privacy.link'),
- MarketingSite.help_privacy_and_security_url
- )
- t('idv.messages.read_about_security_and_privacy.text', link: link)
- end
-
- def profile_step
- link = link_to(t('idv.messages.jurisdiction.profile_link'), account_path)
- t('idv.messages.jurisdiction.profile', link: link)
+ []
end
end
end
diff --git a/app/presenters/idv/ssn_failure_presenter.rb b/app/presenters/idv/ssn_failure_presenter.rb
index 7250f3c9866..644d128bbd8 100644
--- a/app/presenters/idv/ssn_failure_presenter.rb
+++ b/app/presenters/idv/ssn_failure_presenter.rb
@@ -31,7 +31,7 @@ def message
end
def next_steps
- [try_again_step, sign_out_step, profile_step]
+ []
end
private
diff --git a/app/views/idv/shared/_failure_to_proof_url.html.slim b/app/views/idv/shared/_failure_to_proof_url.html.slim
new file mode 100644
index 00000000000..20691c38430
--- /dev/null
+++ b/app/views/idv/shared/_failure_to_proof_url.html.slim
@@ -0,0 +1,9 @@
+- if decorated_session.sp_name
+ hr
+ .mb2.mt2
+ .right = link_to image_tag(asset_url('carat-right.svg'), size: '10'),
+ decorated_session.failure_to_proof_url, class: 'bold block btn-link text-decoration-none'
+ = link_to t('idv.failure.help.get_help_html', sp_name: decorated_session.sp_name),
+ decorated_session.failure_to_proof_url,
+ class: 'block btn-link text-decoration-none'
+ hr
diff --git a/app/views/idv/shared/verification_failure.html.slim b/app/views/idv/shared/verification_failure.html.slim
index 34cac002f37..72430f36e3f 100644
--- a/app/views/idv/shared/verification_failure.html.slim
+++ b/app/views/idv/shared/verification_failure.html.slim
@@ -1,5 +1,7 @@
= render 'shared/failure', presenter: presenter
p == presenter.warning_message
-.mt4
- = link_to presenter.button_text, presenter.button_path, class: 'btn btn-primary'
+= render 'idv/shared/failure_to_proof_url', presenter: presenter
+
+.mt3
+ = link_to presenter.button_text, presenter.button_path, class: 'btn btn-primary btn-link'
diff --git a/app/views/shared/_failure.html.slim b/app/views/shared/_failure.html.slim
index bdf4d8ac5f3..fec4ea47aa5 100644
--- a/app/views/shared/_failure.html.slim
+++ b/app/views/shared/_failure.html.slim
@@ -12,6 +12,7 @@ p == presenter.description
- if presenter.message.present?
h2.h4.mb2.mt3.my0 = presenter.message
+ = render 'idv/shared/failure_to_proof_url', presenter: presenter
- presenter.next_steps.each do |step|
p == step
diff --git a/config/locales/idv/en.yml b/config/locales/idv/en.yml
index 04ff62e786c..688c82967ae 100644
--- a/config/locales/idv/en.yml
+++ b/config/locales/idv/en.yml
@@ -44,6 +44,8 @@ en:
errors:
link: please contact us
text: If you keep getting these errors, %{link}, or try again tomorrow.
+ help:
+ get_help_html: Get help at %{sp_name}
phone:
fail: For your security, identity verification for your account is locked
for 24 hours.
@@ -108,14 +110,11 @@ en:
dupe_ssn2_link: sign out now and sign back in
hardfail: We can't log you in right now, but you can try verifying your identity
again in %{hours} hours.
- help_center_html: Visit our Help Center to learn more about
- verifying your account.
jurisdiction:
no_id: I don't have a state-issued ID
no_id_failure: We're working hard to add more ways to verify your identity.
profile: To access your account in the future, you can %{link}.
profile_link: view your account here
- sp_support: Visit %{link} for more information.
try_again: Make a mistake? You can %{link}.
try_again_link: try again
unsupported_jurisdiction_failure: We're working hard to add more states and
@@ -136,9 +135,6 @@ en:
- in your name, or a family member's name
- not a virtual phone (such as Google Voice or Skype)
- a U.S. number
- read_about_security_and_privacy:
- link: read about how login.gov keeps your information safe
- text: You can %{link} on our help page.
return_to_profile: "‹ Return to your login.gov profile"
return_to_sp_html: You can now log into %{sp}.
review:
diff --git a/config/locales/idv/es.yml b/config/locales/idv/es.yml
index 489e9f06df3..2647bec0619 100644
--- a/config/locales/idv/es.yml
+++ b/config/locales/idv/es.yml
@@ -44,6 +44,8 @@ es:
errors:
link: contáctanos
text: Si sigues recibiendo estos errores, %{link} o vuelve a intentarlo mañana.
+ help:
+ get_help_html: Obtener ayuda en %{sp_name}
phone:
fail: Para su seguridad, la verificación de identidad de su cuenta está bloqueada
durante 24 horas.
@@ -105,15 +107,12 @@ es:
dupe_ssn2_html: Por favor %{link} con el email que utilizó originalmente.
dupe_ssn2_link: Cerrar ahora y volver a iniciar sesión
hardfail: NOT TRANSLATED YET
- help_center_html: Visite nuestro Centro de Ayuda para obtener
- más información sobre la verificación de su cuenta.
jurisdiction:
no_id: No tengo una identificación emitida por el estado
no_id_failure: Estamos trabajando arduamente para agregar más formas de verificar
su identidad.
profile: Para acceder a su cuenta en el futuro, puede %{link}.
profile_link: mira tu cuenta aquí
- sp_support: Visita %{link} para obtener más información.
try_again: "¿Cometer un error? Puedes %{link}."
try_again_link: intentarlo de nuevo
unsupported_jurisdiction_failure: Estamos trabajando duro para agregar más
@@ -136,9 +135,6 @@ es:
- no es un teléfono virtual (como Google Voice o Skype)
- no es un número de teléfono prepago
- un número de EE. UU.
- read_about_security_and_privacy:
- link: leer sobre cómo login.gov mantiene su información segura
- text: Puede %{link} en nuestra página de ayuda.
return_to_profile: NOT TRANSLATED YET
return_to_sp_html: NOT TRANSLATED YET
review:
diff --git a/config/locales/idv/fr.yml b/config/locales/idv/fr.yml
index 0534e6a74c6..3e3aa266df2 100644
--- a/config/locales/idv/fr.yml
+++ b/config/locales/idv/fr.yml
@@ -48,6 +48,8 @@ fr:
errors:
link: contactez-nous
text: Si vous continuez à recevoir ces erreurs, %{link} ou réessayez demain.
+ help:
+ get_help_html: Obtenir de l'aide à %{sp_name}
phone:
fail: Pour votre sécurité, la vérification d'identité de votre compte est
verrouillée pendant 24 heures.
@@ -111,15 +113,12 @@ fr:
originalement.
dupe_ssn2_link: déconnectez-vous puis connectez-vous à nouveau
hardfail: NOT TRANSLATED YET
- help_center_html: Visitez notre Centre d'aide pour en apprendre
- davantage sur la façon dont nous vérifions votre compte.
jurisdiction:
no_id: Je n'ai pas de carte d'identité officielle
no_id_failure: Nous travaillons dur pour ajouter plus de moyens de vérifier
votre identité.
profile: Pour accéder à votre compte dans le futur, vous pouvez %{link}.
profile_link: voir votre compte ici
- sp_support: Visitez %{link} pour plus d'informations.
try_again: Faire une erreur? Vous pouvez %{link}.
try_again_link: réessayer
unsupported_jurisdiction_failure: Nous travaillons dur pour ajouter plus d'états
@@ -143,9 +142,6 @@ fr:
- pas un téléphone virtuel (comme Google Voice ou Skype)
- pas un numéro de téléphone prépayé
- un numéro américain
- read_about_security_and_privacy:
- link: lire comment login.gov protège vos informations
- text: Vous pouvez %{link} sur notre page d'aide.
return_to_profile: NOT TRANSLATED YET
return_to_sp_html: NOT TRANSLATED YET
review:
diff --git a/spec/decorators/service_provider_session_decorator_spec.rb b/spec/decorators/service_provider_session_decorator_spec.rb
index 6336bd8da51..b8b76baeaa6 100644
--- a/spec/decorators/service_provider_session_decorator_spec.rb
+++ b/spec/decorators/service_provider_session_decorator_spec.rb
@@ -189,4 +189,19 @@
to eq 'https://www.example.com/sign_up/start'
end
end
+
+ describe '#failure_to_proof_url' do
+ it 'returns the failure_to_proof_url if present on the sp' do
+ url = 'https://www.example.com/fail'
+ allow_any_instance_of(ServiceProvider).to receive(:failure_to_proof_url).and_return(url)
+ expect(subject.failure_to_proof_url).to eq url
+ end
+
+ it 'returns the return_to_sp_url if the failure_to_proof_url is not present on the sp' do
+ url = 'https://www.example.com/'
+ allow_any_instance_of(ServiceProvider).to receive(:failure_to_proof_url).and_return(nil)
+ allow_any_instance_of(ServiceProvider).to receive(:return_to_sp_url).and_return(url)
+ expect(subject.failure_to_proof_url).to eq url
+ end
+ end
end
diff --git a/spec/presenters/idv/idv_failure_presenter_spec.rb b/spec/presenters/idv/idv_failure_presenter_spec.rb
index fad49064627..bdb860215a2 100644
--- a/spec/presenters/idv/idv_failure_presenter_spec.rb
+++ b/spec/presenters/idv/idv_failure_presenter_spec.rb
@@ -48,38 +48,8 @@
describe '#next_steps' do
subject { presenter.next_steps }
- it 'includes `help_step`, `sp_step`, and `profile_step`' do
- expect(subject).to eq(
- [
- presenter.send(:help_step),
- presenter.send(:sp_step),
- presenter.send(:profile_step),
- ]
- )
- end
- end
-
- describe '#help_step' do
- subject { presenter.send(:help_step) }
-
- it 'includes help url' do
- expect(subject).to include(MarketingSite.help_url)
- end
- end
-
- describe '#sp_step' do
- subject { presenter.send(:sp_step) }
-
- it 'includes sp url' do
- expect(subject).to include(decorated_session.sp_return_url)
- end
- end
-
- describe '#profile_step' do
- subject { presenter.send(:profile_step) }
-
- it 'includes profile url' do
- expect(subject).to include(view_context.account_path)
+ it 'is empty' do
+ expect(subject).to eq([])
end
end
diff --git a/spec/presenters/idv/ssn_failure_presenter_spec.rb b/spec/presenters/idv/ssn_failure_presenter_spec.rb
index 476a10cf170..c57127fce0e 100644
--- a/spec/presenters/idv/ssn_failure_presenter_spec.rb
+++ b/spec/presenters/idv/ssn_failure_presenter_spec.rb
@@ -23,14 +23,8 @@
describe '#next_steps' do
subject { presenter.next_steps }
- it 'includes `try_again_step`, `sign_out_step`, and `profile_step`' do
- expect(subject).to eq(
- [
- presenter.send(:try_again_step),
- presenter.send(:sign_out_step),
- presenter.send(:profile_step),
- ]
- )
+ it 'is empty' do
+ expect(subject).to eq([])
end
end