192 lines
5.8 KiB
Ruby
192 lines
5.8 KiB
Ruby
require 'rails_helper'
|
|
|
|
feature 'User approving releasables' do
|
|
shared_examples 'an approvable UI' do
|
|
let(:current_user) { create(:user, :associate) }
|
|
let(:project) { create(:project, members: current_user, account: current_user.primary_account) }
|
|
|
|
before :each do
|
|
sign_in current_user
|
|
end
|
|
|
|
shared_examples 'not authorized to review' do
|
|
it 'does not show the review action' do
|
|
visit polymorphic_path [project, subject.model_name.plural]
|
|
click_on manage_button
|
|
|
|
expect(page).not_to have_link(review_action, exact: true)
|
|
end
|
|
end
|
|
|
|
scenario 'approval status is indicating by a checkmark' do
|
|
approved_releasable = create("#{subject.model_name.singular}", approved_at: 1.day.ago, project: project)
|
|
|
|
visit polymorphic_path [project, subject.model_name.plural]
|
|
|
|
expect(page).not_to be_approved(subject)
|
|
expect(page).not_to be_approved(approved_releasable)
|
|
end
|
|
|
|
context 'as an account manager' do
|
|
let(:current_user) { create(:user, :account_manager) }
|
|
|
|
scenario 'approving a release', js: true do
|
|
visit polymorphic_path [project, subject.model_name.plural]
|
|
|
|
click_on manage_button
|
|
click_link review_action
|
|
|
|
expect(page).to have_content review_page_heading(subject.model_name)
|
|
expect(page).to have_content approve_button
|
|
expect(page).to have_content signature_field
|
|
|
|
click_on approve_button
|
|
|
|
expect(page).not_to have_content approved_notice(subject.model_name)
|
|
expect(page).to have_content 'is not attached'
|
|
|
|
by 'adding signature' do
|
|
draw_signature file_fixture('signature.png'), signature_data_field(subject.model_name)
|
|
click_on approve_button
|
|
|
|
expect(page).to have_content approved_notice(subject.model_name)
|
|
end
|
|
end
|
|
|
|
scenario 'viewing the contract PDF for an unapproved release' do
|
|
visit polymorphic_path [project, subject.model_name.plural]
|
|
click_on 'Manage'
|
|
click_link 'Download'
|
|
|
|
expect(content_type).to eq('application/pdf')
|
|
expect(content_disposition).to include('inline')
|
|
expect(pdf_body).not_to have_content for_office_use_only
|
|
end
|
|
|
|
scenario 'viewing the contract PDF of an approved release' do
|
|
approver = create(:user, email: 'big.doe@test.com', first_name: 'Big', last_name: 'Joe')
|
|
subject.approve_by(approver)
|
|
subject.save!
|
|
|
|
visit polymorphic_path([subject, :contracts], format: 'pdf')
|
|
|
|
expect(content_type).to eq('application/pdf')
|
|
expect(content_disposition).to include('inline')
|
|
expect(pdf_body).to have_content for_office_use_only.upcase
|
|
expect(pdf_body).to have_content producer_label
|
|
expect(pdf_body).to have_content production_label
|
|
expect(pdf_body).to have_content issued_to_label
|
|
expect(pdf_body).to have_content issued_by_label
|
|
expect(pdf_body).to have_content date_issued
|
|
expect(pdf_body).to have_content 'Big Joe'
|
|
end
|
|
end
|
|
|
|
context 'as a manager' do
|
|
let(:current_user) { create(:user, :manager) }
|
|
|
|
include_examples 'not authorized to review'
|
|
end
|
|
|
|
context 'as an associate' do
|
|
let(:current_user) { create(:user, :associate) }
|
|
|
|
include_examples 'not authorized to review'
|
|
end
|
|
|
|
private
|
|
|
|
def approve_button
|
|
t 'approvals.new.actions.approve'
|
|
end
|
|
|
|
def approved_notice(model_name)
|
|
t('approvals.create.release_approved', release_type: model_name.human)
|
|
end
|
|
|
|
def be_approved(releasable)
|
|
releasable_dom_id = "##{releasable.model_name.singular}_#{releasable.id}"
|
|
have_css("#{releasable_dom_id }i.fa.fa-check-circle.fa-2x", count: 1)
|
|
end
|
|
|
|
def manage_button
|
|
'Manage'
|
|
end
|
|
|
|
def review_action
|
|
'Review'
|
|
end
|
|
|
|
def review_page_heading(model_name)
|
|
t 'approvals.new.heading', release_type: model_name.human.titleize
|
|
end
|
|
|
|
def signature_field
|
|
'SIGNATURE'
|
|
end
|
|
|
|
def signature_data_field(model_name)
|
|
"#{model_name.singular}_approved_by_user_signature[data]"
|
|
end
|
|
|
|
def for_office_use_only
|
|
t('contracts.for_office_use_only.heading').upcase
|
|
end
|
|
|
|
def producer_label
|
|
t 'contracts.for_office_use_only.description_labels.producer'
|
|
end
|
|
|
|
def production_label
|
|
t 'contracts.for_office_use_only.description_labels.production'
|
|
end
|
|
|
|
def issued_to_label
|
|
t 'contracts.for_office_use_only.description_labels.issued_to'
|
|
end
|
|
|
|
def issued_by_label
|
|
t 'contracts.for_office_use_only.description_labels.issued_by'
|
|
end
|
|
|
|
def date_issued
|
|
t 'contracts.for_office_use_only.description_labels.date_issued'
|
|
end
|
|
end
|
|
|
|
context 'for an appearance release' do
|
|
subject { create(:appearance_release_with_contract_template, :native, project: project) }
|
|
it_behaves_like 'an approvable UI'
|
|
end
|
|
|
|
context 'for a talent release' do
|
|
subject { create(:talent_release_with_contract_template, :native, project: project) }
|
|
it_behaves_like 'an approvable UI'
|
|
end
|
|
|
|
context 'for a location release' do
|
|
subject { create(:location_release_with_contract_template, :native, project: project) }
|
|
it_behaves_like 'an approvable UI'
|
|
end
|
|
|
|
context 'for a material release' do
|
|
subject { create(:material_release_with_contract_template, :native, project: project) }
|
|
it_behaves_like 'an approvable UI'
|
|
end
|
|
|
|
context 'for a acquired media release' do
|
|
subject { create(:acquired_media_release_with_contract_template, :native, project: project) }
|
|
it_behaves_like 'an approvable UI'
|
|
end
|
|
|
|
context 'for a medical release' do
|
|
subject { create(:medical_release_with_contract_template, :native, project: project) }
|
|
it_behaves_like 'an approvable UI'
|
|
end
|
|
|
|
context 'for a misc release' do
|
|
subject { create(:misc_release_with_contract_template, :native, project: project) }
|
|
it_behaves_like 'an approvable UI'
|
|
end
|
|
end
|