265 lines
9.5 KiB
Ruby
265 lines
9.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
RSpec.feature 'User manages contract templates', type: :feature do
|
|
let(:current_user) { create(:user, :manager) }
|
|
let(:project) { create(:project, members: current_user, account: current_user.primary_account) }
|
|
let(:project2) { create(:project, members: current_user, account: current_user.primary_account, name: 'New project') }
|
|
|
|
before do
|
|
sign_in(current_user)
|
|
end
|
|
|
|
scenario 'creating a new release template' do
|
|
visit new_project_contract_template_path(project)
|
|
|
|
fill_in 'Name', with: 'My Release Template'
|
|
select 'Appearance Release', from: 'Release type'
|
|
fill_in_trix body_field, with: 'You agree to this release.'
|
|
fill_hidden guardian_clause_field, with: 'Your minor agrees to this release.'
|
|
select 'All', from: 'Applicable Media'
|
|
select 'Other', from: 'Territory'
|
|
fill_in 'Describe other territory', with: 'North America only'
|
|
select 'In perpetuity', from: 'Term'
|
|
select 'None', from: 'Restriction'
|
|
click_on 'Create Release Template'
|
|
|
|
expect(page).to have_content('The release template has been created')
|
|
end
|
|
|
|
scenario 'preview new talent release template without guardian clause' do
|
|
visit new_project_contract_template_path(project)
|
|
select 'Talent Release', from: 'Release type'
|
|
|
|
click_on 'Preview'
|
|
expect(content_type).to eq('application/pdf')
|
|
expect(content_disposition).to include('inline')
|
|
expect(pdf_body).to have_content('PREVIEW ONLY')
|
|
expect(pdf_body).to have_content('Talent Release')
|
|
expect(pdf_body).to have_content('Body text goes here')
|
|
expect(pdf_body).to have_content('Guardian')
|
|
end
|
|
|
|
scenario 'preview new talent release template with guardian clause' do
|
|
visit new_project_contract_template_path(project)
|
|
select 'Talent Release', from: 'Release type'
|
|
fill_hidden guardian_clause_field, with: 'Your minor agrees to this release.'
|
|
|
|
click_on 'Preview'
|
|
expect(content_type).to eq('application/pdf')
|
|
expect(content_disposition).to include('inline')
|
|
expect(pdf_body).to have_content('PREVIEW ONLY')
|
|
expect(pdf_body).to have_content('Talent Release')
|
|
expect(pdf_body).to have_content('Body text goes here')
|
|
expect(pdf_body).to have_content('Guardian')
|
|
expect(pdf_body).to have_content('Your minor')
|
|
end
|
|
|
|
scenario 'preview new appearance release template without guardian clause' do
|
|
visit new_project_contract_template_path(project)
|
|
select 'Appearance Release', from: 'Release type'
|
|
|
|
click_on 'Preview'
|
|
expect(content_type).to eq('application/pdf')
|
|
expect(content_disposition).to include('inline')
|
|
expect(pdf_body).to have_content('PREVIEW ONLY')
|
|
expect(pdf_body).to have_content('Appearance Release')
|
|
expect(pdf_body).to have_content('Body text goes here')
|
|
expect(pdf_body).to have_content('Guardian')
|
|
end
|
|
|
|
scenario 'preview new appearance release template with guardian clause' do
|
|
visit new_project_contract_template_path(project)
|
|
select 'Appearance Release', from: 'Release type'
|
|
fill_hidden guardian_clause_field, with: 'Your minor agrees to this release.'
|
|
|
|
click_on 'Preview'
|
|
expect(content_type).to eq('application/pdf')
|
|
expect(content_disposition).to include('inline')
|
|
expect(pdf_body).to have_content('PREVIEW ONLY')
|
|
expect(pdf_body).to have_content('Appearance Release')
|
|
expect(pdf_body).to have_content('Body text goes here')
|
|
expect(pdf_body).to have_content('Guardian')
|
|
expect(pdf_body).to have_content('Your minor')
|
|
end
|
|
|
|
scenario 'different release type generates different pdf' do
|
|
visit new_project_contract_template_path(project)
|
|
select 'Acquired Media Release', from: 'Release type'
|
|
click_on 'Preview'
|
|
expect(content_type).to eq('application/pdf')
|
|
expect(content_disposition).to include('inline')
|
|
expect(pdf_body).to have_content('PREVIEW ONLY')
|
|
expect(pdf_body).to have_content('Acquired Media Release')
|
|
expect(pdf_body).not_to have_content('Guardian')
|
|
|
|
visit new_project_contract_template_path(project)
|
|
select 'Location Release', from: 'Release type'
|
|
click_on 'Preview'
|
|
expect(content_type).to eq('application/pdf')
|
|
expect(content_disposition).to include('inline')
|
|
expect(pdf_body).to have_content('PREVIEW ONLY')
|
|
expect(pdf_body).to have_content('Location Release')
|
|
expect(pdf_body).not_to have_content('Guardian')
|
|
|
|
visit new_project_contract_template_path(project)
|
|
select 'Material Release', from: 'Release type'
|
|
click_on 'Preview'
|
|
expect(content_type).to eq('application/pdf')
|
|
expect(content_disposition).to include('inline')
|
|
expect(pdf_body).to have_content('PREVIEW ONLY')
|
|
expect(pdf_body).to have_content('Material Release')
|
|
expect(pdf_body).not_to have_content('Guardian')
|
|
end
|
|
|
|
context 'preventing creation of release template with wrong fee value' do
|
|
before do
|
|
visit new_project_contract_template_path(project)
|
|
|
|
fill_in 'Name', with: 'My Release Template'
|
|
select 'Appearance Release', from: 'Release type'
|
|
fill_in_trix body_field, with: 'You agree to this release.'
|
|
fill_hidden guardian_clause_field, with: 'Your minor agrees to this release.'
|
|
select 'All', from: 'Applicable Media'
|
|
select 'Other', from: 'Territory'
|
|
fill_in 'Describe other territory', with: 'North America only'
|
|
select 'In perpetuity', from: 'Term'
|
|
select 'None', from: 'Restriction'
|
|
end
|
|
|
|
scenario 'Should not allow negative fees' do
|
|
fill_in 'Fee', with: '-200'
|
|
click_on 'Create Release Template'
|
|
expect(page).not_to have_content('The release template has been created')
|
|
end
|
|
|
|
scenario 'Should not allow fees with more than 9 digits' do
|
|
fill_in 'Fee', with: '9999999999'
|
|
click_on 'Create Release Template'
|
|
expect(page).not_to have_content('The release template has been created')
|
|
end
|
|
end
|
|
|
|
scenario 'contract template preview is shown before printing' do
|
|
create(:appearance_release_contract_template, body: 'Contract legal language', project: project)
|
|
visit project_contract_templates_path(project)
|
|
click_on 'Manage'
|
|
expect(page).to have_content('Print')
|
|
|
|
click_link 'Print'
|
|
|
|
expect(page).to have_content preview_heading
|
|
expect(page).to have_selector 'embed'
|
|
end
|
|
|
|
scenario 'printing blank release template' do
|
|
create(:appearance_release_contract_template, body: 'Contract legal language', project: project)
|
|
visit project_contract_templates_path(project)
|
|
click_on 'Manage'
|
|
expect(page).to have_content('Print')
|
|
|
|
click_link 'Print'
|
|
|
|
fill_in 'Number of copies', with: '-1'
|
|
click_on t('shared.print')
|
|
expect(page).to have_content(t('contract_templates.blank_contracts.create.number_of_copies_invalid_notice'))
|
|
|
|
fill_in 'Number of copies', with: 2
|
|
click_on t('shared.print')
|
|
|
|
expect(content_type).to eq('application/pdf')
|
|
expect(content_disposition).to include('inline')
|
|
expect(pdf_body).to have_content('Contract legal language', count: 2)
|
|
expect(pdf_body).to have_content('Appearance Release', count: 2)
|
|
expect(pdf_body).to have_content('Name: _____', count: 4) #2 times for person name and 2 times for guardian name
|
|
expect(pdf_body).to have_content(t 'blank_contracts.pdf.do_not_copy_warning', count: 2)
|
|
end
|
|
|
|
scenario 'archiving an existing release template', js: true do
|
|
create(:contract_template, project: project)
|
|
|
|
visit project_contract_templates_path(project)
|
|
|
|
expect(page).to have_content('Test template')
|
|
|
|
click_on 'Manage'
|
|
accept_alert do
|
|
click_on 'Archive'
|
|
end
|
|
|
|
expect(page).to have_content('The release template has been archived')
|
|
expect(page).not_to have_content('Test template')
|
|
end
|
|
|
|
scenario 'archived contract templates from other projects are not shown when importing contract templates' do
|
|
create(:contract_template, :archived, project: project2, name: 'Archived template')
|
|
create(:contract_template, project: project2, name: 'Active template')
|
|
create(:contract_template, project: project)
|
|
|
|
visit project_contract_templates_path(project)
|
|
expect(page).to have_content('Test template')
|
|
|
|
click_on import_template_button
|
|
|
|
expect(page).not_to have_content('Test template')
|
|
expect(page).not_to have_content('Archived template')
|
|
expect(page).to have_content('Active template')
|
|
end
|
|
|
|
context 'When the user is associate' do
|
|
let(:current_user) { create(:user, :associate) }
|
|
|
|
it 'does not show management buttons for release templates' do
|
|
visit project_contract_templates_path(project)
|
|
|
|
expect(page).not_to have_content('Create New Release Template')
|
|
expect(page).not_to have_content(import_template_button)
|
|
expect(page).not_to have_content('Delete')
|
|
end
|
|
end
|
|
|
|
context 'When the user is account manager' do
|
|
let(:current_user) { create(:user, :account_manager) }
|
|
|
|
it 'shows archive button for release template' do
|
|
create(:contract_template, project: project)
|
|
|
|
visit project_contract_templates_path(project)
|
|
|
|
click_on 'Manage'
|
|
expect(page).to have_content('Archive')
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def import_template_button
|
|
t 'contract_templates.index.actions.import'
|
|
end
|
|
|
|
def import_selected_templates_button
|
|
t 'release_template_imports.new.actions.import'
|
|
end
|
|
|
|
def preview_heading
|
|
t 'blank_contracts.new.preview_heading'
|
|
end
|
|
|
|
def fill_in_trix(id, with:)
|
|
find("trix-editor##{id}").click.set(with)
|
|
end
|
|
|
|
def body_field
|
|
'contract_template_body'
|
|
end
|
|
|
|
def guardian_clause_field
|
|
'contract_template_guardian_clause_trix_input_contract_template'
|
|
end
|
|
|
|
def fill_hidden(id, with:)
|
|
find(:xpath, "//input[@id='#{id}']", visible: false).set with
|
|
end
|
|
end
|