From 5f134d0929a02b4f723ea5efaf844d0c64b7f2b5 Mon Sep 17 00:00:00 2001 From: Tai Wilkin-Corraggio Date: Fri, 5 Apr 2024 15:26:45 -0400 Subject: [PATCH 01/10] Update vets-json-schema (#16195) --- Gemfile.lock | 5 ++--- spec/fixtures/pdf_fill/21P-527EZ/merge_fields.json | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 79d6edfca13..95f1b0042fa 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -73,10 +73,10 @@ GIT GIT remote: https://github.com/department-of-veterans-affairs/vets-json-schema - revision: 7892dc348677325cc57712ff4a12d6a78f024315 + revision: 0277d5bcddf48894d22b45f3618bca33e82a8ca4 branch: master specs: - vets_json_schema (21.5.5) + vets_json_schema (22.0.1) multi_json (~> 1.0) script_utils (= 0.0.4) @@ -1283,4 +1283,3 @@ RUBY VERSION BUNDLED WITH 2.4.9 - diff --git a/spec/fixtures/pdf_fill/21P-527EZ/merge_fields.json b/spec/fixtures/pdf_fill/21P-527EZ/merge_fields.json index 4a133a57e6d..2fed16bab53 100644 --- a/spec/fixtures/pdf_fill/21P-527EZ/merge_fields.json +++ b/spec/fixtures/pdf_fill/21P-527EZ/merge_fields.json @@ -77,8 +77,7 @@ "currentEmployers": [ { "jobType": "Customer service", - "jobHoursWeek": "20", - "jobTitle": "Manager" + "jobHoursWeek": "20" } ], "maritalStatus": 1, From 2c2d2188226097cccbfb2a442f4b4c531b2c506f Mon Sep 17 00:00:00 2001 From: Alex Morgun <87077843+oleksii-morgun@users.noreply.github.com> Date: Fri, 5 Apr 2024 15:41:44 -0400 Subject: [PATCH 02/10] [#MHV-54942] My Health MHV sm policy update (#16130) * [#MHV-54942] rmhv sm policy update * updated users var reference * updating expressions to address linter warning * rubocop whitespaces * [#MHV-54942] correcting messaging specs * [#MHV-54942] rubocop lint * [#MHV-54942] more spec fixes * [#MHV-54942] more rubocop lint * [#MHV-54942] adding back spec coverage for leagcy policy, not authorized scenario for all triage teams spec --------- Co-authored-by: Alex Morgun <87077843+oleksii-morgun-va@users.noreply.github.com> --- app/policies/mhv_messaging_policy.rb | 2 + app/services/users/services.rb | 7 +- config/features.yml | 4 + .../controllers/my_health/sm_controller.rb | 12 +- .../v1/all_triage_teams_request_spec.rb | 108 +++- .../request/v1/attachments_request_spec.rb | 110 ++-- .../spec/request/v1/folders_request_spec.rb | 341 +++++++----- .../request/v1/message_drafts_request_spec.rb | 198 ++++--- .../spec/request/v1/messages_request_spec.rb | 522 ++++++++++-------- .../request/v1/messaging_preferences_spec.rb | 170 ++++-- .../spec/request/v1/threads_request_spec.rb | 164 ++++-- .../request/v1/triage_teams_request_spec.rb | 113 ++-- spec/requests/user_request_spec.rb | 3 + spec/services/users/services_spec.rb | 10 + .../vcr_cassettes/sm_client/session_error.yml | 40 ++ 15 files changed, 1135 insertions(+), 669 deletions(-) create mode 100644 spec/support/vcr_cassettes/sm_client/session_error.yml diff --git a/app/policies/mhv_messaging_policy.rb b/app/policies/mhv_messaging_policy.rb index 9e6d1a72d79..d1e8d83266c 100644 --- a/app/policies/mhv_messaging_policy.rb +++ b/app/policies/mhv_messaging_policy.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'sm/client' + MHVMessagingPolicy = Struct.new(:user, :mhv_messaging) do def access? return false unless user.mhv_correlation_id diff --git a/app/services/users/services.rb b/app/services/users/services.rb index 11b0ec35049..c07a5a0f36a 100644 --- a/app/services/users/services.rb +++ b/app/services/users/services.rb @@ -18,7 +18,7 @@ def initialize(user) # def authorizations @list << BackendServices::RX if user.authorize :mhv_prescriptions, :access? - @list << BackendServices::MESSAGING if user.authorize :legacy_mhv_messaging, :access? + @list << BackendServices::MESSAGING if user.authorize messaging_service, :access? @list << BackendServices::MEDICAL_RECORDS if user.authorize :mhv_medical_records, :access? @list << BackendServices::HEALTH_RECORDS if user.authorize :mhv_health_records, :access? @list << BackendServices::EVSS_CLAIMS if user.authorize :evss, :access? @@ -30,6 +30,7 @@ def authorizations @list << BackendServices::ID_CARD if user.can_access_id_card? @list << BackendServices::IDENTITY_PROOFED if user.loa3? @list << BackendServices::VET360 if user.can_access_vet360? + @list end @@ -44,5 +45,9 @@ def auth_free_services BackendServices::FORM_PREFILL ] end + + def messaging_service + Flipper.enabled?(:mhv_sm_session_policy, user) ? :mhv_messaging : :legacy_mhv_messaging + end end end diff --git a/config/features.yml b/config/features.yml index bf37c613b8c..186c377c035 100644 --- a/config/features.yml +++ b/config/features.yml @@ -664,6 +664,10 @@ features: actor_type: user description: Enables/disables Secure Messaging Cerner Transition Pilot environment on VA.gov enable_in_development: true + mhv_sm_session_policy: + actor_type: user + description: changes secure messaging policy to use sm sessions endpoint for authorization + enable_in_development: true mhv_medical_records_allow_txt_downloads: actor_type: user description: Allows users to download Medical Records data in TXT format diff --git a/modules/my_health/app/controllers/my_health/sm_controller.rb b/modules/my_health/app/controllers/my_health/sm_controller.rb index b98917299e4..1c2bcc9721e 100644 --- a/modules/my_health/app/controllers/my_health/sm_controller.rb +++ b/modules/my_health/app/controllers/my_health/sm_controller.rb @@ -15,7 +15,17 @@ def client end def authorize - raise_access_denied unless current_user.authorize(:legacy_mhv_messaging, :access?) + raise_access_denied unless mhv_messaging_authorized? + end + + def mhv_messaging_authorized? + if Flipper.enabled?(:mhv_sm_session_policy, current_user) + Rails.logger.info('SMController Using new SM session policy') + current_user.authorize(:mhv_messaging, :access?) + else + Rails.logger.info('SMController Using Legacy SM session policy') + current_user.authorize(:legacy_mhv_messaging, :access?) + end end def raise_access_denied diff --git a/modules/my_health/spec/request/v1/all_triage_teams_request_spec.rb b/modules/my_health/spec/request/v1/all_triage_teams_request_spec.rb index 2312df7f711..c1b870553d1 100644 --- a/modules/my_health/spec/request/v1/all_triage_teams_request_spec.rb +++ b/modules/my_health/spec/request/v1/all_triage_teams_request_spec.rb @@ -9,54 +9,106 @@ include SchemaMatchers let(:va_patient) { true } + let(:mhv_account_type) { 'Premium' } let(:current_user) { build(:user, :mhv, va_patient:, mhv_account_type:) } before do - allow(SM::Client).to receive(:new).and_return(authenticated_client) sign_in_as(current_user) end - context 'Basic User' do - let(:mhv_account_type) { 'Basic' } + context 'when sm session policy is enabled' do + before do + Flipper.enable(:mhv_sm_session_policy) + Timecop.freeze(Time.zone.parse('2017-05-01T19:25:00Z')) + end - before { get '/my_health/v1/messaging/allrecipients' } + after do + Flipper.disable(:mhv_sm_session_policy) + Timecop.return + end - include_examples 'for user account level', message: 'You do not have access to messaging' - include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' - end + context 'when NOT authorized' do + before do + VCR.insert_cassette('sm_client/session_error') + get '/my_health/v1/messaging/allrecipients' + end - context 'Premium User' do - let(:mhv_account_type) { 'Premium' } + after do + VCR.eject_cassette + end - context 'not a va patient' do - before { get '/my_health/v1/messaging/allrecipients' } + include_examples 'for user account level', message: 'You do not have access to messaging' + end - let(:va_patient) { false } - let(:current_user) do - build(:user, :mhv, :no_vha_facilities, va_patient:, mhv_account_type:) + context 'when authorized' do + before do + VCR.insert_cassette('sm_client/session') end - include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' - end + after do + VCR.eject_cassette + end - it 'responds to GET #index' do - VCR.use_cassette('sm_client/triage_teams/gets_a_collection_of_all_triage_team_recipients') do - get '/my_health/v1/messaging/allrecipients' + it 'responds to GET #index' do + VCR.use_cassette('sm_client/triage_teams/gets_a_collection_of_all_triage_team_recipients') do + get '/my_health/v1/messaging/allrecipients' + end + + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(response).to match_response_schema('all_triage_teams') end - expect(response).to be_successful - expect(response.body).to be_a(String) - expect(response).to match_response_schema('all_triage_teams') + it 'responds to GET #index when camel-inflected' do + VCR.use_cassette('sm_client/triage_teams/gets_a_collection_of_all_triage_team_recipients') do + get '/my_health/v1/messaging/allrecipients', headers: { 'X-Key-Inflection' => 'camel' } + end + + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(response).to match_camelized_response_schema('all_triage_teams') + end end + end + + context 'when legacy sm policy' do + before do + Flipper.disable(:mhv_sm_session_policy) + allow(SM::Client).to receive(:new).and_return(authenticated_client) + end + + context 'Basic User' do + let(:mhv_account_type) { 'Basic' } + + before { get '/my_health/v1/messaging/allrecipients' } + + include_examples 'for user account level', message: 'You do not have access to messaging' + include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' + end + + context 'Premium User' do + let(:mhv_account_type) { 'Premium' } + + context 'not a va patient' do + before { get '/my_health/v1/messaging/allrecipients' } - it 'responds to GET #index when camel-inflected' do - VCR.use_cassette('sm_client/triage_teams/gets_a_collection_of_all_triage_team_recipients') do - get '/my_health/v1/messaging/allrecipients', headers: { 'X-Key-Inflection' => 'camel' } + let(:va_patient) { false } + let(:current_user) do + build(:user, :mhv, :no_vha_facilities, va_patient:, mhv_account_type:) + end + + include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' end - expect(response).to be_successful - expect(response.body).to be_a(String) - expect(response).to match_camelized_response_schema('all_triage_teams') + it 'responds to GET #index' do + VCR.use_cassette('sm_client/triage_teams/gets_a_collection_of_all_triage_team_recipients') do + get '/my_health/v1/messaging/allrecipients' + end + + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(response).to match_response_schema('all_triage_teams') + end end end end diff --git a/modules/my_health/spec/request/v1/attachments_request_spec.rb b/modules/my_health/spec/request/v1/attachments_request_spec.rb index 75cefcbc488..89b551f2a97 100644 --- a/modules/my_health/spec/request/v1/attachments_request_spec.rb +++ b/modules/my_health/spec/request/v1/attachments_request_spec.rb @@ -7,61 +7,109 @@ RSpec.describe 'Message Attachments Integration', type: :request do include SM::ClientHelpers + let(:mhv_account_type) { 'Premium' } let(:va_patient) { true } let(:current_user) { build(:user, :mhv, va_patient:, mhv_account_type:) } - let(:user_id) { '10616687' } let(:inbox_id) { 0 } let(:message_id) { 573_302 } before do - allow(SM::Client).to receive(:new).and_return(authenticated_client) sign_in_as(current_user) end - context 'Basic User' do - let(:mhv_account_type) { 'Basic' } + context 'when sm session policy is enabled' do + before do + Flipper.enable(:mhv_sm_session_policy) + Timecop.freeze(Time.zone.parse('2017-05-01T19:25:00Z')) + end - before { get '/my_health/v1/messaging/messages/629999/attachments/629993' } + after do + Flipper.disable(:mhv_sm_session_policy) + Timecop.return + end - include_examples 'for user account level', message: 'You do not have access to messaging' - include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' - end + context 'when NOT authorized' do + before do + VCR.insert_cassette('sm_client/session_error') + get '/my_health/v1/messaging/messages/629999/attachments/629993' + end - context 'Advanced User' do - let(:mhv_account_type) { 'Advanced' } + after do + VCR.eject_cassette + end - before { get '/my_health/v1/messaging/messages/629999/attachments/629993' } + include_examples 'for user account level', message: 'You do not have access to messaging' + end - include_examples 'for user account level', message: 'You do not have access to messaging' - include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' + context 'when authorized' do + before do + VCR.insert_cassette('sm_client/session') + get '/my_health/v1/messaging/messages/629999/attachments/629993' + end + + after do + VCR.eject_cassette + end + + describe '#show' do + it 'responds sending data for an attachment' do + VCR.use_cassette('sm_client/messages/nested_resources/gets_a_single_attachment_by_id') do + get '/my_health/v1/messaging/messages/629999/attachments/629993' + end + + expect(response).to be_successful + expect(response.headers['Content-Disposition']) + .to eq("attachment; filename=\"noise300x200.png\"; filename*=UTF-8''noise300x200.png") + expect(response.headers['Content-Transfer-Encoding']).to eq('binary') + expect(response.headers['Content-Type']).to eq('image/png') + expect(response.body).to be_a(String) + end + end + end end - context 'Premium User' do - let(:mhv_account_type) { 'Premium' } + context 'when legacy sm policy' do + before do + Flipper.disable(:mhv_sm_session_policy) + allow(SM::Client).to receive(:new).and_return(authenticated_client) + end + + context 'Basic User' do + let(:mhv_account_type) { 'Basic' } - context 'not a va patient' do before { get '/my_health/v1/messaging/messages/629999/attachments/629993' } - let(:va_patient) { false } - let(:current_user) do - build(:user, :mhv, :no_vha_facilities, va_patient:, mhv_account_type:) - end - + include_examples 'for user account level', message: 'You do not have access to messaging' include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' end - describe '#show' do - it 'responds sending data for an attachment' do - VCR.use_cassette('sm_client/messages/nested_resources/gets_a_single_attachment_by_id') do - get '/my_health/v1/messaging/messages/629999/attachments/629993' + context 'Premium User' do + let(:mhv_account_type) { 'Premium' } + + context 'not a va patient' do + before { get '/my_health/v1/messaging/messages/629999/attachments/629993' } + + let(:va_patient) { false } + let(:current_user) do + build(:user, :mhv, :no_vha_facilities, va_patient:, mhv_account_type:) end - expect(response).to be_successful - expect(response.headers['Content-Disposition']) - .to eq("attachment; filename=\"noise300x200.png\"; filename*=UTF-8''noise300x200.png") - expect(response.headers['Content-Transfer-Encoding']).to eq('binary') - expect(response.headers['Content-Type']).to eq('image/png') - expect(response.body).to be_a(String) + include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' + end + + describe '#show' do + it 'responds sending data for an attachment' do + VCR.use_cassette('sm_client/messages/nested_resources/gets_a_single_attachment_by_id') do + get '/my_health/v1/messaging/messages/629999/attachments/629993' + end + + expect(response).to be_successful + expect(response.headers['Content-Disposition']) + .to eq("attachment; filename=\"noise300x200.png\"; filename*=UTF-8''noise300x200.png") + expect(response.headers['Content-Transfer-Encoding']).to eq('binary') + expect(response.headers['Content-Type']).to eq('image/png') + expect(response.body).to be_a(String) + end end end end diff --git a/modules/my_health/spec/request/v1/folders_request_spec.rb b/modules/my_health/spec/request/v1/folders_request_spec.rb index c366f5fc4f8..6acf0e80e4e 100644 --- a/modules/my_health/spec/request/v1/folders_request_spec.rb +++ b/modules/my_health/spec/request/v1/folders_request_spec.rb @@ -9,6 +9,7 @@ include SchemaMatchers let(:user_id) { '10616687' } + let(:mhv_account_type) { 'Premium' } let(:inbox_id) { 0 } let(:message_id) { 573_059 } let(:va_patient) { true } @@ -16,223 +17,277 @@ let(:inflection_header) { { 'X-Key-Inflection' => 'camel' } } before do - allow(SM::Client).to receive(:new).and_return(authenticated_client) sign_in_as(current_user) end - context 'Basic User' do - let(:mhv_account_type) { 'Basic' } - - before { get '/my_health/v1/messaging/folders' } - - include_examples 'for user account level', message: 'You do not have access to messaging' - include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' - end - - context 'Advanced User' do - let(:mhv_account_type) { 'Advanced' } - - before { get '/my_health/v1/messaging/folders' } - - include_examples 'for user account level', message: 'You do not have access to messaging' - include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' - end + context 'when sm session policy is enabled' do + before do + Flipper.enable(:mhv_sm_session_policy) + Timecop.freeze(Time.zone.parse('2017-05-01T19:25:00Z')) + end - context 'Premium User' do - let(:mhv_account_type) { 'Premium' } + after do + Flipper.disable(:mhv_sm_session_policy) + Timecop.return + end - context 'not a va patient' do - before { get '/my_health/v1/messaging/folders' } + context 'when NOT authorized' do + before do + VCR.insert_cassette('sm_client/session_error') + get '/my_health/v1/messaging/folders' + end - let(:va_patient) { false } - let(:current_user) do - build(:user, :mhv, :no_vha_facilities, va_patient:, mhv_account_type:) + after do + VCR.eject_cassette end - include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' + include_examples 'for user account level', message: 'You do not have access to messaging' end - describe '#index' do - it 'responds to GET #index' do - VCR.use_cassette('sm_client/folders/gets_a_collection_of_folders') do - get '/my_health/v1/messaging/folders' - end - - expect(response).to be_successful - expect(response.body).to be_a(String) - expect(response).to match_response_schema('folders') + context 'when authorized' do + before do + VCR.insert_cassette('sm_client/session') end - it 'responds to GET #index when camel-inflected' do - VCR.use_cassette('sm_client/folders/gets_a_collection_of_folders') do - get '/my_health/v1/messaging/folders', headers: inflection_header - end - - expect(response).to be_successful - expect(response.body).to be_a(String) - expect(response).to match_camelized_response_schema('folders') + after do + VCR.eject_cassette end - end - describe '#show' do - context 'with valid id' do - it 'response to GET #show' do - VCR.use_cassette('sm_client/folders/gets_a_single_folder') do - get "/my_health/v1/messaging/folders/#{inbox_id}" + describe '#index' do + it 'responds to GET #index' do + VCR.use_cassette('sm_client/folders/gets_a_collection_of_folders') do + get '/my_health/v1/messaging/folders' end expect(response).to be_successful expect(response.body).to be_a(String) - expect(response).to match_response_schema('folder') + expect(response).to match_response_schema('folders') end - it 'response to GET #show when camel-inflected' do - VCR.use_cassette('sm_client/folders/gets_a_single_folder') do - get "/my_health/v1/messaging/folders/#{inbox_id}", headers: inflection_header + it 'responds to GET #index when camel-inflected' do + VCR.use_cassette('sm_client/folders/gets_a_collection_of_folders') do + get '/my_health/v1/messaging/folders', headers: inflection_header end expect(response).to be_successful expect(response.body).to be_a(String) - expect(response).to match_camelized_response_schema('folder') + expect(response).to match_camelized_response_schema('folders') end end - end - describe '#create' do - context 'with valid name' do - let(:params) { { folder: { name: 'test folder create name 160805101218' } } } + describe '#show' do + context 'with valid id' do + it 'response to GET #show' do + VCR.use_cassette('sm_client/folders/gets_a_single_folder') do + get "/my_health/v1/messaging/folders/#{inbox_id}" + end - it 'response to POST #create' do - VCR.use_cassette('sm_client/folders/creates_a_folder_and_deletes_a_folder') do - post '/my_health/v1/messaging/folders', params: + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(response).to match_response_schema('folder') end - expect(response).to be_successful - expect(response).to have_http_status(:created) - expect(response).to match_response_schema('folder') + it 'response to GET #show when camel-inflected' do + VCR.use_cassette('sm_client/folders/gets_a_single_folder') do + get "/my_health/v1/messaging/folders/#{inbox_id}", headers: inflection_header + end + + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(response).to match_camelized_response_schema('folder') + end end + end + + describe '#create' do + context 'with valid name' do + let(:params) { { folder: { name: 'test folder create name 160805101218' } } } + + it 'response to POST #create' do + VCR.use_cassette('sm_client/folders/creates_a_folder_and_deletes_a_folder') do + post '/my_health/v1/messaging/folders', params: + end - it 'response to POST #create with camel-inflection' do - VCR.use_cassette('sm_client/folders/creates_a_folder_and_deletes_a_folder') do - post '/my_health/v1/messaging/folders', params:, headers: inflection_header + expect(response).to be_successful + expect(response).to have_http_status(:created) + expect(response).to match_response_schema('folder') end - expect(response).to be_successful - expect(response).to have_http_status(:created) - expect(response).to match_camelized_response_schema('folder') + it 'response to POST #create with camel-inflection' do + VCR.use_cassette('sm_client/folders/creates_a_folder_and_deletes_a_folder') do + post '/my_health/v1/messaging/folders', params:, headers: inflection_header + end + + expect(response).to be_successful + expect(response).to have_http_status(:created) + expect(response).to match_camelized_response_schema('folder') + end end end - end - describe '#update' do - context 'with valid folder id' do - let(:id) { 7_207_029 } - let(:params) { { folder: { name: 'Test222' } } } + describe '#update' do + context 'with valid folder id' do + let(:id) { 7_207_029 } + let(:params) { { folder: { name: 'Test222' } } } - it 'responds to RENAME #update' do - VCR.use_cassette('sm_client/folders/renames_a_folder') do - put "/my_health/v1/messaging/folders/#{id}", params: - end + it 'responds to RENAME #update' do + VCR.use_cassette('sm_client/folders/renames_a_folder') do + put "/my_health/v1/messaging/folders/#{id}", params: + end - expect(response).to be_successful - expect(response).to have_http_status(:created) - expect(response).to match_response_schema('folder') + expect(response).to be_successful + expect(response).to have_http_status(:created) + expect(response).to match_response_schema('folder') + end end end - end - describe '#destroy' do - context 'with valid folder id' do - let(:id) { 674_886 } + describe '#destroy' do + context 'with valid folder id' do + let(:id) { 674_886 } - it 'responds to DELETE #destroy' do - VCR.use_cassette('sm_client/folders/creates_a_folder_and_deletes_a_folder') do - delete "/my_health/v1/messaging/folders/#{id}" + it 'responds to DELETE #destroy' do + VCR.use_cassette('sm_client/folders/creates_a_folder_and_deletes_a_folder') do + delete "/my_health/v1/messaging/folders/#{id}" + end + + expect(response).to be_successful + expect(response).to have_http_status(:no_content) end + end + end - expect(response).to be_successful - expect(response).to have_http_status(:no_content) + describe '#search' do + context 'with valid search criteria' do + let(:id) { 0 } + + it 'responds to POST #search' do + VCR.use_cassette('sm_client/folders/searches_a_folder') do + post "/my_health/v1/messaging/folders/#{id}/search", params: { subject: 'test' } + end + + expect(response).to be_successful + expect(response).to have_http_status(:ok) + expect(response).to match_response_schema('folder_search') + end end end - end - describe '#search' do - context 'with valid search criteria' do - let(:id) { 0 } + describe 'nested resources' do + it 'gets messages#index' do + VCR.use_cassette('sm_client/folders/nested_resources/gets_a_collection_of_messages') do + get "/my_health/v1/messaging/folders/#{inbox_id}/messages" + end + + expect(response).to be_successful + expect(response).to have_http_status(:ok) + expect(response).to match_response_schema('messages') + end - it 'responds to POST #search' do - VCR.use_cassette('sm_client/folders/searches_a_folder') do - post "/my_health/v1/messaging/folders/#{id}/search", params: { subject: 'test' } + it 'gets messages#index with camel-inflection' do + VCR.use_cassette('sm_client/folders/nested_resources/gets_a_collection_of_messages') do + get "/my_health/v1/messaging/folders/#{inbox_id}/messages", headers: inflection_header end expect(response).to be_successful expect(response).to have_http_status(:ok) - expect(response).to match_response_schema('folder_search') + expect(response).to match_camelized_response_schema('messages') end end - end - describe 'nested resources' do - it 'gets messages#index' do - VCR.use_cassette('sm_client/folders/nested_resources/gets_a_collection_of_messages') do - get "/my_health/v1/messaging/folders/#{inbox_id}/messages" + describe 'pagination' do + it 'provides pagination indicators' do + VCR.use_cassette('sm_client/folders/nested_resources/gets_a_collection_of_messages') do + get "/my_health/v1/messaging/folders/#{inbox_id}/messages" + end + + payload = JSON.parse(response.body) + pagination = payload['meta']['pagination'] + expect(pagination['total_entries']).to eq(10) end - expect(response).to be_successful - expect(response).to have_http_status(:ok) - expect(response).to match_response_schema('messages') - end + it 'respects pagination parameters' do + VCR.use_cassette('sm_client/folders/nested_resources/gets_a_collection_of_messages') do + get "/my_health/v1/messaging/folders/#{inbox_id}/messages", params: { page: 2, per_page: 3 } + end - it 'gets messages#index with camel-inflection' do - VCR.use_cassette('sm_client/folders/nested_resources/gets_a_collection_of_messages') do - get "/my_health/v1/messaging/folders/#{inbox_id}/messages", headers: inflection_header + payload = JSON.parse(response.body) + pagination = payload['meta']['pagination'] + expect(pagination['current_page']).to eq(2) + expect(pagination['per_page']).to eq(3) + expect(pagination['total_pages']).to eq(4) + expect(pagination['total_entries']).to eq(10) end - expect(response).to be_successful - expect(response).to have_http_status(:ok) - expect(response).to match_camelized_response_schema('messages') - end - end + it 'does not paginate if per_page pagination parameter is -1' do + VCR.use_cassette('sm_client/folders/nested_resources/gets_a_collection_of_messages') do + get "/my_health/v1/messaging/folders/#{inbox_id}/messages", params: { per_page: -1 } + end - describe 'pagination' do - it 'provides pagination indicators' do - VCR.use_cassette('sm_client/folders/nested_resources/gets_a_collection_of_messages') do - get "/my_health/v1/messaging/folders/#{inbox_id}/messages" + payload = JSON.parse(response.body) + pagination = payload['meta']['pagination'] + expect(pagination).to be_nil end - payload = JSON.parse(response.body) - pagination = payload['meta']['pagination'] - expect(pagination['total_entries']).to eq(10) + it 'generates a 4xx error for out of bounds pagination' do + VCR.use_cassette('sm_client/folders/nested_resources/gets_a_collection_of_messages') do + get "/my_health/v1/messaging/folders/#{inbox_id}/messages", params: { page: 3, per_page: 10 } + end + expect(response).to have_http_status(:bad_request) + end end + end + end - it 'respects pagination parameters' do - VCR.use_cassette('sm_client/folders/nested_resources/gets_a_collection_of_messages') do - get "/my_health/v1/messaging/folders/#{inbox_id}/messages", params: { page: 2, per_page: 3 } + context 'when legacy sm policy' do + before do + Flipper.disable(:mhv_sm_session_policy) + allow(SM::Client).to receive(:new).and_return(authenticated_client) + end + + context 'Basic User' do + let(:mhv_account_type) { 'Basic' } + + before { get '/my_health/v1/messaging/folders' } + + include_examples 'for user account level', message: 'You do not have access to messaging' + include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' + end + + context 'Premium User' do + let(:mhv_account_type) { 'Premium' } + + context 'not a va patient' do + before { get '/my_health/v1/messaging/folders' } + + let(:va_patient) { false } + let(:current_user) do + build(:user, :mhv, :no_vha_facilities, va_patient:, mhv_account_type:) end - payload = JSON.parse(response.body) - pagination = payload['meta']['pagination'] - expect(pagination['current_page']).to eq(2) - expect(pagination['per_page']).to eq(3) - expect(pagination['total_pages']).to eq(4) - expect(pagination['total_entries']).to eq(10) + include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' end - it 'does not paginate if per_page pagination parameter is -1' do - VCR.use_cassette('sm_client/folders/nested_resources/gets_a_collection_of_messages') do - get "/my_health/v1/messaging/folders/#{inbox_id}/messages", params: { per_page: -1 } + describe '#index' do + it 'responds to GET #index' do + VCR.use_cassette('sm_client/folders/gets_a_collection_of_folders') do + get '/my_health/v1/messaging/folders' + end + + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(response).to match_response_schema('folders') end - payload = JSON.parse(response.body) - pagination = payload['meta']['pagination'] - expect(pagination).to be_nil - end + it 'responds to GET #index when camel-inflected' do + VCR.use_cassette('sm_client/folders/gets_a_collection_of_folders') do + get '/my_health/v1/messaging/folders', headers: inflection_header + end - it 'generates a 4xx error for out of bounds pagination' do - VCR.use_cassette('sm_client/folders/nested_resources/gets_a_collection_of_messages') do - get "/my_health/v1/messaging/folders/#{inbox_id}/messages", params: { page: 3, per_page: 10 } + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(response).to match_camelized_response_schema('folders') end - expect(response).to have_http_status(:bad_request) end end end diff --git a/modules/my_health/spec/request/v1/message_drafts_request_spec.rb b/modules/my_health/spec/request/v1/message_drafts_request_spec.rb index eddf0211a19..4c65e5aae45 100644 --- a/modules/my_health/spec/request/v1/message_drafts_request_spec.rb +++ b/modules/my_health/spec/request/v1/message_drafts_request_spec.rb @@ -13,120 +13,168 @@ let(:created_draft_reply_id) { 674_944 } let(:draft) { attributes_for(:message, body: 'Body 1', subject: 'Subject 1') } let(:params) { draft.slice(:category, :subject, :body, :recipient_id) } + let(:mhv_account_type) { 'Premium' } let(:va_patient) { true } let(:current_user) { build(:user, :mhv, va_patient:, mhv_account_type:) } let(:inflection_header) { { 'X-Key-Inflection' => 'camel' } } before do - allow(SM::Client).to receive(:new).and_return(authenticated_client) sign_in_as(current_user) end - context 'Basic User' do - let(:mhv_account_type) { 'Basic' } - - before { post '/my_health/v1/messaging/message_drafts', params: } - - include_examples 'for user account level', message: 'You do not have access to messaging' - include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' - end + context 'when sm session policy is enabled' do + before do + Flipper.enable(:mhv_sm_session_policy) + Timecop.freeze(Time.zone.parse('2017-05-01T19:25:00Z')) + end - context 'Advanced User' do - let(:mhv_account_type) { 'Advanced' } + after do + Flipper.disable(:mhv_sm_session_policy) + Timecop.return + end - before { post '/my_health/v1/messaging/message_drafts', params: } + context 'when NOT authorized' do + before do + VCR.insert_cassette('sm_client/session_error') + post '/my_health/v1/messaging/message_drafts', params: + end - include_examples 'for user account level', message: 'You do not have access to messaging' - include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' - end + after do + VCR.eject_cassette + end - context 'Premium User' do - let(:mhv_account_type) { 'Premium' } + include_examples 'for user account level', message: 'You do not have access to messaging' + end - context 'not a va patient' do - before { post '/my_health/v1/messaging/message_drafts', params: } + context 'when authorized' do + before do + VCR.insert_cassette('sm_client/session') + end - let(:va_patient) { false } - let(:current_user) do - build(:user, :mhv, :no_vha_facilities, va_patient:, mhv_account_type:) + after do + VCR.eject_cassette end - include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' - end + describe 'drafts' do + let(:params) { { message_draft: draft.slice(:category, :subject, :body, :recipient_id) } } - describe 'drafts' do - let(:params) { { message_draft: draft.slice(:category, :subject, :body, :recipient_id) } } + it 'responds to POST #create' do + VCR.use_cassette('sm_client/message_drafts/creates_a_draft') do + post '/my_health/v1/messaging/message_drafts', params: + end - it 'responds to POST #create' do - VCR.use_cassette('sm_client/message_drafts/creates_a_draft') do - post '/my_health/v1/messaging/message_drafts', params: + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(response).to match_response_schema('message') + expect(response).to have_http_status(:created) end - expect(response).to be_successful - expect(response.body).to be_a(String) - expect(response).to match_response_schema('message') - expect(response).to have_http_status(:created) - end + it 'responds to POST #create when camel-inflected' do + VCR.use_cassette('sm_client/message_drafts/creates_a_draft') do + post '/my_health/v1/messaging/message_drafts', params:, headers: inflection_header + end - it 'responds to POST #create when camel-inflected' do - VCR.use_cassette('sm_client/message_drafts/creates_a_draft') do - post '/my_health/v1/messaging/message_drafts', params:, headers: inflection_header + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(response).to match_camelized_response_schema('message') + expect(response).to have_http_status(:created) end - expect(response).to be_successful - expect(response.body).to be_a(String) - expect(response).to match_camelized_response_schema('message') - expect(response).to have_http_status(:created) + it 'responds to PUT #update' do + VCR.use_cassette('sm_client/message_drafts/updates_a_draft') do + params[:subject] = 'Updated Subject' + params[:id] = created_draft_id + + put "/my_health/v1/messaging/message_drafts/#{created_draft_id}", params: + end + + expect(response).to be_successful + expect(response).to have_http_status(:no_content) + end end - it 'responds to PUT #update' do - VCR.use_cassette('sm_client/message_drafts/updates_a_draft') do - params[:subject] = 'Updated Subject' - params[:id] = created_draft_id + describe 'reply drafts' do + let(:params) { { message_draft: draft.slice(:body) } } + + it 'responds to POST #create' do + VCR.use_cassette('sm_client/message_drafts/creates_a_draft_reply') do + post "/my_health/v1/messaging/message_drafts/#{reply_id}/replydraft", params: + end - put "/my_health/v1/messaging/message_drafts/#{created_draft_id}", params: + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(response).to match_response_schema('message') + expect(response).to have_http_status(:created) end - expect(response).to be_successful - expect(response).to have_http_status(:no_content) + it 'responds to POST #create when camel-inflected' do + VCR.use_cassette('sm_client/message_drafts/creates_a_draft_reply') do + post "/my_health/v1/messaging/message_drafts/#{reply_id}/replydraft", params:, + headers: inflection_header + end + + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(response).to match_camelized_response_schema('message') + expect(response).to have_http_status(:created) + end + + it 'responds to PUT #update' do + VCR.use_cassette('sm_client/message_drafts/updates_a_draft_reply') do + params[:body] = 'Updated Body' + params[:id] = created_draft_reply_id + put "/my_health/v1/messaging/message_drafts/#{reply_id}/replydraft/#{created_draft_reply_id}", params: + end + + expect(response).to be_successful + expect(response).to have_http_status(:no_content) + end end end + end - describe 'reply drafts' do - let(:params) { { message_draft: draft.slice(:body) } } + context 'when legacy sm policy' do + before do + Flipper.disable(:mhv_sm_session_policy) + allow(SM::Client).to receive(:new).and_return(authenticated_client) + end - it 'responds to POST #create' do - VCR.use_cassette('sm_client/message_drafts/creates_a_draft_reply') do - post "/my_health/v1/messaging/message_drafts/#{reply_id}/replydraft", params: - end + context 'Basic User' do + let(:mhv_account_type) { 'Basic' } - expect(response).to be_successful - expect(response.body).to be_a(String) - expect(response).to match_response_schema('message') - expect(response).to have_http_status(:created) - end + before { post '/my_health/v1/messaging/message_drafts', params: } + + include_examples 'for user account level', message: 'You do not have access to messaging' + include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' + end + + context 'Premium User' do + let(:mhv_account_type) { 'Premium' } - it 'responds to POST #create when camel-inflected' do - VCR.use_cassette('sm_client/message_drafts/creates_a_draft_reply') do - post "/my_health/v1/messaging/message_drafts/#{reply_id}/replydraft", params:, - headers: inflection_header + context 'not a va patient' do + before { post '/my_health/v1/messaging/message_drafts', params: } + + let(:va_patient) { false } + let(:current_user) do + build(:user, :mhv, :no_vha_facilities, va_patient:, mhv_account_type:) end - expect(response).to be_successful - expect(response.body).to be_a(String) - expect(response).to match_camelized_response_schema('message') - expect(response).to have_http_status(:created) + include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' end - it 'responds to PUT #update' do - VCR.use_cassette('sm_client/message_drafts/updates_a_draft_reply') do - params[:body] = 'Updated Body' - params[:id] = created_draft_reply_id - put "/my_health/v1/messaging/message_drafts/#{reply_id}/replydraft/#{created_draft_reply_id}", params: - end + describe 'drafts' do + let(:params) { { message_draft: draft.slice(:category, :subject, :body, :recipient_id) } } - expect(response).to be_successful - expect(response).to have_http_status(:no_content) + it 'responds to POST #create' do + VCR.use_cassette('sm_client/message_drafts/creates_a_draft') do + post '/my_health/v1/messaging/message_drafts', params: + end + + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(response).to match_response_schema('message') + expect(response).to have_http_status(:created) + end end end end diff --git a/modules/my_health/spec/request/v1/messages_request_spec.rb b/modules/my_health/spec/request/v1/messages_request_spec.rb index 3e7546cb4aa..096d72df942 100644 --- a/modules/my_health/spec/request/v1/messages_request_spec.rb +++ b/modules/my_health/spec/request/v1/messages_request_spec.rb @@ -9,6 +9,7 @@ include SchemaMatchers let(:user_id) { '10616687' } + let(:mhv_account_type) { 'Premium' } let(:inbox_id) { 0 } let(:message_id) { 573_059 } let(:va_patient) { true } @@ -16,320 +17,369 @@ let(:inflection_header) { { 'X-Key-Inflection' => 'camel' } } before do - allow(SM::Client).to receive(:new).and_return(authenticated_client) sign_in_as(current_user) end - context 'Basic User' do - let(:mhv_account_type) { 'Basic' } - - before { get '/my_health/v1/messaging/messages/categories' } - - include_examples 'for user account level', message: 'You do not have access to messaging' - include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' - end + context 'when sm session policy is enabled' do + before do + Flipper.enable(:mhv_sm_session_policy) + Timecop.freeze(Time.zone.parse('2017-05-01T19:25:00Z')) + end - context 'Advanced User' do - let(:mhv_account_type) { 'Advanced' } + after do + Flipper.disable(:mhv_sm_session_policy) + Timecop.return + end - before { get '/my_health/v1/messaging/messages/categories' } + context 'when NOT authorized' do + before do + VCR.insert_cassette('sm_client/session_error') + get "/my_health/v1/messaging/messages/#{message_id}" + end - include_examples 'for user account level', message: 'You do not have access to messaging' - include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' - end + after do + VCR.eject_cassette + end - context 'Premium User' do - let(:mhv_account_type) { 'Premium' } + include_examples 'for user account level', message: 'You do not have access to messaging' + end - context 'not a va patient' do - before { get '/my_health/v1/messaging/messages/categories' } + context 'when authorized' do + before do + VCR.insert_cassette('sm_client/session') + end - let(:va_patient) { false } - let(:current_user) do - build(:user, :mhv, :no_vha_facilities, va_patient:, mhv_account_type:) + after do + VCR.eject_cassette end - include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' - end + it 'responds to GET messages/categories' do + VCR.use_cassette('sm_client/messages/gets_message_categories') do + get '/my_health/v1/messaging/messages/categories' + end - it 'responds to GET messages/categories' do - VCR.use_cassette('sm_client/messages/gets_message_categories') do - get '/my_health/v1/messaging/messages/categories' + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(response).to match_response_schema('category') end - expect(response).to be_successful - expect(response.body).to be_a(String) - expect(response).to match_response_schema('category') - end + it 'responds to GET messages/categories when camel-inflected' do + VCR.use_cassette('sm_client/messages/gets_message_categories') do + get '/my_health/v1/messaging/messages/categories', headers: inflection_header + end - it 'responds to GET messages/categories when camel-inflected' do - VCR.use_cassette('sm_client/messages/gets_message_categories') do - get '/my_health/v1/messaging/messages/categories', headers: inflection_header + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(response).to match_camelized_response_schema('category') end - expect(response).to be_successful - expect(response.body).to be_a(String) - expect(response).to match_camelized_response_schema('category') - end + it 'returns message signature preferences' do + VCR.use_cassette('sm_client/messages/gets_message_signature') do + get '/my_health/v1/messaging/messages/signature', headers: inflection_header + end - it 'returns message signature preferences' do - VCR.use_cassette('sm_client/messages/gets_message_signature') do - get '/my_health/v1/messaging/messages/signature', headers: inflection_header + result = JSON.parse(response.body) + expect(result['data']['includeSignature']).to eq(true) + expect(result['data']['signatureTitle']).to eq('test-api title') + expect(result['data']['signatureName']).to eq('test-api Name') end - result = JSON.parse(response.body) - expect(result['data']['includeSignature']).to eq(true) - expect(result['data']['signatureTitle']).to eq('test-api title') - expect(result['data']['signatureName']).to eq('test-api Name') - end + it 'responds to GET #show' do + VCR.use_cassette('sm_client/messages/gets_a_message_with_id') do + get "/my_health/v1/messaging/messages/#{message_id}" + end - it 'responds to GET #show' do - VCR.use_cassette('sm_client/messages/gets_a_message_with_id') do - get "/my_health/v1/messaging/messages/#{message_id}" + expect(response).to be_successful + expect(response.body).to be_a(String) + # It should decode html entities + expect(JSON.parse(response.body)['data']['attributes']['subject']).to eq('Quote test: “test”') + # rubocop:disable Layout/LineLength + expect(JSON.parse(response.body)['data']['attributes']['body']).to eq("Einstein once said: “Profound quote contents here”. \n\nThat was supposed to show a regular quote but it didn’t display like it did in the compose form.\n\nLet’s try out more symbols here:\n\nSingle quote: ‘ contents’\nQuestion mark: ?\nColon: :\nDash: -\nLess than: <\nGreat then: >\nEquals: =\nAsterisk: *\nAnd symbol: &\nDollar symbol: $\nDivide symbol: %\nAt symbol: @\nParentheses: ( contents )\nBrackets: [ contents ]\nCurly braces: { contents }\nSemicolon: ;\nSlash: /\nPlus: +\nUp symbol: ^\nPound key: #\nExclamation: !") + # rubocop:enable Layout/LineLength + expect(response).to match_response_schema('message') end - expect(response).to be_successful - expect(response.body).to be_a(String) - # It should decode html entities - expect(JSON.parse(response.body)['data']['attributes']['subject']).to eq('Quote test: “test”') - # rubocop:disable Layout/LineLength - expect(JSON.parse(response.body)['data']['attributes']['body']).to eq("Einstein once said: “Profound quote contents here”. \n\nThat was supposed to show a regular quote but it didn’t display like it did in the compose form.\n\nLet’s try out more symbols here:\n\nSingle quote: ‘ contents’\nQuestion mark: ?\nColon: :\nDash: -\nLess than: <\nGreat then: >\nEquals: =\nAsterisk: *\nAnd symbol: &\nDollar symbol: $\nDivide symbol: %\nAt symbol: @\nParentheses: ( contents )\nBrackets: [ contents ]\nCurly braces: { contents }\nSemicolon: ;\nSlash: /\nPlus: +\nUp symbol: ^\nPound key: #\nExclamation: !") - # rubocop:enable Layout/LineLength - expect(response).to match_response_schema('message') - end + it 'responds to GET #show when camel-inflected' do + VCR.use_cassette('sm_client/messages/gets_a_message_with_id') do + get "/my_health/v1/messaging/messages/#{message_id}", headers: inflection_header + end - it 'responds to GET #show when camel-inflected' do - VCR.use_cassette('sm_client/messages/gets_a_message_with_id') do - get "/my_health/v1/messaging/messages/#{message_id}", headers: inflection_header + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(response).to match_camelized_response_schema('message') end - expect(response).to be_successful - expect(response.body).to be_a(String) - expect(response).to match_camelized_response_schema('message') - end + describe 'POST create' do + let(:attachment_type) { 'image/jpg' } + let(:uploads) do + [ + Rack::Test::UploadedFile.new('spec/fixtures/files/sm_file1.jpg', attachment_type), + Rack::Test::UploadedFile.new('spec/fixtures/files/sm_file2.jpg', attachment_type), + Rack::Test::UploadedFile.new('spec/fixtures/files/sm_file3.jpg', attachment_type), + Rack::Test::UploadedFile.new('spec/fixtures/files/sm_file4.jpg', attachment_type) + ] + end + let(:message_params) { attributes_for(:message, subject: 'CI Run', body: 'Continuous Integration') } + let(:params) { message_params.slice(:subject, :category, :recipient_id, :body) } + let(:params_with_attachments) { { message: params }.merge(uploads:) } + + context 'message' do + it 'without attachments' do + VCR.use_cassette('sm_client/messages/creates/a_new_message_without_attachments') do + post '/my_health/v1/messaging/messages', params: { message: params } + end + + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(JSON.parse(response.body)['data']['attributes']['subject']).to eq('CI Run') + expect(JSON.parse(response.body)['data']['attributes']['body']).to eq('Continuous Integration') + expect(response).to match_response_schema('message') + end - describe 'POST create' do - let(:attachment_type) { 'image/jpg' } - let(:uploads) do - [ - Rack::Test::UploadedFile.new('spec/fixtures/files/sm_file1.jpg', attachment_type), - Rack::Test::UploadedFile.new('spec/fixtures/files/sm_file2.jpg', attachment_type), - Rack::Test::UploadedFile.new('spec/fixtures/files/sm_file3.jpg', attachment_type), - Rack::Test::UploadedFile.new('spec/fixtures/files/sm_file4.jpg', attachment_type) - ] - end - let(:message_params) { attributes_for(:message, subject: 'CI Run', body: 'Continuous Integration') } - let(:params) { message_params.slice(:subject, :category, :recipient_id, :body) } - let(:params_with_attachments) { { message: params }.merge(uploads:) } - - context 'message' do - it 'without attachments' do - VCR.use_cassette('sm_client/messages/creates/a_new_message_without_attachments') do - post '/my_health/v1/messaging/messages', params: { message: params } + it 'without attachments when camel-inflected' do + VCR.use_cassette('sm_client/messages/creates/a_new_message_without_attachments') do + post '/my_health/v1/messaging/messages', params: { message: params }, headers: inflection_header + end + + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(JSON.parse(response.body)['data']['attributes']['subject']).to eq('CI Run') + expect(JSON.parse(response.body)['data']['attributes']['body']).to eq('Continuous Integration') + expect(response).to match_camelized_response_schema('message') end - expect(response).to be_successful - expect(response.body).to be_a(String) - expect(JSON.parse(response.body)['data']['attributes']['subject']).to eq('CI Run') - expect(JSON.parse(response.body)['data']['attributes']['body']).to eq('Continuous Integration') - expect(response).to match_response_schema('message') - end + it 'with attachments' do + VCR.use_cassette('sm_client/messages/creates/a_new_message_with_4_attachments') do + post '/my_health/v1/messaging/messages', params: params_with_attachments + end - it 'without attachments when camel-inflected' do - VCR.use_cassette('sm_client/messages/creates/a_new_message_without_attachments') do - post '/my_health/v1/messaging/messages', params: { message: params }, headers: inflection_header + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(JSON.parse(response.body)['data']['attributes']['subject']).to eq('CI Run') + expect(JSON.parse(response.body)['data']['attributes']['body']).to eq('Continuous Integration') + expect(response).to match_response_schema('message_with_attachment') end - expect(response).to be_successful - expect(response.body).to be_a(String) - expect(JSON.parse(response.body)['data']['attributes']['subject']).to eq('CI Run') - expect(JSON.parse(response.body)['data']['attributes']['body']).to eq('Continuous Integration') - expect(response).to match_camelized_response_schema('message') + it 'with attachments when camel-inflected' do + VCR.use_cassette('sm_client/messages/creates/a_new_message_with_4_attachments') do + post '/my_health/v1/messaging/messages', params: params_with_attachments, headers: inflection_header + end + + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(JSON.parse(response.body)['data']['attributes']['subject']).to eq('CI Run') + expect(JSON.parse(response.body)['data']['attributes']['body']).to eq('Continuous Integration') + expect(response).to match_camelized_response_schema('message_with_attachment') + end end - it 'with attachments' do - VCR.use_cassette('sm_client/messages/creates/a_new_message_with_4_attachments') do - post '/my_health/v1/messaging/messages', params: params_with_attachments + context 'reply' do + let(:reply_message_id) { 674_838 } + + it 'without attachments' do + VCR.use_cassette('sm_client/messages/creates/a_reply_without_attachments') do + post "/my_health/v1/messaging/messages/#{reply_message_id}/reply", params: { message: params } + end + + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(JSON.parse(response.body)['data']['attributes']['subject']).to eq('CI Run') + expect(JSON.parse(response.body)['data']['attributes']['body']).to eq('Continuous Integration') + expect(response).to match_response_schema('message') end - expect(response).to be_successful - expect(response.body).to be_a(String) - expect(JSON.parse(response.body)['data']['attributes']['subject']).to eq('CI Run') - expect(JSON.parse(response.body)['data']['attributes']['body']).to eq('Continuous Integration') - expect(response).to match_response_schema('message_with_attachment') - end + it 'without attachments when camel-inflected' do + VCR.use_cassette('sm_client/messages/creates/a_reply_without_attachments') do + post "/my_health/v1/messaging/messages/#{reply_message_id}/reply", + params: { message: params }, + headers: inflection_header + end + + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(JSON.parse(response.body)['data']['attributes']['subject']).to eq('CI Run') + expect(JSON.parse(response.body)['data']['attributes']['body']).to eq('Continuous Integration') + expect(response).to match_camelized_response_schema('message') + end + + it 'with attachments' do + VCR.use_cassette('sm_client/messages/creates/a_reply_with_4_attachments') do + post "/my_health/v1/messaging/messages/#{reply_message_id}/reply", params: params_with_attachments + end - it 'with attachments when camel-inflected' do - VCR.use_cassette('sm_client/messages/creates/a_new_message_with_4_attachments') do - post '/my_health/v1/messaging/messages', params: params_with_attachments, headers: inflection_header + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(JSON.parse(response.body)['data']['attributes']['subject']).to eq('CI Run') + expect(JSON.parse(response.body)['data']['attributes']['body']).to eq('Continuous Integration') + expect(response).to match_response_schema('message_with_attachment') end - expect(response).to be_successful - expect(response.body).to be_a(String) - expect(JSON.parse(response.body)['data']['attributes']['subject']).to eq('CI Run') - expect(JSON.parse(response.body)['data']['attributes']['body']).to eq('Continuous Integration') - expect(response).to match_camelized_response_schema('message_with_attachment') + it 'with attachments when camel-inflected' do + VCR.use_cassette('sm_client/messages/creates/a_reply_with_4_attachments') do + post "/my_health/v1/messaging/messages/#{reply_message_id}/reply", + params: params_with_attachments, + headers: inflection_header + end + + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(JSON.parse(response.body)['data']['attributes']['subject']).to eq('CI Run') + expect(JSON.parse(response.body)['data']['attributes']['body']).to eq('Continuous Integration') + expect(response).to match_camelized_response_schema('message_with_attachment') + end end end - context 'reply' do - let(:reply_message_id) { 674_838 } + describe '#thread' do + let(:thread_id) { 3_188_782 } - it 'without attachments' do - VCR.use_cassette('sm_client/messages/creates/a_reply_without_attachments') do - post "/my_health/v1/messaging/messages/#{reply_message_id}/reply", params: { message: params } + it 'responds to GET #thread' do + VCR.use_cassette('sm_client/messages/gets_a_message_thread_full') do + get "/my_health/v1/messaging/messages/#{thread_id}/thread" end - + json_response = JSON.parse(response.body) + data = json_response['data'] + expect(data).to be_an(Array) + first_message = data.first['attributes'] + expect(first_message['message_id']).to eq(3_207_476) + expect(first_message['thread_id']).to eq(3_188_781) + expect(first_message['sender_id']).to eq(251_391) + expect(first_message['sender_name']).to eq('MHVDAYMARK, MARK') + expect(first_message['recipient_id']).to eq(3_188_767) + expect(first_message['recipient_name']).to eq('TG API TESTING') + expect(first_message['sent_date']).to be_nil + expect(first_message['draft_date']).to eq('2023-12-19T17:21:47.000+00:00') + expect(first_message['triage_group_name']).to eq('TG API TESTING') + expect(first_message['has_attachments']).to eq(false) + expect(first_message['subject']).to eq('Test Inquiry') + expect(first_message['category']).to eq('TEST_RESULTS') + expect(first_message['folder_id']).to eq(-2) + expect(first_message['message_body']).to eq('TEST0101010101') + expect(first_message['proxy_sender_name']).to be_nil + expect(first_message['read_receipt']).to be_nil expect(response).to be_successful - expect(response.body).to be_a(String) - expect(JSON.parse(response.body)['data']['attributes']['subject']).to eq('CI Run') - expect(JSON.parse(response.body)['data']['attributes']['body']).to eq('Continuous Integration') - expect(response).to match_response_schema('message') end - it 'without attachments when camel-inflected' do - VCR.use_cassette('sm_client/messages/creates/a_reply_without_attachments') do - post "/my_health/v1/messaging/messages/#{reply_message_id}/reply", - params: { message: params }, - headers: inflection_header + it 'responds to GET #thread with full_body query param' do + VCR.use_cassette('sm_client/messages/gets_a_message_thread_full_body') do + get "/my_health/v1/messaging/messages/#{thread_id}/thread?full_body=true" end - expect(response).to be_successful - expect(response.body).to be_a(String) - expect(JSON.parse(response.body)['data']['attributes']['subject']).to eq('CI Run') - expect(JSON.parse(response.body)['data']['attributes']['body']).to eq('Continuous Integration') - expect(response).to match_camelized_response_schema('message') - end + json_response = JSON.parse(response.body) + data = json_response['data'] - it 'with attachments' do - VCR.use_cassette('sm_client/messages/creates/a_reply_with_4_attachments') do - post "/my_health/v1/messaging/messages/#{reply_message_id}/reply", params: params_with_attachments - end + expect(data).to be_an(Array) - expect(response).to be_successful - expect(response.body).to be_a(String) - expect(JSON.parse(response.body)['data']['attributes']['subject']).to eq('CI Run') - expect(JSON.parse(response.body)['data']['attributes']['body']).to eq('Continuous Integration') - expect(response).to match_response_schema('message_with_attachment') + first_message = data.first['attributes'] + expect(first_message['message_id']).to eq(3_207_476) + expect(first_message['attachments']).to be_empty + + second_message = data[1]['attributes'] + expect(second_message['message_id']).to eq(3_204_755) + + attachments = second_message['attachments'] + expect(attachments.length).to eq(2) + + first_attachment = attachments.first + expect(first_attachment['id']).to eq(3_204_753) + expect(first_attachment['name']).to eq('almost4mbfile.pdf') + expect(first_attachment['attachment_size']).to eq(3_976_877) + expect(first_attachment['message_id']).to eq(3_204_755) + + third_message = data[2]['attributes'] + expect(third_message['message_id']).to eq(3_203_739) + expect(third_message['message_body'].length).to be > 200 end - it 'with attachments when camel-inflected' do - VCR.use_cassette('sm_client/messages/creates/a_reply_with_4_attachments') do - post "/my_health/v1/messaging/messages/#{reply_message_id}/reply", - params: params_with_attachments, - headers: inflection_header + it 'responds to GET #thread when camel-inflected' do + VCR.use_cassette('sm_client/messages/gets_a_message_thread_full') do + get "/my_health/v1/messaging/messages/#{thread_id}/thread", headers: { 'X-Key-Inflection': 'camel' } end + json_response = JSON.parse(response.body) + data = json_response['data'] + expect(response).to be_successful - expect(response.body).to be_a(String) - expect(JSON.parse(response.body)['data']['attributes']['subject']).to eq('CI Run') - expect(JSON.parse(response.body)['data']['attributes']['body']).to eq('Continuous Integration') - expect(response).to match_camelized_response_schema('message_with_attachment') + expect(data).to be_a(Array) + first_message = data.first['attributes'] + expect(first_message['messageId']).to eq(3_207_476) + expect(first_message['threadId']).to eq(3_188_781) + expect(first_message['senderId']).to eq(251_391) end end - end - describe '#thread' do - let(:thread_id) { 3_188_782 } + describe '#destroy' do + let(:message_id) { 573_052 } - it 'responds to GET #thread' do - VCR.use_cassette('sm_client/messages/gets_a_message_thread_full') do - get "/my_health/v1/messaging/messages/#{thread_id}/thread" - end - json_response = JSON.parse(response.body) - data = json_response['data'] - expect(data).to be_an(Array) - first_message = data.first['attributes'] - expect(first_message['message_id']).to eq(3_207_476) - expect(first_message['thread_id']).to eq(3_188_781) - expect(first_message['sender_id']).to eq(251_391) - expect(first_message['sender_name']).to eq('MHVDAYMARK, MARK') - expect(first_message['recipient_id']).to eq(3_188_767) - expect(first_message['recipient_name']).to eq('TG API TESTING') - expect(first_message['sent_date']).to be_nil - expect(first_message['draft_date']).to eq('2023-12-19T17:21:47.000+00:00') - expect(first_message['triage_group_name']).to eq('TG API TESTING') - expect(first_message['has_attachments']).to eq(false) - expect(first_message['subject']).to eq('Test Inquiry') - expect(first_message['category']).to eq('TEST_RESULTS') - expect(first_message['folder_id']).to eq(-2) - expect(first_message['message_body']).to eq('TEST0101010101') - expect(first_message['proxy_sender_name']).to be_nil - expect(first_message['read_receipt']).to be_nil - expect(response).to be_successful - end + it 'responds to DELETE' do + VCR.use_cassette('sm_client/messages/deletes_the_message_with_id') do + delete "/my_health/v1/messaging/messages/#{message_id}" + end - it 'responds to GET #thread with full_body query param' do - VCR.use_cassette('sm_client/messages/gets_a_message_thread_full_body') do - get "/my_health/v1/messaging/messages/#{thread_id}/thread?full_body=true" + expect(response).to be_successful + expect(response).to have_http_status(:no_content) end + end - json_response = JSON.parse(response.body) - data = json_response['data'] - - expect(data).to be_an(Array) - - first_message = data.first['attributes'] - expect(first_message['message_id']).to eq(3_207_476) - expect(first_message['attachments']).to be_empty - - second_message = data[1]['attributes'] - expect(second_message['message_id']).to eq(3_204_755) - - attachments = second_message['attachments'] - expect(attachments.length).to eq(2) + describe '#move' do + let(:message_id) { 573_052 } - first_attachment = attachments.first - expect(first_attachment['id']).to eq(3_204_753) - expect(first_attachment['name']).to eq('almost4mbfile.pdf') - expect(first_attachment['attachment_size']).to eq(3_976_877) - expect(first_attachment['message_id']).to eq(3_204_755) + it 'responds to PATCH messages/move' do + VCR.use_cassette('sm_client/messages/moves_a_message_with_id') do + patch "/my_health/v1/messaging/messages/#{message_id}/move?folder_id=0" + end - third_message = data[2]['attributes'] - expect(third_message['message_id']).to eq(3_203_739) - expect(third_message['message_body'].length).to be > 200 + expect(response).to be_successful + expect(response).to have_http_status(:no_content) + end end + end + end - it 'responds to GET #thread when camel-inflected' do - VCR.use_cassette('sm_client/messages/gets_a_message_thread_full') do - get "/my_health/v1/messaging/messages/#{thread_id}/thread", headers: { 'X-Key-Inflection': 'camel' } - end + context 'when legacy sm policy' do + before do + Flipper.disable(:mhv_sm_session_policy) + allow(SM::Client).to receive(:new).and_return(authenticated_client) + end - json_response = JSON.parse(response.body) - data = json_response['data'] + context 'Basic User' do + let(:mhv_account_type) { 'Basic' } - expect(response).to be_successful - expect(data).to be_a(Array) - first_message = data.first['attributes'] - expect(first_message['messageId']).to eq(3_207_476) - expect(first_message['threadId']).to eq(3_188_781) - expect(first_message['senderId']).to eq(251_391) - end + before { get '/my_health/v1/messaging/messages/categories' } + + include_examples 'for user account level', message: 'You do not have access to messaging' + include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' end - describe '#destroy' do - let(:message_id) { 573_052 } + context 'Premium User' do + let(:mhv_account_type) { 'Premium' } - it 'responds to DELETE' do - VCR.use_cassette('sm_client/messages/deletes_the_message_with_id') do - delete "/my_health/v1/messaging/messages/#{message_id}" + context 'not a va patient' do + before { get '/my_health/v1/messaging/messages/categories' } + + let(:va_patient) { false } + let(:current_user) do + build(:user, :mhv, :no_vha_facilities, va_patient:, mhv_account_type:) end - expect(response).to be_successful - expect(response).to have_http_status(:no_content) + include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' end - end - describe '#move' do - let(:message_id) { 573_052 } + describe '#show' do + it 'responds to GET #show' do + VCR.use_cassette('sm_client/messages/gets_a_message_with_id') do + get "/my_health/v1/messaging/messages/#{message_id}" + end - it 'responds to PATCH messages/move' do - VCR.use_cassette('sm_client/messages/moves_a_message_with_id') do - patch "/my_health/v1/messaging/messages/#{message_id}/move?folder_id=0" + expect(response).to be_successful + expect(response.body).to be_a(String) + # It should decode html entities + expect(JSON.parse(response.body)['data']['attributes']['subject']).to eq('Quote test: “test”') + # rubocop:disable Layout/LineLength + expect(JSON.parse(response.body)['data']['attributes']['body']).to eq("Einstein once said: “Profound quote contents here”. \n\nThat was supposed to show a regular quote but it didn’t display like it did in the compose form.\n\nLet’s try out more symbols here:\n\nSingle quote: ‘ contents’\nQuestion mark: ?\nColon: :\nDash: -\nLess than: <\nGreat then: >\nEquals: =\nAsterisk: *\nAnd symbol: &\nDollar symbol: $\nDivide symbol: %\nAt symbol: @\nParentheses: ( contents )\nBrackets: [ contents ]\nCurly braces: { contents }\nSemicolon: ;\nSlash: /\nPlus: +\nUp symbol: ^\nPound key: #\nExclamation: !") + # rubocop:enable Layout/LineLength + expect(response).to match_response_schema('message') end - - expect(response).to be_successful - expect(response).to have_http_status(:no_content) end end end diff --git a/modules/my_health/spec/request/v1/messaging_preferences_spec.rb b/modules/my_health/spec/request/v1/messaging_preferences_spec.rb index 89e29cab6a7..384a144b200 100644 --- a/modules/my_health/spec/request/v1/messaging_preferences_spec.rb +++ b/modules/my_health/spec/request/v1/messaging_preferences_spec.rb @@ -8,100 +8,148 @@ include SM::ClientHelpers include SchemaMatchers + let(:mhv_account_type) { 'Premium' } let(:va_patient) { true } let(:current_user) { build(:user, :mhv, va_patient:, mhv_account_type:) } before do - allow(SM::Client).to receive(:new).and_return(authenticated_client) sign_in_as(current_user) end - context 'Basic User' do - let(:mhv_account_type) { 'Basic' } + context 'when sm session policy is enabled' do + before do + Flipper.enable(:mhv_sm_session_policy) + Timecop.freeze(Time.zone.parse('2017-05-01T19:25:00Z')) + sign_in_as(current_user) + end - before { get '/my_health/v1/messaging/preferences' } + after do + Flipper.disable(:mhv_sm_session_policy) + Timecop.return + end - include_examples 'for user account level', message: 'You do not have access to messaging' - include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' - end + context 'when NOT authorized' do + before do + VCR.insert_cassette('sm_client/session_error') + get '/my_health/v1/messaging/preferences' + end - context 'Advanced User' do - let(:mhv_account_type) { 'Advanced' } + after do + VCR.eject_cassette + end - before { get '/my_health/v1/messaging/preferences' } + include_examples 'for user account level', message: 'You do not have access to messaging' + end - include_examples 'for user account level', message: 'You do not have access to messaging' - include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' - end + context 'when authorized' do + before do + VCR.insert_cassette('sm_client/session') + end - context 'Premium User' do - let(:mhv_account_type) { 'Premium' } + after do + VCR.eject_cassette + end - context 'not a va patient' do - before { get '/my_health/v1/messaging/preferences' } + it 'responds to GET #show of preferences' do + VCR.use_cassette('sm_client/preferences/fetches_email_settings_for_notifications') do + get '/my_health/v1/messaging/preferences' + end - let(:va_patient) { false } - let(:current_user) do - build(:user, :mhv, :no_vha_facilities, va_patient:, mhv_account_type:) + expect(response).to be_successful + expect(response.body).to be_a(String) + attrs = JSON.parse(response.body)['data']['attributes'] + expect(attrs['email_address']).to eq('muazzam.khan@va.gov') + expect(attrs['frequency']).to eq('daily') end - include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' - end + it 'responds to PUT #update of preferences' do + VCR.use_cassette('sm_client/preferences/sets_the_email_notification_settings', record: :none) do + params = { email_address: 'kamyar.karshenas@va.gov', + frequency: 'none' } + put '/my_health/v1/messaging/preferences', params: + end + + expect(response).to have_http_status(:ok) + expect(JSON.parse(response.body)['data']['id']) + .to eq('17126b0821ad0472ae11944e9861f82d6bdd17801433e200e6a760148a4866c3') + expect(JSON.parse(response.body)['data']['attributes']) + .to eq('email_address' => 'kamyar.karshenas@va.gov', 'frequency' => 'none') + end - it 'responds to GET #show of preferences' do - VCR.use_cassette('sm_client/preferences/fetches_email_settings_for_notifications') do - get '/my_health/v1/messaging/preferences' + it 'requires all parameters for update' do + VCR.use_cassette('sm_client/preferences/sets_the_email_notification_settings', record: :none) do + params = { email_address: 'kamyar.karshenas@va.gov' } + put '/my_health/v1/messaging/preferences', params: + end + + expect(response).to have_http_status(:unprocessable_entity) end - expect(response).to be_successful - expect(response.body).to be_a(String) - attrs = JSON.parse(response.body)['data']['attributes'] - expect(attrs['email_address']).to eq('muazzam.khan@va.gov') - expect(attrs['frequency']).to eq('daily') - end + it 'rejects unknown frequency parameters' do + VCR.use_cassette('sm_client/preferences/sets_the_email_notification_settings', record: :none) do + params = { email_address: 'kamyar.karshenas@va.gov', + frequency: 'hourly' } + put '/my_health/v1/messaging/preferences', params: + end - it 'responds to PUT #update of preferences' do - VCR.use_cassette('sm_client/preferences/sets_the_email_notification_settings', record: :none) do - params = { email_address: 'kamyar.karshenas@va.gov', - frequency: 'none' } - put '/my_health/v1/messaging/preferences', params: + expect(response).to have_http_status(:unprocessable_entity) end - expect(response).to have_http_status(:ok) - expect(JSON.parse(response.body)['data']['id']) - .to eq('17126b0821ad0472ae11944e9861f82d6bdd17801433e200e6a760148a4866c3') - expect(JSON.parse(response.body)['data']['attributes']) - .to eq('email_address' => 'kamyar.karshenas@va.gov', 'frequency' => 'none') - end + it 'returns a custom exception mapped from i18n when email contains spaces' do + VCR.use_cassette('sm_client/preferences/raises_a_backend_service_exception_when_email_includes_spaces') do + params = { email_address: 'kamyar karshenas@va.gov', + frequency: 'daily' } + put '/my_health/v1/messaging/preferences', params: + end - it 'requires all parameters for update' do - VCR.use_cassette('sm_client/preferences/sets_the_email_notification_settings', record: :none) do - params = { email_address: 'kamyar.karshenas@va.gov' } - put '/my_health/v1/messaging/preferences', params: + expect(response).to have_http_status(:unprocessable_entity) + expect(JSON.parse(response.body)['errors'].first['code']).to eq('SM152') end + end + end - expect(response).to have_http_status(:unprocessable_entity) + context 'when legacy sm policy' do + before do + Flipper.disable(:mhv_sm_session_policy) + allow(SM::Client).to receive(:new).and_return(authenticated_client) end - it 'rejects unknown frequency parameters' do - VCR.use_cassette('sm_client/preferences/sets_the_email_notification_settings', record: :none) do - params = { email_address: 'kamyar.karshenas@va.gov', - frequency: 'hourly' } - put '/my_health/v1/messaging/preferences', params: - end + context 'Basic User' do + let(:mhv_account_type) { 'Basic' } - expect(response).to have_http_status(:unprocessable_entity) + before { get '/my_health/v1/messaging/preferences' } + + include_examples 'for user account level', message: 'You do not have access to messaging' + include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' end - it 'returns a custom exception mapped from i18n when email contains spaces' do - VCR.use_cassette('sm_client/preferences/raises_a_backend_service_exception_when_email_includes_spaces') do - params = { email_address: 'kamyar karshenas@va.gov', - frequency: 'daily' } - put '/my_health/v1/messaging/preferences', params: + context 'Premium User' do + let(:mhv_account_type) { 'Premium' } + + context 'not a va patient' do + before { get '/my_health/v1/messaging/preferences' } + + let(:va_patient) { false } + let(:current_user) do + build(:user, :mhv, :no_vha_facilities, va_patient:, mhv_account_type:) + end + + include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' end - expect(response).to have_http_status(:unprocessable_entity) - expect(JSON.parse(response.body)['errors'].first['code']).to eq('SM152') + describe 'preferences' do + it 'responds to GET #show of preferences' do + VCR.use_cassette('sm_client/preferences/fetches_email_settings_for_notifications') do + get '/my_health/v1/messaging/preferences' + end + + expect(response).to be_successful + expect(response.body).to be_a(String) + attrs = JSON.parse(response.body)['data']['attributes'] + expect(attrs['email_address']).to eq('muazzam.khan@va.gov') + expect(attrs['frequency']).to eq('daily') + end + end end end end diff --git a/modules/my_health/spec/request/v1/threads_request_spec.rb b/modules/my_health/spec/request/v1/threads_request_spec.rb index 898e7c6a7fd..d7660091c8a 100644 --- a/modules/my_health/spec/request/v1/threads_request_spec.rb +++ b/modules/my_health/spec/request/v1/threads_request_spec.rb @@ -12,100 +12,146 @@ let(:inbox_id) { 0 } let(:message_id) { 660_516 } let(:thread_id) { 660_515 } + let(:mhv_account_type) { 'Premium' } let(:va_patient) { true } let(:current_user) { build(:user, :mhv, va_patient:, mhv_account_type:) } let(:inflection_header) { { 'X-Key-Inflection' => 'camel' } } before do - allow(SM::Client).to receive(:new).and_return(authenticated_client) sign_in_as(current_user) end - context 'Basic User' do - let(:mhv_account_type) { 'Basic' } - - before { patch '/my_health/v1/messaging/threads/7259506/move?folder_id=0' } - - include_examples 'for user account level', message: 'You do not have access to messaging' - include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' - end + context 'when sm session policy is enabled' do + before do + Flipper.enable(:mhv_sm_session_policy) + Timecop.freeze(Time.zone.parse('2017-05-01T19:25:00Z')) + end - context 'Advanced User' do - let(:mhv_account_type) { 'Advanced' } + after do + Flipper.disable(:mhv_sm_session_policy) + Timecop.return + end - before { patch '/my_health/v1/messaging/threads/7259506/move?folder_id=0' } + context 'when NOT authorized' do + before do + VCR.insert_cassette('sm_client/session_error') + get "/my_health/v1/messaging/folders/#{inbox_id}/threads" + end - include_examples 'for user account level', message: 'You do not have access to messaging' - include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' - end + after do + VCR.eject_cassette + end - context 'Premium User' do - let(:mhv_account_type) { 'Premium' } + include_examples 'for user account level', message: 'You do not have access to messaging' + end - context 'not a va patient' do + context 'when authorized' do before do - get "/my_health/v1/messaging/folders/#{inbox_id}/threads", - params: { page_size: '5', page_number: '1', sort_field: 'SENDER_NAME', sort_order: 'ASC' } + VCR.insert_cassette('sm_client/session') end - let(:va_patient) { false } - let(:current_user) do - build(:user, :mhv, :no_vha_facilities, va_patient:, mhv_account_type:) + after do + VCR.eject_cassette end - include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' - end - - describe '#index' do - context 'with valid params' do - it 'responds to GET #index' do - VCR.use_cassette('sm_client/threads/gets_threads_in_a_folder') do - get "/my_health/v1/messaging/folders/#{inbox_id}/threads", - params: { page_size: '5', page_number: '1', sort_field: 'SENDER_NAME', sort_order: 'ASC' } + describe '#index' do + context 'with valid params' do + it 'responds to GET #index' do + VCR.use_cassette('sm_client/threads/gets_threads_in_a_folder') do + get "/my_health/v1/messaging/folders/#{inbox_id}/threads", + params: { page_size: '5', page_number: '1', sort_field: 'SENDER_NAME', sort_order: 'ASC' } + end + + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(response).to match_response_schema('message_threads') end - expect(response).to be_successful - expect(response.body).to be_a(String) - expect(response).to match_response_schema('message_threads') - end + it 'responds to GET #index when camel-inflected' do + VCR.use_cassette('sm_client/threads/gets_threads_in_a_folder_camel') do + get "/my_health/v1/messaging/folders/#{inbox_id}/threads", + params: { page_size: '5', page_number: '1', sort_field: 'SENDER_NAME', sort_order: 'ASC' }, + headers: { 'X-Key-Inflection' => 'camel' } + end - it 'responds to GET #index when camel-inflected' do - VCR.use_cassette('sm_client/threads/gets_threads_in_a_folder_camel') do - get "/my_health/v1/messaging/folders/#{inbox_id}/threads", - params: { page_size: '5', page_number: '1', sort_field: 'SENDER_NAME', sort_order: 'ASC' }, - headers: { 'X-Key-Inflection' => 'camel' } + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(response).to match_camelized_response_schema('message_threads') end - expect(response).to be_successful - expect(response.body).to be_a(String) - expect(response).to match_camelized_response_schema('message_threads') + it 'returns an empty array when there are no messages in the folder' do + VCR.use_cassette('sm_client/threads/gets_threads_in_a_folder_no_messages') do + get "/my_health/v1/messaging/folders/#{inbox_id}/threads", + params: { page_size: '5', page_number: '1', sort_field: 'SENDER_NAME', sort_order: 'ASC' } + end + + expect(response).to be_successful + + json_response = JSON.parse(response.body) + expect(json_response).to eq({ 'data' => [] }) + expect(response).to match_response_schema('message_threads_no_messages') + end end + end - it 'returns an empty array when there are no messages in the folder' do - VCR.use_cassette('sm_client/threads/gets_threads_in_a_folder_no_messages') do - get "/my_health/v1/messaging/folders/#{inbox_id}/threads", - params: { page_size: '5', page_number: '1', sort_field: 'SENDER_NAME', sort_order: 'ASC' } + describe '#move' do + let(:thread_id) { 7_065_799 } + + it 'responds to PATCH threads/move' do + VCR.use_cassette('sm_client/threads/moves_a_thread_with_id') do + patch "/my_health/v1/messaging/threads/#{thread_id}/move?folder_id=0" end expect(response).to be_successful - - json_response = JSON.parse(response.body) - expect(json_response).to eq({ 'data' => [] }) - expect(response).to match_response_schema('message_threads_no_messages') + expect(response).to have_http_status(:no_content) end end end + end + + context 'when legacy sm policy' do + before do + Flipper.disable(:mhv_sm_session_policy) + allow(SM::Client).to receive(:new).and_return(authenticated_client) + end + + context 'Basic User' do + let(:mhv_account_type) { 'Basic' } - describe '#move' do - let(:thread_id) { 7_065_799 } + before { patch '/my_health/v1/messaging/threads/7259506/move?folder_id=0' } - it 'responds to PATCH threads/move' do - VCR.use_cassette('sm_client/threads/moves_a_thread_with_id') do - patch "/my_health/v1/messaging/threads/#{thread_id}/move?folder_id=0" + include_examples 'for user account level', message: 'You do not have access to messaging' + include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' + end + + context 'Premium User' do + let(:mhv_account_type) { 'Premium' } + + context 'not a va patient' do + before do + get "/my_health/v1/messaging/folders/#{inbox_id}/threads", + params: { page_size: '5', page_number: '1', sort_field: 'SENDER_NAME', sort_order: 'ASC' } end - expect(response).to be_successful - expect(response).to have_http_status(:no_content) + let(:va_patient) { false } + let(:current_user) do + build(:user, :mhv, :no_vha_facilities, va_patient:, mhv_account_type:) + end + + include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' + end + + describe '#index' do + it 'responds to GET #index' do + VCR.use_cassette('sm_client/threads/gets_threads_in_a_folder') do + get "/my_health/v1/messaging/folders/#{inbox_id}/threads", + params: { page_size: '5', page_number: '1', sort_field: 'SENDER_NAME', sort_order: 'ASC' } + end + + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(response).to match_response_schema('message_threads') + end end end end diff --git a/modules/my_health/spec/request/v1/triage_teams_request_spec.rb b/modules/my_health/spec/request/v1/triage_teams_request_spec.rb index 27e7625d51e..7866fe28dec 100644 --- a/modules/my_health/spec/request/v1/triage_teams_request_spec.rb +++ b/modules/my_health/spec/request/v1/triage_teams_request_spec.rb @@ -8,64 +8,109 @@ include SM::ClientHelpers include SchemaMatchers + let(:mhv_account_type) { 'Premium' } let(:va_patient) { true } let(:current_user) { build(:user, :mhv, va_patient:, mhv_account_type:) } before do - allow(SM::Client).to receive(:new).and_return(authenticated_client) sign_in_as(current_user) end - context 'Basic User' do - let(:mhv_account_type) { 'Basic' } + context 'when sm session policy is enabled' do + before do + Flipper.enable(:mhv_sm_session_policy) + Timecop.freeze(Time.zone.parse('2017-05-01T19:25:00Z')) + end - before { get '/my_health/v1/messaging/recipients' } + after do + Flipper.disable(:mhv_sm_session_policy) + Timecop.return + end - include_examples 'for user account level', message: 'You do not have access to messaging' - include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' - end + context 'when NOT authorized' do + before do + VCR.insert_cassette('sm_client/session_error') + get '/my_health/v1/messaging/recipients' + end - context 'Advanced User' do - let(:mhv_account_type) { 'Advanced' } + after do + VCR.eject_cassette + end - before { get '/my_health/v1/messaging/recipients' } + include_examples 'for user account level', message: 'You do not have access to messaging' + end - include_examples 'for user account level', message: 'You do not have access to messaging' - include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' - end + context 'when authorized' do + before do + VCR.insert_cassette('sm_client/session') + end - context 'Premium User' do - let(:mhv_account_type) { 'Premium' } + after do + VCR.eject_cassette + end - context 'not a va patient' do - before { get '/my_health/v1/messaging/recipients' } + it 'responds to GET #index' do + VCR.use_cassette('sm_client/triage_teams/gets_a_collection_of_triage_team_recipients') do + get '/my_health/v1/messaging/recipients' + end - let(:va_patient) { false } - let(:current_user) do - build(:user, :mhv, :no_vha_facilities, va_patient:, mhv_account_type:) + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(response).to match_response_schema('triage_teams') end - include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' - end + it 'responds to GET #index when camel-inflected' do + VCR.use_cassette('sm_client/triage_teams/gets_a_collection_of_triage_team_recipients') do + get '/my_health/v1/messaging/recipients', headers: { 'X-Key-Inflection' => 'camel' } + end - it 'responds to GET #index' do - VCR.use_cassette('sm_client/triage_teams/gets_a_collection_of_triage_team_recipients') do - get '/my_health/v1/messaging/recipients' + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(response).to match_camelized_response_schema('triage_teams') end + end + end + + context 'when legacy sm policy' do + before do + Flipper.disable(:mhv_sm_session_policy) + allow(SM::Client).to receive(:new).and_return(authenticated_client) + end + + context 'Basic User' do + let(:mhv_account_type) { 'Basic' } + + before { get '/my_health/v1/messaging/recipients' } - expect(response).to be_successful - expect(response.body).to be_a(String) - expect(response).to match_response_schema('triage_teams') + include_examples 'for user account level', message: 'You do not have access to messaging' + include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' end - it 'responds to GET #index when camel-inflected' do - VCR.use_cassette('sm_client/triage_teams/gets_a_collection_of_triage_team_recipients') do - get '/my_health/v1/messaging/recipients', headers: { 'X-Key-Inflection' => 'camel' } + context 'Premium User' do + let(:mhv_account_type) { 'Premium' } + + context 'not a va patient' do + before { get '/my_health/v1/messaging/recipients' } + + let(:va_patient) { false } + let(:current_user) do + build(:user, :mhv, :no_vha_facilities, va_patient:, mhv_account_type:) + end + + include_examples 'for non va patient user', authorized: false, message: 'You do not have access to messaging' end + end + + describe 'triage teams' do + it 'responds to GET #index' do + VCR.use_cassette('sm_client/triage_teams/gets_a_collection_of_triage_team_recipients') do + get '/my_health/v1/messaging/recipients' + end - expect(response).to be_successful - expect(response.body).to be_a(String) - expect(response).to match_camelized_response_schema('triage_teams') + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(response).to match_response_schema('triage_teams') + end end end end diff --git a/spec/requests/user_request_spec.rb b/spec/requests/user_request_spec.rb index 8a4765d7b88..81d719ed82c 100644 --- a/spec/requests/user_request_spec.rb +++ b/spec/requests/user_request_spec.rb @@ -1,9 +1,11 @@ # frozen_string_literal: true require 'rails_helper' +require 'support/sm_client_helpers' RSpec.describe 'Fetching user data' do include SchemaMatchers + include SM::ClientHelpers context 'GET /v0/user - when an LOA 3 user is logged in' do let(:mhv_user) { build(:user, :mhv) } @@ -11,6 +13,7 @@ let(:edipi) { '1005127153' } before do + allow(SM::Client).to receive(:new).and_return(authenticated_client) allow_any_instance_of(MHVAccountTypeService).to receive(:mhv_account_type).and_return('Premium') create(:account, idme_uuid: mhv_user.uuid) sign_in_as(mhv_user) diff --git a/spec/services/users/services_spec.rb b/spec/services/users/services_spec.rb index 1cd9938fd1c..0d82842665f 100644 --- a/spec/services/users/services_spec.rb +++ b/spec/services/users/services_spec.rb @@ -48,6 +48,16 @@ context 'with an MHV Premium user' do let(:user) { build(:user, :mhv) } + before do + Timecop.freeze(Time.zone.parse('2017-05-01T19:25:00Z')) + VCR.insert_cassette('sm_client/session') + end + + after do + VCR.eject_cassette + Timecop.return + end + it 'returns an array including the MHV services' do %w[health-records medical-records messaging rx].each do |service| expect(subject).to include(service) diff --git a/spec/support/vcr_cassettes/sm_client/session_error.yml b/spec/support/vcr_cassettes/sm_client/session_error.yml new file mode 100644 index 00000000000..7a17bfb5768 --- /dev/null +++ b/spec/support/vcr_cassettes/sm_client/session_error.yml @@ -0,0 +1,40 @@ +--- +http_interactions: + - request: + method: get + uri: "/mhv-sm-api/patient/v1/session" + body: + encoding: US-ASCII + string: "" + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Vets.gov Agent + Apptoken: + - "" + Mhvcorrelationid: + - "10616687" + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 503 + message: Service unavailable + headers: + Server: + - Apache-Coyote/1.1 + X-Powered-By: + - Servlet/2.5 JSP/2.1 + Content-Length: + - "0" + Date: + - Fri, 12 May 2017 16:15:20 GMT + body: + encoding: UTF-8 + string: "" + http_version: + recorded_at: Fri, 12 May 2017 16:15:22 GMT +recorded_with: VCR 3.0.3 From 85af796574b3a64a99d769e165a19dc8f532f2cd Mon Sep 17 00:00:00 2001 From: Corey Ferris Date: Fri, 5 Apr 2024 16:59:02 -0400 Subject: [PATCH 03/10] extract values and check substring for cerner logging (#16227) * extract values and check substring --- .../vaos/v2/appointments_controller.rb | 64 +++++++- .../request/v2/appointments_request_spec.rb | 139 +++++++++++++++++- 2 files changed, 199 insertions(+), 4 deletions(-) diff --git a/modules/vaos/app/controllers/vaos/v2/appointments_controller.rb b/modules/vaos/app/controllers/vaos/v2/appointments_controller.rb index fd2898f076c..44778701d7c 100644 --- a/modules/vaos/app/controllers/vaos/v2/appointments_controller.rb +++ b/modules/vaos/app/controllers/vaos/v2/appointments_controller.rb @@ -263,9 +263,7 @@ def merge_clinics(appointments) def merge_facilities(appointments) appointments.each do |appt| appt[:location] = get_facility_memoized(appt[:location_id]) unless appt[:location_id].nil? - if cerner?(appt) && appt[:location].is_a?(Hash) && appt[:location]&.values&.any? do |v| - v.include?('COL OR 1') - end + if cerner?(appt) && contains_substring(extract_all_values(appt[:location]), 'COL OR 1') log_appt_id_location_name(appt) end end @@ -310,6 +308,66 @@ def get_facility_memoized(location_id) end memoize :get_facility_memoized + # This method extracts all values from a given object, which can be either an `OpenStruct`, `Hash`, or `Array`. + # It recursively traverses the object and collects all values into an array. + # In case of an `Array`, it looks inside each element of the array for values. + # If the object is neither an OpenStruct, Hash, nor an Array, it returns the unmodified object in an array. + # + # @param object [OpenStruct, Hash, Array] The object from which to extract values. + # This could either be an OpenStruct, Hash or Array. + # + # @return [Array] An array of all values found in the object. + # If the object is not an OpenStruct, Hash, nor an Array, then the unmodified object is returned. + # + # @example + # extract_all_values({a: 1, b: 2, c: {d: 3, e: 4}}) # => [1, 2, 3, 4] + # extract_all_values(OpenStruct.new(a: 1, b: 2, c: OpenStruct.new(d: 3, e: 4))) # => [1, 2, 3, 4] + # extract_all_values([{a: 1}, {b: 2}]) # => [1, 2] + # extract_all_values({a: 1, b: [{c: 2}, {d: "hello"}]}) # => [1, 2, "hello"] + # extract_all_values("not a hash, openstruct, or array") # => ["not a hash, openstruct, or array"] + # + def extract_all_values(object) + return [object] unless object.is_a?(OpenStruct) || object.is_a?(Hash) || object.is_a?(Array) + + values = [] + object = object.to_h if object.is_a?(OpenStruct) + + if object.is_a?(Array) + object.each do |o| + values += extract_all_values(o) + end + else + object.each_pair do |_, value| + case value + when OpenStruct, Hash, Array then values += extract_all_values(value) + else values << value + end + end + end + + values + end + + # This method checks if any string element in the given array contains the specified substring. + # + # @param arr [Array] The array to be searched. + # @param substring [String] The substring to look for. + # + # @return [Boolean] Returns true if any string element in the array contains the substring, false otherwise. + # If the input parameters are not of the correct type the method will return false. + # + # @example + # contains_substring(['Hello', 'World'], 'ell') # => true + # contains_substring(['Hello', 'World'], 'xyz') # => false + # contains_substring('Hello', 'ell') # => false + # contains_substring(['Hello', 'World'], 123) # => false + # + def contains_substring(arr, substring) + return false unless arr.is_a?(Array) && substring.is_a?(String) + + arr.any? { |element| element.is_a?(String) && element.include?(substring) } + end + def scrape_appt_comments_and_log_details(appt, appt_method, comment_key) if appt&.[](:reason)&.include? comment_key log_appt_comment_data(appt, appt_method, appt&.[](:reason), comment_key, REASON) diff --git a/modules/vaos/spec/request/v2/appointments_request_spec.rb b/modules/vaos/spec/request/v2/appointments_request_spec.rb index b992b389d1a..82c3133f02e 100644 --- a/modules/vaos/spec/request/v2/appointments_request_spec.rb +++ b/modules/vaos/spec/request/v2/appointments_request_spec.rb @@ -22,6 +22,54 @@ } } + mock_appt_location_openstruct = OpenStruct.new( + { + 'id': '983', + 'vistaSite': '983', + 'vastParent': '983', + 'type': 'va_facilities', + 'name': 'COL OR 1', + 'classification': 'VA Medical Center (VAMC)', + 'lat': 39.744507, + 'long': -104.830956, + 'website': 'https://www.denver.va.gov/locations/directions.asp', + 'phone': { + 'main': '307-778-7550', + 'fax': '307-778-7381', + 'pharmacy': '866-420-6337', + 'afterHours': '307-778-7550', + 'patientAdvocate': '307-778-7550 x7517', + 'mentalHealthClinic': '307-778-7349', + 'enrollmentCoordinator': '307-778-7550 x7579' + }, + 'physicalAddress': { + 'type': 'physical', + 'line': ['2360 East Pershing Boulevard'], + 'city': 'Cheyenne', + 'state': 'WY', + 'postalCode': '82001-5356' + }, + 'mobile': false, + 'healthService': %w[Audiology Cardiology DentalServices EmergencyCare Gastroenterology + Gynecology MentalHealthCare Nutrition Ophthalmology Optometry Orthopedics + Podiatry PrimaryCare SpecialtyCare UrgentCare Urology WomensHealth], + 'operatingStatus': { + 'code': 'NORMAL' + } + } + ) + + mock_appt_location_extracted_values = ['983', '983', '983', 'va_facilities', 'COL OR 1', 'VA Medical Center (VAMC)', + 39.744507, -104.830956, 'https://www.denver.va.gov/locations/directions.asp', + '307-778-7550', '307-778-7381', '866-420-6337', '307-778-7550', + '307-778-7550 x7517', '307-778-7349', '307-778-7550 x7579', + 'physical', '2360 East Pershing Boulevard', 'Cheyenne', 'WY', + '82001-5356', false, 'Audiology', 'Cardiology', 'DentalServices', + 'EmergencyCare', 'Gastroenterology', 'Gynecology', 'MentalHealthCare', + 'Nutrition', 'Ophthalmology', 'Optometry', 'Orthopedics', + 'Podiatry', 'PrimaryCare', 'SpecialtyCare', + 'UrgentCare', 'Urology', 'WomensHealth', 'NORMAL'] + before do Flipper.enable('va_online_scheduling') sign_in_as(current_user) @@ -194,12 +242,17 @@ VCR.use_cassette('vaos/v2/appointments/get_appointments_200_booked_cerner_with_color1_location', match_requests_on: %i[method path query], allow_playback_repeats: true) do allow(Rails.logger).to receive(:info).at_least(:once) + allow_any_instance_of(VAOS::V2::AppointmentsController).to receive( + :get_facility_memoized + ).and_return(mock_appt_location_openstruct) get '/vaos/v2/appointments?_include=facilities,clinics', params:, headers: inflection_header data = JSON.parse(response.body)['data'] expect(response).to have_http_status(:ok) expect(response.body).to be_a(String) expect(data.size).to eq(2) - expect(data[0]['attributes']['location']).to eq(mock_facility) + expect(data[0]['attributes']['location']['attributes'].to_json).to eq( + mock_appt_location_openstruct.table.to_json + ) expect(Rails.logger).to have_received(:info).with("Details for Cerner 'COL OR 1' Appointment", any_args).at_least(:once) expect(response).to match_camelized_response_schema('vaos/v2/appointments', { strict: false }) @@ -598,5 +651,89 @@ end end end + + describe 'extract_all_values' do + context 'when processing an array, hash, or openstruct' do + let(:array1) { ['a', 'b', 'c', %w[100 200 300]] } + + let(:hash1) { { a: '100', b: '200', c: '300' } } + + let(:os1) do + OpenStruct.new({ 'a' => '100', 'b' => '200', 'c' => '300', 'd' => 400 }) + end + + it 'returns an array of values from an array' do + expect(subject.send(:extract_all_values, array1)).to eq(%w[a b c 100 200 300]) + end + + it 'returns an array of values from a hash' do + expect(subject.send(:extract_all_values, hash1)).to eq(%w[100 200 300]) + end + + it 'returns an array of values from a simple openstruct' do + expect(subject.send(:extract_all_values, os1)).to eq(['100', '200', '300', 400]) + end + + it 'returns an array of values from a nested openstruct' do + expect(subject.send(:extract_all_values, + mock_appt_location_openstruct)).to eq(mock_appt_location_extracted_values) + end + end + + context 'when processing input that is not an array, hash, or openstruct' do + it 'returns input object in an array' do + expect(subject.send(:extract_all_values, 'Simple String Input')).to eq(['Simple String Input']) + end + + it 'returns input object in an array (nil)' do + expect(subject.send(:extract_all_values, nil)).to eq([nil]) + end + end + end + + describe 'contains_substring' do + context 'when checking an input array that contains a given substring' do + it 'returns true' do + expect(subject.send(:contains_substring, ['given string', 'another string', 100], 'given string')).to be(true) + end + end + + context 'when checking an input array that does not contain a given substring' do + it 'returns false' do + expect(subject.send(:contains_substring, ['given string', 'another string', 100], + 'different string')).to be(false) + end + end + + context 'when checking a non-array and a string' do + it 'returns false' do + expect(subject.send(:contains_substring, 'given string', 'given string')).to be(false) + end + end + + context 'when checking nil and a string' do + it 'returns false' do + expect(subject.send(:contains_substring, nil, 'some string')).to be(false) + end + end + + context 'when checking an array and a non-string' do + it 'returns false' do + expect(subject.send(:contains_substring, ['given string', 'another string', 100], 100)).to be(false) + end + end + + context 'when the input array contains nil' do + it 'returns false' do + expect(subject.send(:contains_substring, [nil], 'some string')).to be(false) + end + end + + context 'when the input array is empty' do + it 'returns false' do + expect(subject.send(:contains_substring, [], 'some string')).to be(false) + end + end + end end end From 2b073e4b4872fec5d734c6b8240be12a114e6698 Mon Sep 17 00:00:00 2001 From: jvcAdHoc <144135615+jvcAdHoc@users.noreply.github.com> Date: Mon, 8 Apr 2024 08:02:09 -0400 Subject: [PATCH 04/10] get organization name from db and fix claimant sigs on 2122a (#16196) --- .../claims_api/v2/poa_form_builder_job.rb | 41 ++++-- .../swagger/claims_api/v2/dev/swagger.json | 20 --- .../claims_api/v2/production/swagger.json | 20 --- .../claims_api/config/schemas/v2/2122.json | 5 - .../claims_api/config/schemas/v2/2122a.json | 5 - .../fixtures/21-22/v2/signed_filled_final.pdf | Bin 365293 -> 365300 bytes .../21-22A/v2/signed_filled_final.pdf | Bin 334751 -> 334758 bytes ...gned_filled_final_other_service_branch.pdf | Bin 0 -> 334865 bytes .../v2/poa_pdf_constructor/individual_spec.rb | 25 ++-- .../poa_pdf_constructor/organization_spec.rb | 15 +- .../sidekiq/v2/poa_form_builder_job_spec.rb | 134 +++++++----------- 11 files changed, 109 insertions(+), 156 deletions(-) create mode 100644 modules/claims_api/spec/fixtures/21-22A/v2/signed_filled_final_other_service_branch.pdf diff --git a/modules/claims_api/app/sidekiq/claims_api/v2/poa_form_builder_job.rb b/modules/claims_api/app/sidekiq/claims_api/v2/poa_form_builder_job.rb index 4564b5b154b..2c0c25e9aa0 100644 --- a/modules/claims_api/app/sidekiq/claims_api/v2/poa_form_builder_job.rb +++ b/modules/claims_api/app/sidekiq/claims_api/v2/poa_form_builder_job.rb @@ -45,15 +45,8 @@ def pdf_constructor(form_number) # # @return [Hash] All data to be inserted into pdf def data(power_of_attorney, form_number, rep) - res = power_of_attorney - .form_data.deep_merge({ - 'veteran' => { - 'firstName' => power_of_attorney.auth_headers['va_eauth_firstName'], - 'lastName' => power_of_attorney.auth_headers['va_eauth_lastName'], - 'ssn' => power_of_attorney.auth_headers['va_eauth_pnid'], - 'birthdate' => power_of_attorney.auth_headers['va_eauth_birthdate'] - } - }) + res = power_of_attorney.form_data + res.deep_merge!(veteran_attributes(power_of_attorney)) signatures = if form_number == '2122A' individual_signatures(power_of_attorney, rep) @@ -65,10 +58,24 @@ def data(power_of_attorney, form_number, rep) 'firstName' => rep.first_name, 'lastName' => rep.last_name } }) + + res.deep_merge!(organization_name(power_of_attorney)) if form_number == '2122' + res.merge!({ 'text_signatures' => signatures }) res end + def veteran_attributes(power_of_attorney) + { + 'veteran' => { + 'firstName' => power_of_attorney.auth_headers['va_eauth_firstName'], + 'lastName' => power_of_attorney.auth_headers['va_eauth_lastName'], + 'ssn' => power_of_attorney.auth_headers['va_eauth_pnid'], + 'birthdate' => power_of_attorney.auth_headers['va_eauth_birthdate'] + } + } + end + def organization_signatures(power_of_attorney, rep) first_name, last_name = veteran_or_claimant_signature(power_of_attorney) { @@ -89,11 +96,11 @@ def organization_signatures(power_of_attorney, rep) end def individual_signatures(power_of_attorney, rep) + first_name, last_name = veteran_or_claimant_signature(power_of_attorney) { 'page2' => [ { - 'signature' => "#{power_of_attorney.auth_headers['va_eauth_firstName']} " \ - "#{power_of_attorney.auth_headers['va_eauth_lastName']} - signed via api.va.gov", + 'signature' => "#{first_name} #{last_name} - signed via api.va.gov", 'x' => 35, 'y' => 306 }, @@ -117,6 +124,18 @@ def veteran_or_claimant_signature(power_of_attorney) end [first_name, last_name] end + + def organization_name(power_of_attorney) + poa_code = power_of_attorney.form_data.dig('serviceOrganization', 'poaCode') + + name = ::Veteran::Service::Organization.find_by(poa: poa_code).name + + { + 'serviceOrganization' => { + 'organizationName' => name + } + } + end end end end diff --git a/modules/claims_api/app/swagger/claims_api/v2/dev/swagger.json b/modules/claims_api/app/swagger/claims_api/v2/dev/swagger.json index 6e76306fc95..dcc849f41f8 100644 --- a/modules/claims_api/app/swagger/claims_api/v2/dev/swagger.json +++ b/modules/claims_api/app/swagger/claims_api/v2/dev/swagger.json @@ -9198,11 +9198,6 @@ "example": "6789" } } - }, - "organizationName": { - "description": "Name of the service organization.", - "type": "string", - "example": "I help vets LLC." } } }, @@ -9832,11 +9827,6 @@ "type": "string", "example": "A1Q" }, - "organizationName": { - "description": "Name of the service organization.", - "type": "string", - "example": "I help vets LLC." - }, "registrationNumber": { "description": "Registration Number of representative.", "type": "string", @@ -10526,11 +10516,6 @@ "example": "6789" } } - }, - "organizationName": { - "description": "Name of the service organization.", - "type": "string", - "example": "I help vets LLC." } } }, @@ -11151,11 +11136,6 @@ "type": "string", "example": "A1Q" }, - "organizationName": { - "description": "Name of the service organization.", - "type": "string", - "example": "I help vets LLC." - }, "registrationNumber": { "description": "Registration Number of representative.", "type": "string", diff --git a/modules/claims_api/app/swagger/claims_api/v2/production/swagger.json b/modules/claims_api/app/swagger/claims_api/v2/production/swagger.json index 5095d8c17b5..0d7a7c009b1 100644 --- a/modules/claims_api/app/swagger/claims_api/v2/production/swagger.json +++ b/modules/claims_api/app/swagger/claims_api/v2/production/swagger.json @@ -9198,11 +9198,6 @@ "example": "6789" } } - }, - "organizationName": { - "description": "Name of the service organization.", - "type": "string", - "example": "I help vets LLC." } } }, @@ -9832,11 +9827,6 @@ "type": "string", "example": "A1Q" }, - "organizationName": { - "description": "Name of the service organization.", - "type": "string", - "example": "I help vets LLC." - }, "registrationNumber": { "description": "Registration Number of representative.", "type": "string", @@ -10526,11 +10516,6 @@ "example": "6789" } } - }, - "organizationName": { - "description": "Name of the service organization.", - "type": "string", - "example": "I help vets LLC." } } }, @@ -11151,11 +11136,6 @@ "type": "string", "example": "A1Q" }, - "organizationName": { - "description": "Name of the service organization.", - "type": "string", - "example": "I help vets LLC." - }, "registrationNumber": { "description": "Registration Number of representative.", "type": "string", diff --git a/modules/claims_api/config/schemas/v2/2122.json b/modules/claims_api/config/schemas/v2/2122.json index 258542e2b93..9ecceb725a2 100644 --- a/modules/claims_api/config/schemas/v2/2122.json +++ b/modules/claims_api/config/schemas/v2/2122.json @@ -219,11 +219,6 @@ "type": "string", "example": "A1Q" }, - "organizationName": { - "description": "Name of the service organization.", - "type": "string", - "example": "I help vets LLC." - }, "registrationNumber": { "description": "Registration Number of representative.", "type": "string", diff --git a/modules/claims_api/config/schemas/v2/2122a.json b/modules/claims_api/config/schemas/v2/2122a.json index 02cfe95b1a9..aae8b1469a4 100644 --- a/modules/claims_api/config/schemas/v2/2122a.json +++ b/modules/claims_api/config/schemas/v2/2122a.json @@ -288,11 +288,6 @@ "example": "6789" } } - }, - "organizationName": { - "description": "Name of the service organization.", - "type": "string", - "example": "I help vets LLC." } } }, diff --git a/modules/claims_api/spec/fixtures/21-22/v2/signed_filled_final.pdf b/modules/claims_api/spec/fixtures/21-22/v2/signed_filled_final.pdf index a7802967ec29c9f0da7795d7aa9acede1cac2bde..ee31a77050346f428e045b9c191f45acdc146baa 100644 GIT binary patch delta 2406 zcmZuzOKMb65XCl)5O5@9+#;FR|JDU{ASgJ>B0^@OOLz)GKnSRlH*%N-2!X7}1qf+y z0oKEQuhUhg2@Qv;TXn0>Ik$gbpZvK#`S|(4&Fb5B4tVe zAY#3-U6{Vy5Nw{e%e(C={vY1nZI3R;L2(1q-{$@1c>2c9tWYrPT(H(DV}iXEOub+V z@Gp0`S6ImBg-~zYk7WM=4!*!Gq+u1b|U$IBqz$$2(ck26Jef$k=6sLQz^n+ z7-1ZrT!XvMYaez(BNLW#V60>gT;de8#HrL=ZT)c6z>#T5E8~Z&_4-9B!eG+VN&<6A z$qWtM$Ddche#K{5jBjwK6^1Jo>_z`W%H5sCAC z5QE66!H}LODsr$XQFZ`E4l3tlZjuLyf|+8BLHANbT6VzT7t|UmO%jhI&@It~vB7_^ zqEbfJIvID&4TiNX>zsMa1e8smC9vE~SWuaQVBN7WV0u_MW|jHzibDc5P(1k!gvu&0 zMMZu5^tJkNgopX3t%`w^o{aOO$YN5q9}n;%{+*^-8puu;dmc+uDn(kjYHlVT-b^uR z{qSLfxVP)Ft);MQ(nauCI?Sq?4L&f0Qlv|EqKMO?(sfx9Pv?*tRI3yQ+)FHk_w8BR-2T3JwRzZ{zkc~yR9RV+K$?=^ zy9oiNw|e)uJ&*6RUys|1yUh@pVE#;BrmOiEomseG)~#TzYsLf}3Z}hc?z`A=l31y= z9IUEdur8P}Ln=j^SSh-h_0!lfzqq;3DL7+}QmS@=RWJYn7^b2Fi{SNr#8hLM4M$2$ z%pPLQN*tIWR;(B5e=anmlGvOQ3#5X&&pQ^~12oOS8pcWVQwXvIA7ia(Oxl<-GjR&m zG7TW@X62v@=c)~$6l2gR7iiEa%M|vgv1sfgQEe3cQZTI-l4D82T>N2dwLtd1$UgRM zM<&eW!Z7f1@NiB+$~l!9tF5o81_o72oihR~dNP>wBuQYMQZPfqUNOu49<)G9rVdPy zr|7>Erw7FY!X9SewnZPu6Q()Z=_l@1uV~qKcUxH{_Fv3=nkY)ojGSyga zoLL70cKKq|R%Ps33F#g3<73)|jB6DM zD6at)pq^`pG4%BI*#yfhVZkb`FhJThv81TjLL?YT#fbDYb0D_j%8ySb3{VQ2u|y$t zV4U-Q@Xy{pV!$P_abB7%(dJnlv2mOS`!;83z?s(A<5-e3%}Xv~J@2F$TQ9yC#L{&q zUA+HDf7fGoEU$AYoh1%lUgAM^rr)J>YV_plZ^z6(2e|)Fa4aU&ET&hmJdGnZc6dsx m7z3|h+A@RDyKnL+XN?(_ovs#7-u(P=`SCej-Q2wY^x+>QciZ^@ diff --git a/modules/claims_api/spec/fixtures/21-22A/v2/signed_filled_final.pdf b/modules/claims_api/spec/fixtures/21-22A/v2/signed_filled_final.pdf index 859dd3cc56f0ba7a10de756cd42cfe21de383cda..0f6615ce398f3c8a85bc8ab55e21f06a04b25fda 100644 GIT binary patch delta 2335 zcmZWrJ8o1#5R?rTk|RDALLym&oKOF!B|`=&8401~lmL-GGLEnz87DyURX6|_Kq9jP zdd*_*R=?HLO0{oZb=6e&?6=F4@0TZEejNO~I&@w?`g8Ba`s(W7whPeb{GPq+ZH*1&O+9jyz(WF+pQMO`SvaNNWSm1OUyMl{<(2QuN%{d6G zp2=jOZl+E&JclO|=g7HBT)fOGi-9_3GpBu$!lvMJ>SEvmtGnP@4dS+TlFS>90?d!YnycMHko7UT~)|gWqQiVlA zj${})Y)N5y>(;UzoCVGaw#snEq!%^^Bwa=j_IqK5Eh}S=0C7u!V$GU4wN;(gFe(-p zG(yzItx!#BSSz=;0Dg5=jO$uaHr*h^p5>l2FZEw30k=ObSiP8;+erpg_eb zR9JX>VfN%vN=t2FcnApP+zZ*}5GXLQp@l2A&{u`Eo-AxS?gNh`3<{U6D1=EDZ6p*p z41~)X3=azN5VH3If+zUgd4w$8c>*C<@h-{2{w6b- znd*U$f#Q2p-PKk7=Fi>b@4L&Nf6xBipS$1wcy<2n_Wu6t{hM#*uCC@nHeHObH%zqo z;J>aP&gwa@=h@x$!}FWh3(pO$pUwBp#rn-k#-m}=vti+Z7>h{5e0alBb&D-W#3I~Y zl%a%&m84@P?W|5}%~{e(Bg@*cb39gaRLsz5hsT&m62l2Qjyaox5yV(@q|kyAM%qOA zlSUwM^$|cUVrnPd5sA3Fohn#Z$nL#mKX-v1;uiL3JZx- z`4kR27d2vHtz%b7Bz9xPqP?=vu_3x3iRHlVO2C22xQ91v$f>zXejnBgoW%RFFT2=@ zPoq6}z^1qEqRYS5($tE`rfMq4Pm5$yAaSM#s*suJ4<*uFj-QfKSR^DzsrCZMU)V6( zRQ~F-H{qIW%zI&mhAV7L=uWE^bbn#fTQNolvo4QYua=(SmMUyUtJ-rbbXHC_wAKIV2bre9qEY6yZgpMr zNWv9Q@QkvK)*Nfj!{S=DmyWV?lZz{M*d5mjMp=0zZcOFiJdo@-!f+ueFEQ~JQ_gNe zPHhe@4DW+F8_jUMMhwOzwHj8nR{fvkFY{wQRVW-sQfr3LGs227R$)^diSRt$3)}hE zi`^h18jYlG7#xYz25uyhEuNx9gDU7(Ju<`NoJ14)@J2@c{T1Gl{xOXq04;b(R#|U5m*yx+X@$kUW%h}r)IvE(* z11J=n^xXi0Hdgv();&mmDQGTO$Cypq`_irHu(tte%OH1Avho zxI+Psp5MUUM#RS63c&o&Tt?3dxXSWt@-Kd%)jzm}6aXOjA~x2JzXoDPmd*f1X3l>Y zsOt&o17{q6IM54Q8`v0{S)2UY3p|~WjlthXjLiSQ07?RW(+lwfDCmE&V*n@_138!g zfQJ_`GqN;v0BC6a`+y*Xe*pb+z+cGW=q2==^%M>4&1@Y3jEsL#{Lu^RzsUHlt!*5E zd>Q}I1#mkX2(%U)y`rPNlYyh0p1qMZa03Gzy@HJ+Nb{hPk%Ntsy#Y{1|AP*clvsiE z|EP^#Nr?qG0hs`(U?nAH;Dq7Ngb4sN+Mfv{aPmtgXd44?@>lO5=P*z-as+75gB*fh z$;j0aKre0uw4K23UhsD>4g{(@Q*oE&6t7W8GhRnI0MRO_zea)0|5YeArKmH z214)~8*s(|;QVbxRWnWi=Wm>v^$ z3TI*gaQv0d#0=p0k9Z~k$6xtOi~x?m0GJp6?7tC+TLH&^0Wfj`*#80mx)b|f06?c< z{|f-%Ms(_IZ!1fmbGaG>IKL{8A zY=03jvjW)uIt(a${)q!ne1oDKXP$=vaT98R&A-Muuj30yeGy4F)<;5(2r=p8*>q)1M(b=bs^v zM$q2I_Wv2lzfurL{-22d6S}Ow&i{WKvH$BhW&LdeP?)m()-xzdS$=C)Nr?%-^4pq9 zN{j%Ozxx>gzq1@j+y8GOloRkfK>}lt1MoWu0>|tCpt*ks6dM3&;J?8IjOpKF7634! ze~*~~zm^`TP$7s0Xe8A^P9-fB67; zfcX4sK%ShyqRbBTY&KvK0QG;yY(NkBqZnpj^#t(;%|ZJ(f!XWVUeNr{J|HbCFo*w} z&##00n<)sypF^<%OC^Zu-@^fkS%8c|OhEm=pZ}!+u7SoN<$(76Iy9*NLjwf*i|+Rt zNcJDa{Nf3`LNEbqF*C4d1@%BB{=)Fb3Lqr|+b`gM2tf@0c>v`4cLE{>ofXvoYX7zq z=vcp5|Dya4)o*|xV4xi!P@wT2tNxMsrw4%rjX@09S%A`h0|Z&`&oj_E3+Oou@bI9$ zpaxP9@Gim1^3NDF|L6HX{MdoA|1=Q&A0z#D|JQ<`qyD>rT;kvDFCox6f86Fz4+8sZ z3_R%HeZR*b_xWo{&>{Y-f%b!x^xqBS1^;fp=zd%Mzj=TZ^LHJz=T8I4`iJI!xcY)+RWJeHCV(jjv`EX$!~sl7mU<=*0A`kd(v!fi zYX~hX@Qwpo1^{2DKyJm#2CNjI3?!mwWoGFHp!k&v0l-`c_>~MnZzG^pGfN}TJ^G&< z4SE84`2hUy@+W8`Fh3hP8khp;Wq>bTdY1q2Q~3uqI|DFziUVKM%nbOgO)P)CZzwt% zS$zb)PXUkjPbLR3`A>2MUgCcrnT3`8-|t7i!2Qt@5U(TfJrkq@Md;RU6YZM{m%?^CuV1412J*{0@bsE6ASfBaPy3q#U1b&Z@v7$Ja334a4{xz(XW8j zhiH{sZ-1>#)!PTtIl-?B>dt3jmKYG}xuz}I9{bLxKKnczhkrti#+ zSI?6fHdSGCm3)u!*Ga+b&ij|I}OokB4 zH|~ditDc;uxj*aoo6i#uAvZU&csw-AH+71PY+s#=&N_=@ zrlS%4eIH}exGDV53KpXdn$DZgca7W~gGQ**)e56bWE1!DMVRAV*(g_AYD;jT3Ze~> z4)2R^X9|CvIm~P^9$E=@L_wu3YmW94G~%koRbsz%O8e?px9|>;ddussU?SnV=SJy8 z=VNZqsjBa*Tt4?VK92kMY7Kin-p|4}K3?;ir5SDRFDY1grGKRWH7N;zN|h z0nmkrI9xPdw;^9}az&!ezn-tk3_hPcgvOG|CZ{l4-A61X*BFl{r?T5T`vFg2=j#^WlJl{ZnM=mLw z{=wm=CeD}+MThJD#T(7iO4SOL6<;=h1`Ue`kGM`S>KVafO4-Tj&>pcbv0Eg>;G?T0VTI2;y+!NSv4oxEl!H5VUab zW6_ENDG1`rC6MzAr!@9+Bb4i@g(aHwV@bv>s75suNPNU*!kO)*p=Hw ziW}(1HVlnpn8LA97C;x=NTo~L6$CO!C&?zs2bIXbS0-ZRE6e|(+%qF$4$mqfEnhQj z=@gTaJN7ZL7;n1lK-;N9JulQP*5(D&9WfU}u97t6^7MB< zmHeP_a|;p+@+TGQ*I2aFiQ~oT>sV_iFCOe=Ib||vWMfT+jV=_SgAa19U)`tQ zhZCcuDF}oK;Ag{rgQJD@DwtM4kT7|7k64KPPIA5&gE}$(aF}^JXl^C+lcQjHHlM9O zV}Fv>sMpAlifxG%oL3L!kLlAl|?CgpF_Z8TB&_7Wu9f z--FQLD?aO|dofPvW^=3LJyxhC))QNYX3nJ&-;(MQ#SUK2C=x&NDReu3tK`o2Wu{M7 z?QAxwiQm5O=s7er%{#Ky53vmuRIO)UYHj5bzO~1z0hf1{i6z6b?9PFzh5dt0gL*e+@xq-stC#3X;FU}8 zc$w_2(|Xam({Vh07r?mMp7QbqW#Gk{^PP7M%Va>jWC#^o3YU$Ja=OJCKf@oX0)I!*FX9>L zx|KsD@x>RNBeaGi=sQOM(U*`*j$kH?99}{LGP(_jVMZ`y-5x_yJwVKtFbo6%aA*VA zDF%!l2K;?&zb}nZ2oe1h5nZaD0a~h`q$1E8u3dS0Nsh94QbciM#3Y%HigNC1eKDur zD)sP7aZUAzhnv0L{;oikWwa%7vc;cKoAz<-mG+c`x^U@`l!Ym6S?+bMADaTPRnE8C zp!zAcN329sIO+W3+5qP%x&>)%rGTFk+81O*7w>qNdXcwe!E2*_DgtKm@VWS4_E885 zNF3w*i!j;rm}d%fxkQAOf)5m6gQo1L`sr`qG}xwMFhzfna`czjBaNS;eVh0y)Fi4?Il>sm*fd5v`3QN+~)~!a3dSvnCA)JwI>|kytC(^ zUkg(G7VgSOzwW6${Hiq~@e)pZsMM7;wN8A&P`k&%ji6!|vGohQ8@kO7ZEJkPxwBOm zTfEDe%t~L28}jM4S8FEn8UKgg;5%5NZ3E5Tfu>2e2q6sHcJ1RxNPV$A25FTif&iZGr8hSxxN35r5?4;u0(qm`yEVsU&9^J z>bA!t$?7i5W3<&{$V*SuK9g2cMLqvLZkm{!&ad&5{5c?>z-qtVhZImAydy>x6Z&xJQ+8?bAA z=98UNyk>dI&L}t8OLkAlDC3<2%Ds)>Cx`t&+TCGGbIWr}V9S0>YAa?Xr{TcLy=5hvcZU0#u1&+I;AXGQ zJ@dI{r2=_xoYN1z36tE8snC|H(2mQ*mdwP?YHSC8Y`b+YXHVaf$cunLowlKW?8#vHtd0nt(TQzb7_rymC_%q9wcSdTswz8}dsD}GR}os=Wxt^)zxTC--< zp#!A#An%2&XYlF8d+XlFrq^SAZX85dYXX{q;dZa-`ivU!Rn{algG%ipDOprTl^qag zH@F;@mpZRM+;&HaCYT2rR~b(Uv?Mc)fB+? zVxU0@@%uv{!a|iRB4hKMb@>K?mGHyPWPeg5G8ahu-f0GV9t{>M2Ok5#Q2@M|(*May zzVjwohNO_ukW)H~%}@|&OMq}okbr`Ly@`^2^U~9g{=&<vS!hRB0jHq=x z9zXJPjEsI}SIqHsw^m=Qb2ROKfmVN&b6o8KJXds^b*o3z(>1Nu;G1)B%ymJ}z^EtZ zTd2$pW}1F9nm#6)U^NB}=xW@LYYsTW2dbg;hKOp4{X?!_b6`24nE1(JvM9tA@?M7y zz9W+zvzbb(~loMQ99VkOF1o6lDMt zL*=bga9)&4Hj-G0}A)I7>A2q%N+2 zpx5|~*QSQUz!K}tsMlpD#@+D~lDB9_teYue^1x20n|VgEzM{T_v|2QN9#k>EdNiRS zR5Cv%V(vPNzsQsYOPI)a?0cNZd^?s5?ZVeAUskfj9|KqN8uoUt;N4Tb#XE9zzH?vU zxhHx{o_1*_!CdNr(*z1vVkdMesP@b1aenoUuY~*9gR2UEsQdoubEX|*;u(4C7xr^w z2kvO&uQ(?Csk7gp=z=_e`Rj~rWsLh)ab>8*5dE_5E|}Bw*{t2~fj@3!&F>BiBa~7< zC5g^BY+k=Si5@dNUq4?Jk2-`_KX{JPIsCnT=B?(V@}rg~Z9D2}sNjx=!yG<);Wsx| ziqD~n8)=QC0Ky;4aY zk%Qir10T;u)8>m0ffe;dd23D`6z5i5?kQX!Q)aX{*WPwS!97x5-Eu_xFpy&0C>EQ$ zrOL_QPPv+JI(Q>g?x`b_Kr~p)NR&!!(idj(IgK1^P}n|H6SJm9**=mY`fv-nNzFR3 zWlP(Q?^*a++MBW?2FAeZDuCy0RH*w!AP))spn#heOH9MImKtg1AetI+X`GyTRdq>9 zN%=;fR(z3yQi_BM4wd4}M@}l)8F?pVuNgTO#Yknv8G$;bGG&b!Z6}N(uHvzh@Pm@( z;**l#gJSpMm6E7~();3Pb6?yd=;AK(5Zsba#p`~#B4-~~US50xsa0KH9z-LR45nSL zKc)2QxPB&of8kk?qViqxN}&~jesSdbq794xY}i7mxcGv9Z%if zW*yZq#|=NZ9|Sx7u#x}>8~%a1jtq2CaNoPXGO&*#9|lEs8|#&x%~U$gky+x^!!HIC zbbr<>taO-rcZBN<-vWbvOzbg7SS5PQ=&_VhNq$V}v5-+^a?I(mqFsq~{LW(@bAkG2 zNt4X!FWRO{*Za{Ib)x~B4x^4L8X8Qin!c#|8Z;}H0P(c{slD5T) zQoz(jO9}qD%TA)V*LTr1RbAe~T(IK14j_183UB)JvxN9`M$EqS0iTV$=z&mrF?_xp zRldB+fyi<(OunM*fpD8w-*oW30`Gw=jT0CS8D#BA{r7D_tmcA80%wl_FeYhU9g?z0G~hy~%w@o!xYW^DX!8 zijy`gsJ5t}qu>yXr%Q*x5vtxfZxhum1IKoHJvdeI8}Y!sgqKmf{c4kMi7)rP)%)pQ zMP@i+ew*16QQ#$!Hs7cgKXDRHUA)wkwJe)PUGmWMy;W9ZoOG%!r&R&1KB`r|Rc(5E z7Qxj!FJYbUGWXnGkl|)nUXm}qv{wYj1wKi`)9R-)g*ndbn zDiRb0I96I02s%0tl=L`akwgwqq~|C)r6A3saw#-0Xe)kGVrP|--o(zFtWPPkwwOyv z2sf`otn81et4}Di(y6Lgn6)I(nEg?6Z3VeF!FHj%M?p|#;P_Q$_PrDRvc}D%9hdga zjFuDover$d$C0*B%lJtH%n`rGAYr|z<>&Y2QS+N@vpe(XKl8pdysDqToY(gl&Zsvz zQq$0vv`VIJ*tHZcyLU(163EE-%3Q=5Q^0bWgC5mzV5up3w!Tze7%Qz( zYbets)mU$mD*Av_bGda<>S(fUfi%T;G6koLe)r9!55!U#6g$!yr+6#QRGLAlZ;bQR zj6SBal8t<2Jsfqf>9S;*H;$dRtWPR4PMxPiH=@3?xl?sc&@v2@iZ^S{EH*e8mbw$~ ztn$??WC4t`ut`fPqMQ0lRhk(KNI9UFBnY6-T=$t%s0c!W-9T4JXe&P}-4x>@c0J3V zIH}=*rM7AMcnj##u>=5b?{wG@CP9Ipu@NCVd(7(zd53g@SxAd|rpn0z`5E%~xmw|h zzlyPzE^{=7r|YtP;zJ(%1lU8W;Ai^kTQ)b}23fNX@i|bd)q}h~SZ*&&Ysq2)eQG(t z6Piy$6&{ZPEai-ym2s|Zn2@Z~lcQT=ILNP3#>$9(e*(V08AgvmX^jtmi!BfX8=hI0 zz;bh6BQ(<>L$s*}fVvWNu8L@3kd(H063BL-ANgeM=YbUB(-GOWg7qas=EP=#u!Lvt zGuZ38?01W*b7T08{!WbY&c0w`Yc-$v$c_^9@C~q3JDUi)_8T>z8@V}Bf1DAH1|D*} zx)jQ4E+TCDo`t!a*!hJnkYF_0vvFXBOONO-n|J6K33i4Ujq5_(L66XLAf9{Zqc1ch zW6=9dUGJ4>gKevykF4WatLwbjpGfRJiJ>_tJ=V;hc$<#l)SD1dP7w8XHq7BKZUR

lYaeFcKwdaDD5CtPM1KSgk= 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 literal 0 HcmV?d00001 diff --git a/modules/claims_api/spec/lib/claims_api/v2/poa_pdf_constructor/individual_spec.rb b/modules/claims_api/spec/lib/claims_api/v2/poa_pdf_constructor/individual_spec.rb index 0c906d3defa..aafa7a5aae3 100644 --- a/modules/claims_api/spec/lib/claims_api/v2/poa_pdf_constructor/individual_spec.rb +++ b/modules/claims_api/spec/lib/claims_api/v2/poa_pdf_constructor/individual_spec.rb @@ -47,9 +47,8 @@ }, representative: { poaCode: 'A1Q', + registrationNumber: '1234', type: 'ATTORNEY', - firstName: 'Bob', - lastName: 'Law', address: { addressLine1: '2719 Hyperion Ave', city: 'Los Angeles', @@ -68,7 +67,8 @@ other_service_branch_temp.form_data = { veteran: { serviceNumber: '987654321', - otherServiceBranch: 'Air National Guard', + serviceBranch: 'OTHER', + serviceBranchOther: 'Air National Guard', address: { addressLine1: '2719 Hyperion Ave', city: 'Los Angeles', @@ -103,8 +103,7 @@ representative: { poaCode: 'A1Q', type: 'ATTORNEY', - firstName: 'Bob', - lastName: 'Law', + registrationNumber: '1234', address: { addressLine1: '2719 Hyperion Ave', city: 'Los Angeles', @@ -138,8 +137,7 @@ 'text_signatures' => { 'page2' => [ { - 'signature' => "#{power_of_attorney.auth_headers['va_eauth_firstName']} " \ - "#{power_of_attorney.auth_headers['va_eauth_lastName']} - signed via api.va.gov", + 'signature' => 'Lillian Disney - signed via api.va.gov', 'x' => 35, 'y' => 306 }, @@ -149,6 +147,10 @@ 'y' => 200 } ] + }, + 'representative' => { + 'firstName' => 'Bob', + 'lastName' => 'Law' } } ) @@ -173,8 +175,7 @@ 'text_signatures' => { 'page2' => [ { - 'signature' => "#{power_of_attorney.auth_headers['va_eauth_firstName']} " \ - "#{power_of_attorney.auth_headers['va_eauth_lastName']} - signed via api.va.gov", + 'signature' => 'Lillian Disney - signed via api.va.gov', 'x' => 35, 'y' => 306 }, @@ -184,13 +185,17 @@ 'y' => 200 } ] + }, + 'representative' => { + 'firstName' => 'Bob', + 'lastName' => 'Law' } } ) constructor = ClaimsApi::V2::PoaPdfConstructor::Individual.new expected_pdf = Rails.root.join('modules', 'claims_api', 'spec', 'fixtures', '21-22A', 'v2', - 'signed_filled_final.pdf') + 'signed_filled_final_other_service_branch.pdf') generated_pdf = constructor.construct(data, id: power_of_attorney.id) expect(generated_pdf).to match_pdf_content_of(expected_pdf) end diff --git a/modules/claims_api/spec/lib/claims_api/v2/poa_pdf_constructor/organization_spec.rb b/modules/claims_api/spec/lib/claims_api/v2/poa_pdf_constructor/organization_spec.rb index 9007da1d420..1a4b7f60b7d 100644 --- a/modules/claims_api/spec/lib/claims_api/v2/poa_pdf_constructor/organization_spec.rb +++ b/modules/claims_api/spec/lib/claims_api/v2/poa_pdf_constructor/organization_spec.rb @@ -46,9 +46,7 @@ }, serviceOrganization: { poaCode: '456', - firstName: 'Bob', - lastName: 'Representative', - organizationName: 'I Help Vets LLC', + registrationNumber: '1234', address: { addressLine1: '2719 Hyperion Ave', city: 'Los Angeles', @@ -83,8 +81,7 @@ 'text_signatures' => { 'page2' => [ { - 'signature' => "#{power_of_attorney.auth_headers['va_eauth_firstName']} " \ - "#{power_of_attorney.auth_headers['va_eauth_lastName']} - signed via api.va.gov", + 'signature' => 'Lillian Disney - signed via api.va.gov', 'x' => 35, 'y' => 240 }, @@ -94,7 +91,13 @@ 'y' => 200 } ] - } + }, + 'serviceOrganization' => + { + 'firstName' => 'Bob', + 'lastName' => 'Representative', + 'organizationName' => 'I Help Vets LLC' + } } ) diff --git a/modules/claims_api/spec/sidekiq/v2/poa_form_builder_job_spec.rb b/modules/claims_api/spec/sidekiq/v2/poa_form_builder_job_spec.rb index 5e2bee573bb..29d84f0475e 100644 --- a/modules/claims_api/spec/sidekiq/v2/poa_form_builder_job_spec.rb +++ b/modules/claims_api/spec/sidekiq/v2/poa_form_builder_job_spec.rb @@ -8,7 +8,10 @@ let(:power_of_attorney) { create(:power_of_attorney, :with_full_headers) } let(:poa_code) { 'ABC' } - let(:rep) { create(:representative, first_name: 'Bob', last_name: 'Representative') } + let(:rep) do + create(:representative, representative_id: '1234', poa_codes: [poa_code], first_name: 'Bob', + last_name: 'Representative') + end before do Sidekiq::Job.clear_all @@ -23,45 +26,27 @@ consentLimits: %w[DRUG_ABUSE SICKLE_CELL], veteran: { address: { - numberAndStreet: '2719 Hyperion Ave', + addressLine1: '2719 Hyperion Ave', city: 'Los Angeles', - state: 'CA', + stateCode: 'CA', country: 'US', - zipFirstFive: '92264' + zipCode: '92264' }, phone: { areaCode: '555', phoneNumber: '5551337' } }, - claimant: { - claimantId: '1012830872V584140', - email: 'lillian@disney.com', - relationship: 'Spouse', - address: { - numberAndStreet: '2688 S Camino Real', - city: 'Palm Springs', - state: 'CA', - country: 'US', - zipFirstFive: '92264' - }, - phone: { - areaCode: '555', - phoneNumber: '5551337' - }, - firstName: 'JESSE', - lastName: 'GRAY' - }, representative: { poaCode: poa_code.to_s, + registrationNumber: '1234', type: 'ATTORNEY', - organizationName: 'I Help Vets LLC', address: { - numberAndStreet: '2719 Hyperion Ave', + addressLine1: '2719 Hyperion Ave', city: 'Los Angeles', - state: 'CA', + stateCode: 'CA', country: 'US', - zipFirstFive: '92264' + zipCode: '92264' } } } @@ -139,15 +124,15 @@ power_of_attorney.form_data = { recordConsent: true, consentAddressChange: true, - consentLimits: ['DRUG ABUSE', 'SICKLE CELL'], + consentLimits: %w[DRUG_ABUSE SICKLE_CELL], veteran: { serviceBranch: 'ARMY', address: { - numberAndStreet: '2719 Hyperion Ave', + addressLine1: '2719 Hyperion Ave', city: 'Los Angeles', - state: 'CA', + stateCode: 'CA', country: 'US', - zipFirstFive: '92264' + zipCode: '92264' }, phone: { areaCode: '555', @@ -159,11 +144,11 @@ email: 'lillian@disney.com', relationship: 'Spouse', address: { - numberAndStreet: '2688 S Camino Real', + addressLine1: '2688 S Camino Real', city: 'Palm Springs', - state: 'CA', + stateCode: 'CA', country: 'US', - zipFirstFive: '92264' + zipCode: '92264' }, phone: { areaCode: '555', @@ -174,16 +159,16 @@ }, representative: { poaCode: poa_code.to_s, + registrationNumber: '1234', type: 'SERVICE ORGANIZATION REPRESENTATIVE', firstName: 'Bob', lastName: 'Representative', - organizationName: 'I Help Vets LLC', address: { - numberAndStreet: '2719 Hyperion Ave', + addressLine1: '2719 Hyperion Ave', city: 'Los Angeles', - state: 'CA', + stateCode: 'CA', country: 'US', - zipFirstFive: '92264' + zipCode: '92264' } } } @@ -209,7 +194,7 @@ 'text_signatures' => { 'page2' => [ { - 'signature' => 'JESSE GRAY - signed via api.va.gov', + 'signature' => 'Mitchell Jenkins - signed via api.va.gov', 'x' => 35, 'y' => 306 }, @@ -239,6 +224,8 @@ end context '2122 veteran claimant' do + let!(:org) { create(:organization, name: 'I Help Vets LLC', poa: poa_code) } + before do power_of_attorney.form_data = { recordConsent: true, @@ -246,45 +233,26 @@ consentLimits: %w[DRUG_ABUSE SICKLE_CELL], veteran: { address: { - numberAndStreet: '2719 Hyperion Ave', + addressLine1: '2719 Hyperion Ave', city: 'Los Angeles', - state: 'CA', + stateCode: 'CA', country: 'US', - zipFirstFive: '92264' + zipCode: '92264' }, phone: { areaCode: '555', phoneNumber: '5551337' } }, - claimant: { - email: 'lillian@disney.com', - relationship: 'Spouse', - address: { - numberAndStreet: '2688 S Camino Real', - city: 'Palm Springs', - state: 'CA', - country: 'US', - zipFirstFive: '92264' - }, - phone: { - areaCode: '555', - phoneNumber: '5551337' - }, - firstName: 'JESSE', - lastName: 'GRAY' - }, serviceOrganization: { poaCode: poa_code.to_s, - firstName: 'Bob', - lastName: 'Representative', - organizationName: 'I Help Vets LLC', + registrationNumber: '1234', address: { - numberAndStreet: '2719 Hyperion Ave', + addressLine1: '2719 Hyperion Ave', city: 'Los Angeles', - state: 'CA', + stateCode: 'CA', country: 'US', - zipFirstFive: '92264' + zipCode: '92264' } } } @@ -320,7 +288,11 @@ } ] }, - 'serviceOrganization' => { 'firstName' => 'Bob', 'lastName' => 'Representative' } + 'serviceOrganization' => { + 'firstName' => 'Bob', + 'lastName' => 'Representative', + 'organizationName' => 'I Help Vets LLC' + } } ) @@ -354,18 +326,20 @@ end context '2122 non-veteran claimant' do + let!(:org) { create(:organization, name: 'I Help Vets LLC', poa: poa_code) } + before do power_of_attorney.form_data = { recordConsent: true, consentAddressChange: true, - consentLimits: ['DRUG ABUSE', 'SICKLE CELL'], + consentLimits: %w[DRUG_ABUSE SICKLE_CELL], veteran: { address: { - numberAndStreet: '2719 Hyperion Ave', + addressLine1: '2719 Hyperion Ave', city: 'Los Angeles', - state: 'CA', + stateCode: 'CA', country: 'US', - zipFirstFive: '92264' + zipCode: '92264' }, phone: { areaCode: '555', @@ -377,11 +351,11 @@ email: 'lillian@disney.com', relationship: 'Spouse', address: { - numberAndStreet: '2688 S Camino Real', + addressLine1: '2688 S Camino Real', city: 'Palm Springs', - state: 'CA', + stateCode: 'CA', country: 'US', - zipFirstFive: '92264' + zipCode: '92264' }, phone: { areaCode: '555', @@ -392,15 +366,13 @@ }, serviceOrganization: { poaCode: poa_code.to_s, - firstName: 'Bob', - lastName: 'Representative', - organizationName: 'I Help Vets LLC', + registrationNumber: '1234', address: { - numberAndStreet: '2719 Hyperion Ave', + addressLine1: '2719 Hyperion Ave', city: 'Los Angeles', - state: 'CA', + stateCode: 'CA', country: 'US', - zipFirstFive: '92264' + zipCode: '92264' } } } @@ -436,7 +408,11 @@ } ] }, - 'serviceOrganization' => { 'firstName' => 'Bob', 'lastName' => 'Representative' } + 'serviceOrganization' => { + 'firstName' => 'Bob', + 'lastName' => 'Representative', + 'organizationName' => 'I Help Vets LLC' + } } ) From 62e01b6adc38fe1ff012fa71bb56237c94762b3b Mon Sep 17 00:00:00 2001 From: Holden Hinkle Date: Mon, 8 Apr 2024 11:10:18 -0400 Subject: [PATCH 05/10] Hh 77606 create poa endpoint (#16132) * create poa service and endpoint * wip * create #get_power_of_attorney in BenefitsClaims::Service * refactor PowerOfAttorneyController * delete RepresentationManagement::PowerOfAttorney::Service * create power_of_attorney route * add test for BenefitsClaims::Service #get_power_of_attorney * add new vcr cassette for power_of_attorney (must be updated) * write request specs for PowerOfAttorneyController * remove email from base serializer and add it to rep serializer * delete 'PowerOfAttorneyController', type: :request spec * create RepresentationManagement::V0::PowerOfAttorneyController, type: :controller spec instead * update endpoint response * formatting * add more tests, refactor * add serializer tests * add error handling to PowerOfAttorneyController #index * update icn used in testing poa endpoint * record vcr * remove settings * convert dig args to strings * order rep query by created_at DESC * correct the test name * fix failing tests * use #order in #find_representative * stub #order in test * remove private tests * refactor PowerOfAttorneyController * wip * add another test for rep poa response * refactor controller and add empty response vcr * add test for lighthouse responding with 422 * add request spec test for lighthouse responding with 422 * remove benefits claims service poa 422 response test --------- Co-authored-by: Jonathan VanCourt --- lib/lighthouse/benefits_claims/service.rb | 8 ++ .../v0/power_of_attorney_controller.rb | 65 +++++++++ .../power_of_attorney/base_serializer.rb | 21 +++ .../organization_serializer.rb | 14 ++ .../representative_serializer.rb | 23 +++ .../config/routes.rb | 1 + .../v0/power_of_attorney_request_spec.rb | 135 ++++++++++++++++++ .../power_of_attorney/base_serializer_spec.rb | 46 ++++++ .../organization_serializer_spec.rb | 35 +++++ .../representative_serializer_spec.rb | 36 +++++ .../benefits_claims/service_spec.rb | 21 +++ .../power_of_attorney/200_empty_response.yml | 77 ++++++++++ .../power_of_attorney/200_response.yml | 78 ++++++++++ 13 files changed, 560 insertions(+) create mode 100644 modules/representation_management/app/controllers/representation_management/v0/power_of_attorney_controller.rb create mode 100644 modules/representation_management/app/serializers/representation_management/power_of_attorney/base_serializer.rb create mode 100644 modules/representation_management/app/serializers/representation_management/power_of_attorney/organization_serializer.rb create mode 100644 modules/representation_management/app/serializers/representation_management/power_of_attorney/representative_serializer.rb create mode 100644 modules/representation_management/spec/requests/v0/power_of_attorney_request_spec.rb create mode 100644 modules/representation_management/spec/serializers/power_of_attorney/base_serializer_spec.rb create mode 100644 modules/representation_management/spec/serializers/power_of_attorney/organization_serializer_spec.rb create mode 100644 modules/representation_management/spec/serializers/power_of_attorney/representative_serializer_spec.rb create mode 100644 spec/support/vcr_cassettes/lighthouse/benefits_claims/power_of_attorney/200_empty_response.yml create mode 100644 spec/support/vcr_cassettes/lighthouse/benefits_claims/power_of_attorney/200_response.yml diff --git a/lib/lighthouse/benefits_claims/service.rb b/lib/lighthouse/benefits_claims/service.rb index 3e4313cf0e1..46f200a43ea 100644 --- a/lib/lighthouse/benefits_claims/service.rb +++ b/lib/lighthouse/benefits_claims/service.rb @@ -38,6 +38,14 @@ def get_claim(id, lighthouse_client_id = nil, lighthouse_rsa_key_path = nil, opt raise BenefitsClaims::ServiceException.new(e.response), 'Lighthouse Error' end + def get_power_of_attorney(lighthouse_client_id = nil, lighthouse_rsa_key_path = nil, options = {}) + config.get("#{@icn}/power-of-attorney", lighthouse_client_id, lighthouse_rsa_key_path, options).body + rescue Faraday::TimeoutError + raise BenefitsClaims::ServiceException.new({ status: 504 }), 'Lighthouse Error' + rescue Faraday::ClientError, Faraday::ServerError => e + raise BenefitsClaims::ServiceException.new(e.response), 'Lighthouse Error' + end + def submit5103(user, id, options = {}) params = {} is_dependent = SponsorResolver.dependent?(user) diff --git a/modules/representation_management/app/controllers/representation_management/v0/power_of_attorney_controller.rb b/modules/representation_management/app/controllers/representation_management/v0/power_of_attorney_controller.rb new file mode 100644 index 00000000000..3ec5cfd7986 --- /dev/null +++ b/modules/representation_management/app/controllers/representation_management/v0/power_of_attorney_controller.rb @@ -0,0 +1,65 @@ +# frozen_string_literal: true + +require 'lighthouse/benefits_claims/service' + +module RepresentationManagement + module V0 + class PowerOfAttorneyController < ApplicationController + service_tag 'representation-management' + + def index + @active_poa = lighthouse_service.get_power_of_attorney + + if @active_poa.blank? || record.blank? + render json: { data: {} }, status: :ok + else + render json: record, serializer:, status: :ok + end + end + + private + + def lighthouse_service + BenefitsClaims::Service.new(icn) + end + + def icn + @current_user&.icn + end + + def poa_code + @poa_code ||= @active_poa.dig('data', 'attributes', 'code') + end + + def poa_type + @poa_type ||= @active_poa.dig('data', 'type') + end + + def record + return @record if defined? @record + + @record ||= if poa_type == 'organization' + organization + else + representative + end + end + + def serializer + if poa_type == 'organization' + RepresentationManagement::PowerOfAttorney::OrganizationSerializer + else + RepresentationManagement::PowerOfAttorney::RepresentativeSerializer + end + end + + def organization + Veteran::Service::Organization.find_by(poa: poa_code) + end + + def representative + Veteran::Service::Representative.where('? = ANY(poa_codes)', poa_code).order(created_at: :desc).first + end + end + end +end diff --git a/modules/representation_management/app/serializers/representation_management/power_of_attorney/base_serializer.rb b/modules/representation_management/app/serializers/representation_management/power_of_attorney/base_serializer.rb new file mode 100644 index 00000000000..1b35a8a0605 --- /dev/null +++ b/modules/representation_management/app/serializers/representation_management/power_of_attorney/base_serializer.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +module RepresentationManagement + module PowerOfAttorney + class BaseSerializer < ActiveModel::Serializer + attribute :address_line1 + attribute :address_line2 + attribute :address_line3 + attribute :address_type + attribute :city + attribute :country_name + attribute :country_code_iso3 + attribute :province + attribute :international_postal_code + attribute :state_code + attribute :zip_code + attribute :zip_suffix + attribute :phone + end + end +end diff --git a/modules/representation_management/app/serializers/representation_management/power_of_attorney/organization_serializer.rb b/modules/representation_management/app/serializers/representation_management/power_of_attorney/organization_serializer.rb new file mode 100644 index 00000000000..c7f97d5b1f4 --- /dev/null +++ b/modules/representation_management/app/serializers/representation_management/power_of_attorney/organization_serializer.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +module RepresentationManagement + module PowerOfAttorney + class OrganizationSerializer < BaseSerializer + attribute :type + attribute :name + + def type + 'organization' + end + end + end +end diff --git a/modules/representation_management/app/serializers/representation_management/power_of_attorney/representative_serializer.rb b/modules/representation_management/app/serializers/representation_management/power_of_attorney/representative_serializer.rb new file mode 100644 index 00000000000..cade1119fed --- /dev/null +++ b/modules/representation_management/app/serializers/representation_management/power_of_attorney/representative_serializer.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +module RepresentationManagement + module PowerOfAttorney + class RepresentativeSerializer < BaseSerializer + attribute :type + attribute :name + attribute :email + + def type + 'representative' + end + + def name + object.full_name + end + + def phone + object.phone_number + end + end + end +end diff --git a/modules/representation_management/config/routes.rb b/modules/representation_management/config/routes.rb index b5d3ba5ee0f..241b887ca2e 100644 --- a/modules/representation_management/config/routes.rb +++ b/modules/representation_management/config/routes.rb @@ -3,5 +3,6 @@ RepresentationManagement::Engine.routes.draw do namespace :v0, defaults: { format: 'json' } do resources :flag_accredited_representatives, only: %i[create] + resources :power_of_attorney, only: %i[index] end end diff --git a/modules/representation_management/spec/requests/v0/power_of_attorney_request_spec.rb b/modules/representation_management/spec/requests/v0/power_of_attorney_request_spec.rb new file mode 100644 index 00000000000..80dd5490738 --- /dev/null +++ b/modules/representation_management/spec/requests/v0/power_of_attorney_request_spec.rb @@ -0,0 +1,135 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'RepresentationManagement::V0::PowerOfAttorneyController', type: :request do + let(:index_path) { '/representation_management/v0/power_of_attorney' } + let(:user) { create(:user, :loa3) } + + describe 'index' do + context 'with a signed in user' do + before do + sign_in_as(user) + end + + context 'when an organization is the active poa' do + let(:org_poa) { 'og1' } + let!(:organization) { create(:organization, poa: org_poa) } + + it 'returns the expected organization response' do + lh_response = { + 'data' => { + 'type' => 'organization', + 'attributes' => { + 'code' => org_poa + } + } + } + allow_any_instance_of(BenefitsClaims::Service) + .to receive(:get_power_of_attorney) + .and_return(lh_response) + + get index_path + + response_body = JSON.parse(response.body) + + expect(response).to have_http_status(:ok) + expect(response_body['data']['id']).to eq(org_poa) + end + end + + context 'when a representative is the active poa' do + let(:rep_poa) { 'rp1' } + let(:registration_number) { '12345' } + let!(:representative) do + create(:representative, + representative_id: registration_number, poa_codes: [rep_poa]) + end + + it 'returns the expected representative response' do + lh_response = { + 'data' => { + 'type' => 'individual', + 'attributes' => { + 'code' => rep_poa + } + } + } + allow_any_instance_of(BenefitsClaims::Service) + .to receive(:get_power_of_attorney) + .and_return(lh_response) + + get index_path + + response_body = JSON.parse(response.body) + + expect(response).to have_http_status(:ok) + expect(response_body['data']['id']).to eq(registration_number) + end + end + + context 'when there is no active poa' do + it 'returns the expected empty response' do + lh_response = { + 'data' => {} + } + allow_any_instance_of(BenefitsClaims::Service) + .to receive(:get_power_of_attorney) + .and_return(lh_response) + + get index_path + + response_body = JSON.parse(response.body) + + expect(response).to have_http_status(:ok) + expect(response_body['data']).to eq({}) + end + end + + context 'when the poa record is not found in the database' do + it 'returns the expected empty response' do + lh_response = { + 'data' => { + 'type' => 'organization', + 'attributes' => { + 'code' => 'abc' + } + } + } + allow_any_instance_of(BenefitsClaims::Service) + .to receive(:get_power_of_attorney) + .and_return(lh_response) + + get index_path + + response_body = JSON.parse(response.body) + + expect(response).to have_http_status(:ok) + expect(response_body['data']).to eq({}) + end + end + + context 'when the service encounters an unprocessable entity error' do + it 'returns a 422/unprocessable_entity status' do + allow_any_instance_of(BenefitsClaims::Service) + .to receive(:get_power_of_attorney) + .and_raise(Common::Exceptions::UnprocessableEntity) + + get index_path + + expect(response).to have_http_status(:unprocessable_entity) + end + end + end + + context 'without a signed in user' do + describe 'GET #index' do + it 'returns a 401/unauthorized status' do + get index_path + + expect(response).to have_http_status(:unauthorized) + end + end + end + end +end diff --git a/modules/representation_management/spec/serializers/power_of_attorney/base_serializer_spec.rb b/modules/representation_management/spec/serializers/power_of_attorney/base_serializer_spec.rb new file mode 100644 index 00000000000..1daa886c08c --- /dev/null +++ b/modules/representation_management/spec/serializers/power_of_attorney/base_serializer_spec.rb @@ -0,0 +1,46 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'BaseSerializer' do + before do + create(:organization, poa: 'og1') + create(:representative, representative_id: '123', poa_codes: ['rp1']) + end + + def representative + Veteran::Service::Representative.find('123') + end + + def organization + Veteran::Service::Organization.find('og1') + end + + def assert_attributes(attributes) + expect(attributes.keys).to eq(%w[address_line1 + address_line2 + address_line3 + address_type + city + country_name + country_code_iso3 + province + international_postal_code + state_code + zip_code + zip_suffix + phone]) + end + + it 'can serialize a representative' do + result = serialize(representative, serializer_class: RepresentationManagement::PowerOfAttorney::BaseSerializer) + attributes = JSON.parse(result)['data']['attributes'] + assert_attributes(attributes) + end + + it 'can serialize an organization' do + result = serialize(organization, serializer_class: RepresentationManagement::PowerOfAttorney::BaseSerializer) + attributes = JSON.parse(result)['data']['attributes'] + assert_attributes(attributes) + end +end diff --git a/modules/representation_management/spec/serializers/power_of_attorney/organization_serializer_spec.rb b/modules/representation_management/spec/serializers/power_of_attorney/organization_serializer_spec.rb new file mode 100644 index 00000000000..9ec39fbe579 --- /dev/null +++ b/modules/representation_management/spec/serializers/power_of_attorney/organization_serializer_spec.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'OrganizationSerializer' do + before do + create(:organization, poa: 'og1') + end + + def organization + Veteran::Service::Organization.find('og1') + end + + it 'can serialize an organization' do + result = serialize(organization, + serializer_class: RepresentationManagement::PowerOfAttorney::OrganizationSerializer) + attributes = JSON.parse(result)['data']['attributes'] + + expect(attributes.keys).to eq(%w[address_line1 + address_line2 + address_line3 + address_type + city + country_name + country_code_iso3 + province + international_postal_code + state_code + zip_code + zip_suffix + phone + type + name]) + end +end diff --git a/modules/representation_management/spec/serializers/power_of_attorney/representative_serializer_spec.rb b/modules/representation_management/spec/serializers/power_of_attorney/representative_serializer_spec.rb new file mode 100644 index 00000000000..c39ea43ec7e --- /dev/null +++ b/modules/representation_management/spec/serializers/power_of_attorney/representative_serializer_spec.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'RepresentativeSerializer' do + before do + create(:representative, representative_id: '123', poa_codes: ['rp1']) + end + + def representative + Veteran::Service::Representative.find('123') + end + + it 'can serialize a representative' do + result = serialize(representative, + serializer_class: RepresentationManagement::PowerOfAttorney::RepresentativeSerializer) + attributes = JSON.parse(result)['data']['attributes'] + + expect(attributes.keys).to eq(%w[address_line1 + address_line2 + address_line3 + address_type + city + country_name + country_code_iso3 + province + international_postal_code + state_code + zip_code + zip_suffix + phone + type + name + email]) + end +end diff --git a/spec/lib/lighthouse/benefits_claims/service_spec.rb b/spec/lib/lighthouse/benefits_claims/service_spec.rb index 27035f97ea0..d5ecd4fe022 100644 --- a/spec/lib/lighthouse/benefits_claims/service_spec.rb +++ b/spec/lib/lighthouse/benefits_claims/service_spec.rb @@ -56,6 +56,27 @@ end end + describe "when requesting a user's power of attorney" do + context 'when the user has an active power of attorney' do + it 'retrieves the power of attorney from the Lighthouse API' do + VCR.use_cassette('lighthouse/benefits_claims/power_of_attorney/200_response') do + response = @service.get_power_of_attorney + expect(response['data']['type']).to eq('individual') + expect(response['data']['attributes']['code']).to eq('067') + end + end + end + + context 'when the user does not have an active power of attorney' do + it 'retrieves the power of attorney from the Lighthouse API' do + VCR.use_cassette('lighthouse/benefits_claims/power_of_attorney/200_empty_response') do + response = @service.get_power_of_attorney + expect(response['data']).to eq({}) + end + end + end + end + describe 'when posting a form526' do it 'when given a full request body, posts to the Lighthouse API' do VCR.use_cassette('lighthouse/benefits_claims/submit526/200_response') do diff --git a/spec/support/vcr_cassettes/lighthouse/benefits_claims/power_of_attorney/200_empty_response.yml b/spec/support/vcr_cassettes/lighthouse/benefits_claims/power_of_attorney/200_empty_response.yml new file mode 100644 index 00000000000..d7878dd339e --- /dev/null +++ b/spec/support/vcr_cassettes/lighthouse/benefits_claims/power_of_attorney/200_empty_response.yml @@ -0,0 +1,77 @@ +--- +http_interactions: +- request: + method: get + uri: https://sandbox-api.va.gov/services/claims/v2/veterans/123498767V234859/power-of-attorney + body: + encoding: US-ASCII + string: '' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Vets.gov Agent + Authorization: Bearer + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Date: + - Thu, 04 Apr 2024 17:45:59 GMT + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '11' + Connection: + - keep-alive + Ratelimit-Remaining: + - '118' + Ratelimit-Reset: + - '3' + X-Ratelimit-Limit-Minute: + - '120' + X-Ratelimit-Remaining-Minute: + - '118' + Ratelimit-Limit: + - '120' + Etag: + - W/"7fb9d166d1a15bce0b9f085f3818946f" + Referrer-Policy: + - strict-origin-when-cross-origin + Vary: + - Origin + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Git-Sha: + - 77911592048236d8eccb0f39f5e9f758564e282b + X-Github-Repository: + - https://github.com/department-of-veterans-affairs/vets-api + X-Permitted-Cross-Domain-Policies: + - none + X-Request-Id: + - 8dd9e3bb-6159-4f92-b92d-7dbe791547e0 + X-Runtime: + - '2.017096' + X-Xss-Protection: + - '0' + Access-Control-Allow-Origin: + - "*" + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Cache-Control: + - no-cache, no-store + Pragma: + - no-cache + body: + encoding: UTF-8 + string: '{"data":{}}' + recorded_at: Thu, 04 Apr 2024 17:46:00 GMT +recorded_with: VCR 6.2.0 diff --git a/spec/support/vcr_cassettes/lighthouse/benefits_claims/power_of_attorney/200_response.yml b/spec/support/vcr_cassettes/lighthouse/benefits_claims/power_of_attorney/200_response.yml new file mode 100644 index 00000000000..bcf3bbe002d --- /dev/null +++ b/spec/support/vcr_cassettes/lighthouse/benefits_claims/power_of_attorney/200_response.yml @@ -0,0 +1,78 @@ +--- +http_interactions: +- request: + method: get + uri: https://sandbox-api.va.gov/services/claims/v2/veterans/123498767V234859/power-of-attorney + body: + encoding: US-ASCII + string: '' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Vets.gov Agent + Authorization: Bearer + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Date: + - Tue, 02 Apr 2024 14:30:58 GMT + Content-Type: + - application/json; charset=utf-8 + Connection: + - keep-alive + X-Ratelimit-Remaining-Minute: + - '119' + X-Ratelimit-Limit-Minute: + - '120' + Ratelimit-Remaining: + - '119' + Ratelimit-Limit: + - '120' + Ratelimit-Reset: + - '10' + Etag: + - W/"f674f2056c77718a448e94dc8a1ed556" + Referrer-Policy: + - strict-origin-when-cross-origin + Vary: + - Origin + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + - SAMEORIGIN + X-Git-Sha: + - 11de6c4d9dc0e22795b79e94395598e9c7e0fc3c + X-Github-Repository: + - https://github.com/department-of-veterans-affairs/vets-api + X-Permitted-Cross-Domain-Policies: + - none + X-Request-Id: + - f7395f08-c7c7-4726-85e4-602c6ecf40fe + X-Runtime: + - '8.308072' + X-Xss-Protection: + - '0' + Access-Control-Allow-Origin: + - "*" + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Cache-Control: + - no-cache, no-store + Pragma: + - no-cache + Transfer-Encoding: + - chunked + body: + encoding: ASCII-8BIT + string: '{"data":{"type":"individual","attributes":{"code":"067","name":"Tamara + Ellis","phoneNumber":null}}}' + recorded_at: Tue, 02 Apr 2024 14:30:58 GMT +recorded_with: VCR 6.2.0 From 5f14f92257f6baddb5fa17189a28e5197b1d5f32 Mon Sep 17 00:00:00 2001 From: evansmith Date: Mon, 8 Apr 2024 11:12:11 -0400 Subject: [PATCH 06/10] add new keys to attachment keys in anticipation of v2 (#16228) * add new keys to attachment keys in anticipation of v2 * add codeowners entry for burial.rb --------- Co-authored-by: Thomas Blackwell --- .github/CODEOWNERS | 1 + app/models/saved_claim/burial.rb | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index f9481452e5f..8da827ed0ea 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -290,6 +290,7 @@ app/models/rate_limited_search.rb @department-of-veterans-affairs/va-api-enginee app/models/saml_request_tracker.rb @department-of-veterans-affairs/octo-identity app/models/saved_claim.rb @department-of-veterans-affairs/Benefits-Team-1 @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group app/models/session.rb @department-of-veterans-affairs/octo-identity +app/models/saved_claim/burial.rb @department-of-veterans-affairs/benefits-non-disability @department-of-veterans-affairs/pensions @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group app/models/saved_claim/pension.rb @department-of-veterans-affairs/pensions @department-of-veterans-affairs/backend-review-group app/models/saved_claim/veteran_readiness_employment_claim.rb @department-of-veterans-affairs/benefits-non-disability @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group app/models/sign_in @department-of-veterans-affairs/octo-identity diff --git a/app/models/saved_claim/burial.rb b/app/models/saved_claim/burial.rb index 5bf7b4b7de8..fd9b1f858f2 100644 --- a/app/models/saved_claim/burial.rb +++ b/app/models/saved_claim/burial.rb @@ -32,7 +32,7 @@ def regional_office end def attachment_keys - %i[transportationReceipts deathCertificate].freeze + %i[transportationReceipts deathCertificate militarySeparationDocuments additionalEvidence].freeze end def email From d1eb7f411de2b51a41d9c3a093e2700b40e34707 Mon Sep 17 00:00:00 2001 From: Richard Davis Date: Mon, 8 Apr 2024 11:12:38 -0400 Subject: [PATCH 07/10] Adds debugging info to /v0/profile/contacts endpoint (#16174) --- app/swagger/swagger/schemas/contacts.rb | 8 ++- lib/va_profile/models/associated_person.rb | 12 +++- .../profile/v3/health_benefit_bio_response.rb | 30 +++++---- lib/va_profile/profile/v3/service.rb | 6 +- .../v0/profile/contacts_controller_spec.rb | 2 +- .../models/associated_person_spec.rb | 5 +- .../v3/health_benefit_bio_response_spec.rb | 27 ++++---- .../lib/va_profile/profile/v3/service_spec.rb | 43 ++++++++++-- .../va_profile/contacts_request_spec.rb | 66 ++++++++++++++----- 9 files changed, 144 insertions(+), 55 deletions(-) diff --git a/app/swagger/swagger/schemas/contacts.rb b/app/swagger/swagger/schemas/contacts.rb index d19585b9085..e6a01bf6276 100644 --- a/app/swagger/swagger/schemas/contacts.rb +++ b/app/swagger/swagger/schemas/contacts.rb @@ -10,7 +10,7 @@ class Contacts key :required, [:data] property :data, type: :array do items do - property :id, type: :string, example: 'dbbf9a58-41e5-40c0-bdb5-fc1407aa1f05' + property :id, type: :string property :type, type: :string property :attributes do key :$ref, :Contact @@ -21,7 +21,11 @@ class Contacts swagger_schema :Contact do key :required, %i[contact_type given_name family_name primary_phone] - property :contact_type, type: :string, enum: VAProfile::Models::AssociatedPerson::CONTACT_TYPES + property( + :contact_type, + type: :string, + enum: VAProfile::Models::AssociatedPerson::PERSONAL_HEALTH_CARE_CONTACT_TYPES + ) property :given_name, type: %i[string null] property :family_name, type: %i[string null] property :relationship, type: %i[string null] diff --git a/lib/va_profile/models/associated_person.rb b/lib/va_profile/models/associated_person.rb index 9f9f72c25bc..c100e0e1d33 100644 --- a/lib/va_profile/models/associated_person.rb +++ b/lib/va_profile/models/associated_person.rb @@ -10,19 +10,27 @@ class AssociatedPerson < Base OTHER_EMERGENCY_CONTACT = 'Other emergency contact' PRIMARY_NEXT_OF_KIN = 'Primary Next of Kin' OTHER_NEXT_OF_KIN = 'Other Next of Kin' + DESIGNEE = 'Designee' + POWER_OF_ATTORNEY = 'Power of Attorney' - CONTACT_TYPES = [ + PERSONAL_HEALTH_CARE_CONTACT_TYPES = [ EMERGENCY_CONTACT, OTHER_EMERGENCY_CONTACT, PRIMARY_NEXT_OF_KIN, OTHER_NEXT_OF_KIN ].freeze + CONTACT_TYPES = [ + *PERSONAL_HEALTH_CARE_CONTACT_TYPES, + DESIGNEE, + POWER_OF_ATTORNEY + ].freeze + attribute :contact_type, String attribute :given_name, Common::TitlecaseString attribute :middle_name, Common::TitlecaseString attribute :family_name, Common::TitlecaseString - attribute :relationship, Common::TitlecaseString + attribute :relationship, String attribute :address_line1, String attribute :address_line2, String attribute :address_line3, String diff --git a/lib/va_profile/profile/v3/health_benefit_bio_response.rb b/lib/va_profile/profile/v3/health_benefit_bio_response.rb index 1dde3fb9f89..1b333021400 100644 --- a/lib/va_profile/profile/v3/health_benefit_bio_response.rb +++ b/lib/va_profile/profile/v3/health_benefit_bio_response.rb @@ -8,33 +8,39 @@ module VAProfile module Profile module V3 class HealthBenefitBioResponse < VAProfile::Response - attr_reader :body - attribute :contacts, Array[VAProfile::Models::AssociatedPerson] attribute :messages, Array[VAProfile::Models::Message] + attribute :va_profile_tx_audit_id, String def initialize(response) - @body = response.body + body = response.body contacts = body.dig('profile', 'health_benefit', 'associated_persons') &.select { |p| valid_contact_types.include?(p['contact_type']) } &.sort_by { |p| valid_contact_types.index(p['contact_type']) } messages = body['messages'] - super(response.status, { contacts:, messages: }) + va_profile_tx_audit_id = response.response_headers['vaprofiletxauditid'] + super(response.status, { contacts:, messages:, va_profile_tx_audit_id: }) end - def metadata - { status:, messages: } + def debug_data + { + status:, + message:, + va_profile_tx_audit_id: + } end private def valid_contact_types - [ - VAProfile::Models::AssociatedPerson::EMERGENCY_CONTACT, - VAProfile::Models::AssociatedPerson::OTHER_EMERGENCY_CONTACT, - VAProfile::Models::AssociatedPerson::PRIMARY_NEXT_OF_KIN, - VAProfile::Models::AssociatedPerson::OTHER_NEXT_OF_KIN - ] + VAProfile::Models::AssociatedPerson::PERSONAL_HEALTH_CARE_CONTACT_TYPES + end + + def message + m = messages&.first + return '' unless m + + "#{m.code} #{m.key} #{m.text}" end end end diff --git a/lib/va_profile/profile/v3/service.rb b/lib/va_profile/profile/v3/service.rb index 8c26e61e49f..8b06ccc5f59 100644 --- a/lib/va_profile/profile/v3/service.rb +++ b/lib/va_profile/profile/v3/service.rb @@ -26,8 +26,10 @@ def initialize(user) def get_health_benefit_bio oid = MPI::Constants::VA_ROOT_OID path = "#{oid}/#{ERB::Util.url_encode(icn_with_aaid)}" - response = perform(:post, path, { bios: [{ bioPath: 'healthBenefit' }] }) - VAProfile::Profile::V3::HealthBenefitBioResponse.new(response) + service_response = perform(:post, path, { bios: [{ bioPath: 'healthBenefit' }] }) + response = VAProfile::Profile::V3::HealthBenefitBioResponse.new(service_response) + Sentry.set_extras(response.debug_data) unless response.ok? + response end def get_military_info diff --git a/spec/controllers/v0/profile/contacts_controller_spec.rb b/spec/controllers/v0/profile/contacts_controller_spec.rb index 2ddf67c1864..62131d4d71d 100644 --- a/spec/controllers/v0/profile/contacts_controller_spec.rb +++ b/spec/controllers/v0/profile/contacts_controller_spec.rb @@ -44,7 +44,7 @@ end context 'feature disabled' do - it 'returns an unauthorized status code' do + it 'returns a not found status code' do Flipper.disable(:profile_contacts) sign_in_as user expect(subject).to have_http_status(:not_found) diff --git a/spec/lib/va_profile/models/associated_person_spec.rb b/spec/lib/va_profile/models/associated_person_spec.rb index 8aedcb5ac90..42ee2701a06 100644 --- a/spec/lib/va_profile/models/associated_person_spec.rb +++ b/spec/lib/va_profile/models/associated_person_spec.rb @@ -35,15 +35,12 @@ it 'titlecases family_name' do expect(subject.family_name).to eq('Williams') end - - it 'titlecases relationship' do - expect(subject.relationship).to eq('Unrelated Friend') - end end context 'Virtus::Attribute, String type attributes' do %i[ contact_type + relationship address_line1 address_line2 address_line3 diff --git a/spec/lib/va_profile/profile/v3/health_benefit_bio_response_spec.rb b/spec/lib/va_profile/profile/v3/health_benefit_bio_response_spec.rb index 70f51f3ed61..8cc61adcadb 100644 --- a/spec/lib/va_profile/profile/v3/health_benefit_bio_response_spec.rb +++ b/spec/lib/va_profile/profile/v3/health_benefit_bio_response_spec.rb @@ -7,17 +7,22 @@ subject { described_class.new(response) } let(:response) do - double('Faraday::Response', - status: 200, - body: { - 'profile' => { - 'health_benefit' => { - 'associated_persons' => [{ - 'contact_type' => contact_type - }] - } - } - }) + double( + 'Faraday::Response', + status: 200, + body: { + 'profile' => { + 'health_benefit' => { + 'associated_persons' => [{ + 'contact_type' => contact_type + }] + } + } + }, + response_headers: { + 'vaprofiletxauditid' => 'abc123' + } + ) end describe 'Emergency contact' do diff --git a/spec/lib/va_profile/profile/v3/service_spec.rb b/spec/lib/va_profile/profile/v3/service_spec.rb index da5ec7b9b89..cd37ee8998d 100644 --- a/spec/lib/va_profile/profile/v3/service_spec.rb +++ b/spec/lib/va_profile/profile/v3/service_spec.rb @@ -55,6 +55,19 @@ describe '#get_health_benefit_bio' do let(:user) { build(:user, :loa3, idme_uuid:) } + let(:cassette_filename) { "spec/support/vcr_cassettes/#{cassette}.yml" } + let(:cassette_data) { YAML.load_file(cassette_filename) } + let(:va_profile_tx_audit_id) do + cassette_data['http_interactions'][0]['response']['headers']['Vaprofiletxauditid'][0] + end + let(:debug_data) do + { + status:, + message:, + va_profile_tx_audit_id: + } + end + around do |ex| VCR.use_cassette(cassette) { ex.run } end @@ -68,19 +81,21 @@ expect(response.status).to eq(200) expect(response.contacts.size).to eq(4) types = response.contacts.map(&:contact_type) - valid_contact_types = [ - VAProfile::Models::AssociatedPerson::EMERGENCY_CONTACT, - VAProfile::Models::AssociatedPerson::OTHER_EMERGENCY_CONTACT, - VAProfile::Models::AssociatedPerson::PRIMARY_NEXT_OF_KIN, - VAProfile::Models::AssociatedPerson::OTHER_NEXT_OF_KIN - ] + valid_contact_types = VAProfile::Models::AssociatedPerson::PERSONAL_HEALTH_CARE_CONTACT_TYPES expect(types).to match_array(valid_contact_types) end + + it 'does not call Sentry.set_extras' do + expect(Sentry).not_to receive(:set_extras) + subject.get_health_benefit_bio + end end context '404 response' do let(:idme_uuid) { '88f572d4-91af-46ef-a393-cba6c351e252' } let(:cassette) { 'va_profile/profile/v3/health_benefit_bio_404' } + let(:status) { 404 } + let(:message) { 'MVI201 MviNotFound The person with the identifier requested was not found in MVI.' } it 'includes messages received from the api' do response = subject.get_health_benefit_bio @@ -88,11 +103,22 @@ expect(response.contacts.size).to eq(0) expect(response.messages.size).to eq(1) end + + it 'calls Sentry.set_extras' do + expect(Sentry).to receive(:set_extras).once.with(debug_data) + subject.get_health_benefit_bio + end end context '500 response' do let(:idme_uuid) { '88f572d4-91af-46ef-a393-cba6c351e252' } let(:cassette) { 'va_profile/profile/v3/health_benefit_bio_500' } + let(:status) { 500 } + let(:message) do + result = 'MVI203 MviResponseError MVI returned acknowledgement error code ' + result += 'AE with error detail: More Than One Active Correlation Exists' + result + end it 'includes messages recieved from the api' do response = subject.get_health_benefit_bio @@ -100,6 +126,11 @@ expect(response.contacts.size).to eq(0) expect(response.messages.size).to eq(1) end + + it 'calls Sentry.set_extras' do + expect(Sentry).to receive(:set_extras).once.with(debug_data) + subject.get_health_benefit_bio + end end context 'api timeout' do diff --git a/spec/requests/va_profile/contacts_request_spec.rb b/spec/requests/va_profile/contacts_request_spec.rb index b44363b3ddd..4f8fef43a7a 100644 --- a/spec/requests/va_profile/contacts_request_spec.rb +++ b/spec/requests/va_profile/contacts_request_spec.rb @@ -7,29 +7,65 @@ let(:user) { build(:user, :loa3, idme_uuid:) } let(:resource) { JSON.parse(response.body) } - describe 'GET /v0/profile/contacts -> 200' do - let(:idme_uuid) { 'dd681e7d6dea41ad8b80f8d39284ef29' } + around do |ex| + VCR.use_cassette(cassette) { ex.run } + end + + describe 'GET /v0/profile/contacts' do + context '200 response' do + let(:idme_uuid) { 'dd681e7d6dea41ad8b80f8d39284ef29' } + let(:cassette) { 'va_profile/profile/v3/health_benefit_bio_200' } - it 'responds with contacts' do - sign_in_as(user) - VCR.use_cassette('va_profile/profile/v3/health_benefit_bio_200') do + it 'responds with contacts' do + sign_in_as(user) get '/v0/profile/contacts' + expect(response).to have_http_status(:ok) + expect(response).to match_response_schema('contacts') + expect(resource['data'].size).to eq(4) + end + end + + context '401 response' do + let(:idme_uuid) { 'dd681e7d6dea41ad8b80f8d39284ef29' } + let(:cassette) { 'va_profile/profile/v3/health_benefit_bio_200' } + + it 'responds with 401 status' do + get '/v0/profile/contacts' + expect(response).to have_http_status(:unauthorized) + end + end + + context '403 response' do + let(:user) { build(:user, :loa1) } + let(:cassette) { 'va_profile/profile/v3/health_benefit_bio_200' } + + it 'responds with 403 status' do + sign_in_as(user) + get '/v0/profile/contacts' + expect(response).to have_http_status(:forbidden) + end + end + + context '404 response' do + let(:idme_uuid) { '88f572d4-91af-46ef-a393-cba6c351e252' } + let(:cassette) { 'va_profile/profile/v3/health_benefit_bio_404' } + + it 'responds with 404 status' do + sign_in_as(user) + get '/v0/profile/contacts' + expect(response).to have_http_status(:not_found) end - expect(response).to have_http_status(:ok) - expect(response).to match_response_schema('contacts') - expect(resource['data'].size).to eq(4) end - end - describe 'GET /v0/profile/contacts -> 404' do - let(:idme_uuid) { '88f572d4-91af-46ef-a393-cba6c351e252' } + context '500 response' do + let(:idme_uuid) { '88f572d4-91af-46ef-a393-cba6c351e252' } + let(:cassette) { 'va_profile/profile/v3/health_benefit_bio_500' } - it 'responds with 404 status' do - sign_in_as(user) - VCR.use_cassette('va_profile/profile/v3/health_benefit_bio_404') do + it 'responds with 500 status' do + sign_in_as(user) get '/v0/profile/contacts' + expect(response).to have_http_status(:internal_server_error) end - expect(response).to have_http_status(:not_found) end end end From e97c23b95435159d775f3e88be14303627640129 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Apr 2024 10:01:16 -0600 Subject: [PATCH 08/10] Bump rubocop from 1.62.1 to 1.63.0 (#16233) Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.62.1 to 1.63.0. - [Release notes](https://github.com/rubocop/rubocop/releases) - [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop/rubocop/compare/v1.62.1...v1.63.0) --- updated-dependencies: - dependency-name: rubocop dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 95f1b0042fa..c2f6771ab7f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -890,7 +890,7 @@ GEM rswag-ui (2.13.0) actionpack (>= 3.1, < 7.2) railties (>= 3.1, < 7.2) - rubocop (1.62.1) + rubocop (1.63.0) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) From 57d14caea56dac652bd620f8d61f80d15e2750f7 Mon Sep 17 00:00:00 2001 From: Micah Frazier Date: Mon, 8 Apr 2024 10:36:46 -0600 Subject: [PATCH 09/10] Ndbex/80091 zip code bug (#16224) * level set * level set with master * removing yarn.lock * Fix for foreign zipcode bug for Burials * Fix for zipcode issue setting the zipcode as being foreign even if it was not * Rubocop * Rubocop * Fix for logic --------- Co-authored-by: Thomas Blackwell --- app/sidekiq/lighthouse/submit_benefits_intake_claim.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/sidekiq/lighthouse/submit_benefits_intake_claim.rb b/app/sidekiq/lighthouse/submit_benefits_intake_claim.rb index ff98683f62d..34553145270 100644 --- a/app/sidekiq/lighthouse/submit_benefits_intake_claim.rb +++ b/app/sidekiq/lighthouse/submit_benefits_intake_claim.rb @@ -77,13 +77,13 @@ def generate_metadata 'veteranFirstName' => veteran_full_name['first'], 'veteranLastName' => veteran_full_name['last'], 'fileNumber' => form['vaFileNumber'] || form['veteranSocialSecurityNumber'], - 'zipCode' => address['country'] == 'USA' ? address['postalCode'] : FOREIGN_POSTALCODE, + 'zipCode' => address['postalCode'], 'source' => "#{@claim.class} va.gov", 'docType' => @claim.form_id, 'businessLine' => @claim.business_line } - SimpleFormsApiSubmission::MetadataValidator.validate(metadata) + SimpleFormsApiSubmission::MetadataValidator.validate(metadata, zip_code_is_us_based: check_zipcode(address)) end # rubocop:disable Metrics/MethodLength @@ -149,5 +149,9 @@ def cleanup_file_paths Common::FileHelpers.delete_file_if_exists(@pdf_path) if @pdf_path @attachment_paths&.each { |p| Common::FileHelpers.delete_file_if_exists(p) } end + + def check_zipcode(address) + address['country'].upcase.in?(%w[USA US]) + end end end From ad954405e855dab3cb3f588037850f6d4f7ed663 Mon Sep 17 00:00:00 2001 From: s-caso <94458706+s-caso@users.noreply.github.com> Date: Mon, 8 Apr 2024 16:51:05 -0400 Subject: [PATCH 10/10] correct params strcuture for form submission (#16247) * correct params strcuture for form submission * update form params to be correct values --- modules/meb_api/lib/dgi/forms/service/submission_service.rb | 4 ++-- modules/meb_api/lib/dgi/submission/service.rb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/meb_api/lib/dgi/forms/service/submission_service.rb b/modules/meb_api/lib/dgi/forms/service/submission_service.rb index 0f369b477b3..8adae906f53 100644 --- a/modules/meb_api/lib/dgi/forms/service/submission_service.rb +++ b/modules/meb_api/lib/dgi/forms/service/submission_service.rb @@ -53,9 +53,9 @@ def update_dd_params(params, dd_params) params[:form][:direct_deposit][:direct_deposit_account_number] = dd_params[:dposit_acnt_nbr] params[:form][:direct_deposit][:direct_deposit_routing_number] = dd_params[:routng_trnsit_nbr] elsif check_masking && Flipper.enabled?(:toe_light_house_dgi_direct_deposit, @current_user) - params[:form][:direct_deposit][:account_number] = + params[:form][:direct_deposit][:direct_deposit_account_number] = dd_params&.payment_account ? dd_params.payment_account[:account_number] : nil - params[:form][:direct_deposit][:routing_number] = + params[:form][:direct_deposit][:direct_deposit_routing_number] = dd_params&.payment_account ? dd_params.payment_account[:routing_number] : nil end params diff --git a/modules/meb_api/lib/dgi/submission/service.rb b/modules/meb_api/lib/dgi/submission/service.rb index 26c001c5a22..85b91d8482c 100644 --- a/modules/meb_api/lib/dgi/submission/service.rb +++ b/modules/meb_api/lib/dgi/submission/service.rb @@ -54,9 +54,9 @@ def update_dd_params(params, dd_params) check_masking = account_number&.include?('*') if check_masking && Flipper.enabled?(:show_dgi_direct_deposit_1990EZ, @current_user) - params[:direct_deposit][:account_number] = + params[:direct_deposit][:direct_deposit_account_number] = dd_params&.payment_account ? dd_params.payment_account[:account_number] : nil - params[:direct_deposit][:routing_number] = + params[:direct_deposit][:direct_deposit_routing_number] = dd_params&.payment_account ? dd_params.payment_account[:routing_number] : nil end