503 lines
18 KiB
Ruby
503 lines
18 KiB
Ruby
require "rails_helper"
|
|
|
|
feature "User managing medical releases" do
|
|
let(:current_user) { create(:user) }
|
|
let(:project) { create(:project, members: current_user, account: current_user.primary_account) }
|
|
|
|
context "when signed out" do
|
|
scenario 'creating a release for an adult', js: true do
|
|
allow(BrayniacAI::Validation).to receive(:create).and_return(double(:validation, valid: true))
|
|
|
|
project = create(:project, members: current_user, account: current_user.primary_account)
|
|
contract_template = create(:contract_template, project: project)
|
|
|
|
visit new_account_project_contract_template_medical_release_path(project.account, project, contract_template)
|
|
|
|
fill_in person_first_name_field, with: 'Jane'
|
|
fill_in person_last_name_field, with: 'Doe'
|
|
fill_in_person_address_fields
|
|
fill_in person_phone_field, with: '555-555-5555'
|
|
fill_in person_email_field, with: 'jane.doe@test.com'
|
|
drop_file Rails.root.join(file_fixture("person_photo.png")), type: :dropzone
|
|
draw_signature file_fixture("signature.png"), "medical_release_signature_base64"
|
|
|
|
expect do
|
|
click_button submit_release_button
|
|
end.to change(MedicalRelease, :count).by(1)
|
|
|
|
expect(page).to have_content(successful_submission_message)
|
|
end
|
|
|
|
scenario "creating a release for a minor - guardian fields are required when minor checkbox is checked", js: true do
|
|
contract_template = create(:contract_template, project: project)
|
|
|
|
visit new_account_project_contract_template_medical_release_path(project.account, project, contract_template)
|
|
|
|
all('input[data-required-tag="guardian"]').each do |field|
|
|
expect(field['required']).to eq 'false'
|
|
expect(field).not_to be_visible
|
|
end
|
|
|
|
page.check person_is_minor_checkbox
|
|
|
|
all('input[data-required-tag="guardian"]').each do |field|
|
|
expect(field['required']).to eq 'true'
|
|
expect(field).to be_visible
|
|
end
|
|
end
|
|
|
|
scenario 'creating a release for a minor', js: true do
|
|
allow(BrayniacAI::Validation).to receive(:create).and_return(double(:validation, valid: true))
|
|
|
|
project = create(:project, members: current_user, account: current_user.primary_account)
|
|
contract_template = create(:contract_template, project: project)
|
|
|
|
visit new_account_project_contract_template_medical_release_path(project.account, project, contract_template)
|
|
|
|
expect(page).not_to have_content guardian_information_heading.upcase
|
|
expect(page).not_to have_content guardian_photo_heading.upcase
|
|
|
|
page.check person_is_minor_checkbox
|
|
expect(page).to have_content guardian_information_heading.upcase
|
|
expect(page).to have_content guardian_photo_heading.upcase
|
|
expect(page).to have_content guardian_email_field.titleize
|
|
|
|
fill_in guardian_first_name_field, with: 'Guardian'
|
|
fill_in guardian_last_name_field, with: 'Name'
|
|
fill_in guardian_phone_field, with: '001101'
|
|
fill_in guardian_email_field, with: "valid@email.com"
|
|
fill_in person_first_name_field, with: 'Jane'
|
|
fill_in person_last_name_field, with: 'Doe'
|
|
fill_in_person_address_fields
|
|
fill_in person_phone_field, with: '555-555-5555'
|
|
fill_in person_email_field, with: 'jane.doe@test.com'
|
|
drop_file Rails.root.join(file_fixture("person_photo.png")), type: :dropzone
|
|
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
|
draw_signature file_fixture('signature.png'), 'medical_release_signature_base64'
|
|
|
|
fill_in_guardian_address_fields
|
|
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
|
draw_signature file_fixture('signature.png'), 'medical_release_signature_base64'
|
|
click_button submit_release_button
|
|
|
|
expect(page).to have_content(successful_submission_message)
|
|
end
|
|
|
|
scenario 'creating a release for a minor with two guardians', js: true do
|
|
allow(BrayniacAI::Validation).to receive(:create).and_return(double(:validation, valid: true))
|
|
|
|
project = create(:project, members: current_user, account: current_user.primary_account)
|
|
contract_template = create(:contract_template, project: project)
|
|
|
|
visit new_account_project_contract_template_medical_release_path(project.account, project, contract_template)
|
|
|
|
expect(page).not_to have_content guardian_2_information_heading.upcase
|
|
expect(page).not_to have_content guardian_2_photo_heading.upcase
|
|
|
|
page.check person_is_minor_checkbox
|
|
expect(page).to have_content guardian_information_heading.upcase
|
|
expect(page).to have_content guardian_photo_heading.upcase
|
|
expect(page).to have_content guardian_email_field.titleize
|
|
|
|
expect(page).to have_content guardian_2_information_heading.upcase
|
|
expect(page).to have_content guardian_2_photo_heading.upcase
|
|
expect(page).to have_content guardian_2_email_field.titleize
|
|
expect(page).to have_content guardian_2_phone_field.titleize
|
|
expect(page).to have_content guardian_2_address_street1_field.titleize
|
|
|
|
fill_in guardian_first_name_field, with: 'Guardian'
|
|
fill_in guardian_last_name_field, with: 'Name'
|
|
fill_in guardian_phone_field, with: '001101'
|
|
fill_in guardian_email_field, with: "valid@email.com"
|
|
fill_in person_first_name_field, with: 'Jane'
|
|
fill_in person_last_name_field, with: 'Doe'
|
|
fill_in_person_address_fields
|
|
fill_in person_phone_field, with: '555-555-5555'
|
|
fill_in person_email_field, with: 'jane.doe@test.com'
|
|
drop_file Rails.root.join(file_fixture("person_photo.png")), type: :dropzone
|
|
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
|
draw_signature file_fixture('signature.png'), 'medical_release_signature_base64'
|
|
|
|
fill_in_guardian_address_fields
|
|
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
|
draw_signature file_fixture('signature.png'), 'medical_release_signature_base64'
|
|
|
|
fill_in guardian_2_first_name_field, with: 'Second'
|
|
fill_in guardian_2_last_name_field, with: 'Guardian'
|
|
fill_in guardian_2_phone_field, with: '999'
|
|
|
|
click_button submit_release_button
|
|
|
|
expect(page).to have_content(successful_submission_message)
|
|
expect(MedicalRelease.last.guardian_2_first_name).to eq 'Second'
|
|
end
|
|
|
|
scenario 'when signing release, question answers are required', js: true do
|
|
project = create(:project, members: current_user, account: current_user.primary_account)
|
|
contract_template = create(:contract_template,
|
|
project: project,
|
|
question_1_text: 'Question 1',
|
|
question_2_text: 'Question 2',
|
|
questionnaire_legal_text: 'Questionnaire legal text',
|
|
)
|
|
|
|
visit new_account_project_contract_template_medical_release_path(project.account, project, contract_template)
|
|
|
|
expect(page).to have_content 'Questionnaire legal text'
|
|
|
|
fill_in person_first_name_field, with: 'Jane'
|
|
fill_in person_last_name_field, with: 'Doe'
|
|
draw_signature file_fixture("signature.png"), "medical_release_signature_base64"
|
|
|
|
expect do
|
|
click_button submit_release_button
|
|
end.to change(MedicalRelease, :count).by(0)
|
|
expect(page).not_to have_content(successful_submission_message)
|
|
|
|
fill_in answer_field_for_question(1), with: 'Answer 1'
|
|
draw_signature file_fixture("signature.png"), "medical_release_signature_base64"
|
|
|
|
expect do
|
|
click_button submit_release_button
|
|
end.to change(MedicalRelease, :count).by(0)
|
|
expect(page).not_to have_content(successful_submission_message)
|
|
|
|
fill_in answer_field_for_question(2), with: 'Answer 2'
|
|
draw_signature file_fixture("signature.png"), "medical_release_signature_base64"
|
|
|
|
expect do
|
|
click_button submit_release_button
|
|
end.to change(MedicalRelease, :count).by(1)
|
|
expect(page).to have_content(successful_submission_message)
|
|
|
|
end
|
|
|
|
scenario "creating a release, if contract template contains signature legal language, it is shown" do
|
|
contract_template = create(:contract_template, project: project, signature_legal_text: dummy_signature_legal_text)
|
|
visit new_account_project_contract_template_medical_release_path(project.account, project, contract_template)
|
|
|
|
expect(page).to have_content dummy_signature_legal_text
|
|
end
|
|
end
|
|
|
|
context "when signed in as account manager" do
|
|
before do
|
|
sign_in current_user
|
|
end
|
|
|
|
scenario "Approved releases have checkmark and non-approved releases don't have checkmarks" do
|
|
create(:medical_release_with_contract_template, :native, project: project)
|
|
|
|
visit project_medical_releases_path(project)
|
|
expect(page).to have_css('i.fa.fa-check-circle.fa-2x', count: 0)
|
|
|
|
create(:medical_release_with_contract_template, :native, project: project, approved_by_user_email: "some@email.com", approved_at: DateTime.now)
|
|
visit project_medical_releases_path(project)
|
|
|
|
expect(page).to have_css('i.fa.fa-check-circle.fa-2x', count: 1)
|
|
end
|
|
|
|
scenario "Download All is visible" do
|
|
create(:medical_release_with_contract_template, :native, project: project)
|
|
create(:medical_release_with_contract_template, :non_native, project: project)
|
|
|
|
visit project_medical_releases_path(project)
|
|
|
|
expect(page).to have_content download_all_button
|
|
end
|
|
|
|
scenario "Download action in Manage menu is visible" do
|
|
create(:medical_release_with_contract_template, :native, project: project)
|
|
create(:medical_release_with_contract_template, :non_native, project: project)
|
|
|
|
visit project_medical_releases_path(project)
|
|
|
|
expect(page).to have_link("Download", exact: true, count: 2)
|
|
end
|
|
|
|
scenario "Downloading PDF of native medical release is possible" do
|
|
native_release = create(:medical_release_with_contract_template, :native, project: project)
|
|
|
|
visit project_medical_releases_path(project)
|
|
|
|
click_link *view_release_pdf_link_for(native_release)
|
|
expect(content_type).to eq('application/pdf')
|
|
end
|
|
|
|
scenario 'viewing contract PDF with medical questionnaire' do
|
|
contract_template = create(:medical_release_contract_template, project: project, questionnaire_legal_text: "Questionnaire legal text", question_1_text: "Question 1 text")
|
|
medical_release = create(:medical_release,
|
|
:native,
|
|
contract_template: contract_template,
|
|
project: project,
|
|
person_first_name: "John",
|
|
person_last_name: "Doe",
|
|
question_1_answer: "Question 1 answer",
|
|
)
|
|
|
|
sign_in(current_user)
|
|
visit project_medical_releases_path(project)
|
|
click_link *view_release_pdf_link_for(medical_release)
|
|
|
|
expect(content_type).to eq("application/pdf")
|
|
expect(content_disposition).to include("inline")
|
|
expect(pdf_filename).to include("doe-john")
|
|
|
|
expect(pdf_body).to have_content("John Doe")
|
|
expect(pdf_body).to have_content "MEDICAL QUESTIONNAIRE"
|
|
expect(pdf_body).to have_content "Question 1 text"
|
|
expect(pdf_body).to have_content "Question 1 answer"
|
|
expect(pdf_body).to have_content "Questionnaire legal text"
|
|
end
|
|
end
|
|
|
|
context "when the user is manager(project manager)" do
|
|
let(:current_user) { create(:user, :manager) }
|
|
|
|
before do
|
|
sign_in current_user
|
|
end
|
|
|
|
scenario "Download All is not visible" do
|
|
create(:medical_release_with_contract_template, :native, project: project)
|
|
create(:medical_release_with_contract_template, :non_native, project: project)
|
|
|
|
visit project_medical_releases_path(project)
|
|
|
|
expect(page).not_to have_content download_all_button
|
|
end
|
|
|
|
scenario "Download action in Manage menu is not visible" do
|
|
create(:medical_release_with_contract_template, :native, project: project)
|
|
create(:medical_release_with_contract_template, :non_native, project: project)
|
|
|
|
visit project_medical_releases_path(project)
|
|
|
|
expect(page).to have_link("Download", exact: true, count: 0)
|
|
end
|
|
|
|
scenario "Downloading PDF of native medical release is not possible" do
|
|
native_release = create(:medical_release_with_contract_template, :native, project: project)
|
|
|
|
visit project_medical_releases_path(project)
|
|
|
|
link = medical_release_contracts_path(native_release, format: 'pdf')
|
|
expect { visit link }.to raise_exception Pundit::NotAuthorizedError
|
|
end
|
|
|
|
scenario "Downloading PDF of non native medical release is not possible" do
|
|
non_native_release = create(:medical_release_with_contract_template, :non_native, project: project)
|
|
|
|
visit project_medical_releases_path(project)
|
|
|
|
link = medical_release_contracts_path(non_native_release, format: 'pdf')
|
|
expect { visit link }.to raise_exception Pundit::NotAuthorizedError
|
|
end
|
|
end
|
|
|
|
context "when the user is associate" do
|
|
let(:current_user) { create(:user, :associate) }
|
|
|
|
before do
|
|
sign_in current_user
|
|
end
|
|
|
|
scenario "Download All is not visible" do
|
|
create(:medical_release_with_contract_template, :native, project: project)
|
|
create(:medical_release_with_contract_template, :non_native, project: project)
|
|
|
|
visit project_medical_releases_path(project)
|
|
|
|
expect(page).not_to have_content download_all_button
|
|
end
|
|
|
|
scenario "Download action in Manage menu is not visible" do
|
|
create(:medical_release_with_contract_template, :native, project: project)
|
|
create(:medical_release_with_contract_template, :non_native, project: project)
|
|
|
|
visit project_medical_releases_path(project)
|
|
|
|
expect(page).to have_link("Download", exact: true, count: 0)
|
|
end
|
|
|
|
scenario "Downloading PDF of native medical release is not possible" do
|
|
native_release = create(:medical_release_with_contract_template, :native, project: project)
|
|
|
|
visit project_medical_releases_path(project)
|
|
|
|
link = medical_release_contracts_path(native_release, format: 'pdf')
|
|
expect { visit link }.to raise_exception Pundit::NotAuthorizedError
|
|
end
|
|
|
|
scenario "Downloading PDF of non native medical release is not possible" do
|
|
non_native_release = create(:medical_release_with_contract_template, :non_native, project: project)
|
|
|
|
visit project_medical_releases_path(project)
|
|
|
|
link = medical_release_contracts_path(non_native_release, format: 'pdf')
|
|
expect { visit link }.to raise_exception Pundit::NotAuthorizedError
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def download_all_button
|
|
'Download All'
|
|
end
|
|
|
|
def download_action
|
|
'Download'
|
|
end
|
|
|
|
def manage_button
|
|
t 'medical_releases.medical_release.actions.manage'
|
|
end
|
|
|
|
def view_release_pdf_link_for(release)
|
|
['Download', href: medical_release_contracts_path(release, format: 'pdf')]
|
|
end
|
|
|
|
def person_first_name_field
|
|
"medical_release[person_first_name]"
|
|
end
|
|
|
|
def person_last_name_field
|
|
"medical_release[person_last_name]"
|
|
end
|
|
|
|
def person_email_field
|
|
"medical_release[person_email]"
|
|
end
|
|
|
|
def person_phone_field
|
|
"medical_release[person_phone]"
|
|
end
|
|
|
|
def submit_release_button
|
|
t 'shared.submit_release_short'
|
|
end
|
|
|
|
def successful_submission_message
|
|
"Your release was successfully submitted. Thank you."
|
|
end
|
|
|
|
def fill_in_person_address_fields
|
|
fill_in person_address_street1_field, with: "123 Test Lane"
|
|
fill_in person_address_city_field, with: "New York"
|
|
fill_in person_address_state_field, with: "NY"
|
|
fill_in person_address_zip_field, with: '1000'
|
|
end
|
|
|
|
def fill_in_guardian_address_fields
|
|
fill_in guardian_address_street1_field, with: "124 Test Lane"
|
|
fill_in guardian_address_city_field, with: "New York"
|
|
fill_in guardian_address_state_field, with: "NY"
|
|
fill_in guardian_address_zip_field, with: '1000'
|
|
end
|
|
|
|
def person_address_street1_field
|
|
t('helpers.label.medical_release.person_address_street1')
|
|
end
|
|
|
|
def person_address_city_field
|
|
t('helpers.label.medical_release.person_address_city')
|
|
end
|
|
|
|
def person_address_state_field
|
|
t('helpers.label.medical_release.person_address_state')
|
|
end
|
|
|
|
def person_address_zip_field
|
|
t('helpers.label.medical_release.person_address_zip')
|
|
end
|
|
|
|
|
|
def guardian_first_name_field
|
|
t('helpers.label.medical_release.guardian_first_name')
|
|
end
|
|
|
|
def guardian_last_name_field
|
|
t('helpers.label.medical_release.guardian_last_name')
|
|
end
|
|
|
|
def guardian_phone_field
|
|
t('helpers.label.medical_release.guardian_phone')
|
|
end
|
|
|
|
def guardian_email_field
|
|
t('helpers.label.medical_release.guardian_email')
|
|
end
|
|
|
|
def guardian_address_street1_field
|
|
t('helpers.label.medical_release.guardian_address_street1')
|
|
end
|
|
|
|
def guardian_address_city_field
|
|
t('helpers.label.medical_release.guardian_address_city')
|
|
end
|
|
|
|
def guardian_address_state_field
|
|
t('helpers.label.medical_release.guardian_address_state')
|
|
end
|
|
|
|
def guardian_address_zip_field
|
|
t('helpers.label.medical_release.guardian_address_zip')
|
|
end
|
|
|
|
def guardian_photo_field
|
|
'medical_release[guardian_photo]'
|
|
end
|
|
|
|
def person_is_minor_checkbox
|
|
'medical_release_minor'
|
|
end
|
|
|
|
def guardian_2_first_name_field
|
|
t('helpers.label.medical_release.guardian_2_first_name')
|
|
end
|
|
|
|
def guardian_2_last_name_field
|
|
t('helpers.label.medical_release.guardian_2_last_name')
|
|
end
|
|
|
|
def guardian_2_phone_field
|
|
t('helpers.label.medical_release.guardian_2_phone')
|
|
end
|
|
|
|
def guardian_2_email_field
|
|
t('helpers.label.medical_release.guardian_2_email')
|
|
end
|
|
|
|
def guardian_2_address_street1_field
|
|
t('helpers.label.medical_release.guardian_2_address_street1')
|
|
end
|
|
|
|
def email_validation_error_for(prefix)
|
|
"#{prefix} email is not an email"
|
|
end
|
|
|
|
def guardian_photo_heading
|
|
t 'public.medical_releases.new.guardian_photo.heading'
|
|
end
|
|
|
|
def guardian_information_heading
|
|
t 'public.medical_releases.new.guardian_info.heading'
|
|
end
|
|
|
|
def guardian_2_photo_heading
|
|
t 'public.medical_releases.new.guardian_2_photo.heading'
|
|
end
|
|
|
|
def guardian_2_information_heading
|
|
t 'public.medical_releases.new.guardian_2_info.heading'
|
|
end
|
|
|
|
def answer_field_for_question(number)
|
|
"medical_release[question_#{number}_answer]"
|
|
end
|
|
|
|
def dummy_signature_legal_text
|
|
'Some signature legal language'
|
|
end
|
|
end
|