diff --git a/app/jobs/voice_otp_sender_job.rb b/app/jobs/voice_otp_sender_job.rb index 94bdd7ffc77..6383d716a75 100644 --- a/app/jobs/voice_otp_sender_job.rb +++ b/app/jobs/voice_otp_sender_job.rb @@ -24,17 +24,24 @@ def twimlet_url(code) # rubocop:disable Metrics/MethodLength repeat = message_repeat(code) twimlet_menu( - repeat, + message_initial, 1 => twimlet_menu( repeat, 1 => twimlet_menu( repeat, - 1 => twimlet_menu(repeat, 1 => twimlet_message(message_final(code))) + 1 => twimlet_menu( + repeat, + 1 => twimlet_menu(repeat, 1 => twimlet_message(message_final(code))) + ) ) ) ) end + def message_initial + I18n.t('jobs.voice_otp_sender_job.message_initial') + end + def message_repeat(code) I18n.t('jobs.voice_otp_sender_job.message_repeat', code: code) end diff --git a/config/locales/jobs/en.yml b/config/locales/jobs/en.yml index fa04381e561..fd8688f7735 100644 --- a/config/locales/jobs/en.yml +++ b/config/locales/jobs/en.yml @@ -6,9 +6,11 @@ en: If you did not request this change, please contact %{app} at %{support_url} voice_otp_sender_job: + message_initial: > + Hello! Press 1 to hear your login.gov one time passcode. message_repeat: > - Hello! Your login.gov one time passcode is, %{code}, - again, your passcode is, %{code}. Press 1 to repeat your code. + Your login.gov one time passcode is, %{code}, again, your passcode is, + %{code}. Press 1 to repeat your passcode. message_final: > - Hello! Your login.gov one time passcode is, %{code}, - again, your passcode is, %{code}, goodbye! + Your login.gov one time passcode is, %{code}, again, your passcode is, + %{code}, goodbye! diff --git a/spec/jobs/voice_otp_sender_job_spec.rb b/spec/jobs/voice_otp_sender_job_spec.rb index 5e1e20cca85..991d70f65f4 100644 --- a/spec/jobs/voice_otp_sender_job_spec.rb +++ b/spec/jobs/voice_otp_sender_job_spec.rb @@ -19,19 +19,26 @@ expect(call.to).to eq('555-5555') expect(call.from).to match(/(\+19999999999|\+12222222222)/) + query = extract_query_params(call.url) + expect(query['Message']).to eq(t('jobs.voice_otp_sender_job.message_initial')) + code = '1234'.scan(/\d/).join(', ') - query = Rack::Utils.parse_nested_query(URI(call.url).query) - expect(query['Message']).to eq(t('jobs.voice_otp_sender_job.message_repeat', code: code)) + nested_query = extract_query_params(query['Options']['1']) + expect(nested_query['Message']). + to eq(t('jobs.voice_otp_sender_job.message_repeat', code: code)) - nested_query = query while nested_query['Options'] - nested_url = URI(nested_query['Options']['1']) - nested_query = Rack::Utils.parse_nested_query(nested_url.query) + nested_query = extract_query_params(nested_query['Options']['1']) end + expect(nested_query['Message']['0']). to eq(t('jobs.voice_otp_sender_job.message_final', code: code)) end + def extract_query_params(url) + Rack::Utils.parse_nested_query(URI(url).query) + end + it 'does not send if the OTP code is expired' do reset_job_queues TwilioService.telephony_service = FakeVoiceCall