Initial commit
This commit is contained in:
169
spec/controllers/contract_templates_controller_spec.rb
Normal file
169
spec/controllers/contract_templates_controller_spec.rb
Normal file
@@ -0,0 +1,169 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
describe ContractTemplatesController do
|
||||
render_views
|
||||
|
||||
let(:current_user) { create(:user, :manager) }
|
||||
let(:project) { create(:project, members: current_user, account: current_user.primary_account) }
|
||||
|
||||
before do
|
||||
sign_in(current_user)
|
||||
end
|
||||
|
||||
describe '#index' do
|
||||
it 'responds successfully' do
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
||||
it 'renders content' do
|
||||
contract_template = create(:contract_template,
|
||||
name: 'My Contract Template', fee: 50, release_type: 'appearance',
|
||||
project: project)
|
||||
sign_path = new_account_project_contract_template_appearance_release_path(project.account, project, contract_template)
|
||||
sign_url = new_account_project_contract_template_appearance_release_url(project.account, project, contract_template)
|
||||
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response.body).to have_content('My Contract Template')
|
||||
expect(response.body).to have_link('Create New Release Template', href: new_project_contract_template_path(project))
|
||||
expect(response.body).to have_link('Import Release Template', href: new_project_release_template_imports_path(project))
|
||||
expect(response.body).to have_link('Copy Release URL', href: sign_url)
|
||||
expect(response.body).to have_content('Manage')
|
||||
expect(response.body).to have_link('Sign', href: sign_path)
|
||||
expect(response.body).to have_link('Print')
|
||||
|
||||
end
|
||||
|
||||
context 'when there are no contract templates' do
|
||||
it 'renders an empty message' do
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response.body).to have_content('Release Templates will appear here')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when current user is an associate' do
|
||||
let(:current_user) { create(:user, :associate) }
|
||||
|
||||
it 'does not show the new contract template button' do
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response.body).not_to have_link('Create New Release Template')
|
||||
expect(response.body).not_to have_link('Import Release Template')
|
||||
expect(response.body).not_to have_link('Delete')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when there are many records' do
|
||||
it 'paginates the table' do
|
||||
create_list(:contract_template, 20, project: project)
|
||||
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response.body).to have_link('2', href: project_contract_templates_path(project, page: 2))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#new' do
|
||||
it 'responds ok' do
|
||||
get :new, params: { project_id: project }
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
end
|
||||
|
||||
describe '#create' do
|
||||
it 'redirects' do
|
||||
post :create, params: { project_id: project, contract_template: contract_template_params(valid: true) }
|
||||
|
||||
expect(response).to redirect_to(project_contract_templates_path(project))
|
||||
end
|
||||
|
||||
it 'sends pdf file for a preview' do
|
||||
post :create, params: { project_id: project, contract_template: contract_template_params(valid: true), commit: 'preview' }
|
||||
|
||||
expect(response.header['Content-Type']).to include('application/pdf')
|
||||
expect(response.header['Content-Disposition']).to include('inline')
|
||||
end
|
||||
|
||||
it 'creates a new record' do
|
||||
expect do
|
||||
post :create, params: { project_id: project, contract_template: contract_template_params }
|
||||
end.to change(ContractTemplate, :count).by(1)
|
||||
end
|
||||
|
||||
context 'when save fails' do
|
||||
it 'responds ok' do
|
||||
post :create, params: { project_id: project, contract_template: contract_template_params(valid: false) }
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
end
|
||||
|
||||
context 'when current user is an associate' do
|
||||
let(:current_user) { create(:user, :associate) }
|
||||
|
||||
it 'raises exception' do
|
||||
expect do
|
||||
post :create, params: { project_id: project, contract_template: contract_template_params }
|
||||
end.to raise_error(Pundit::NotAuthorizedError)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#destroy' do
|
||||
let!(:contract_template) { create(:contract_template, project: project) }
|
||||
|
||||
it 'redirects' do
|
||||
delete :destroy, params: { id: contract_template }
|
||||
|
||||
expect(response).to be_redirect
|
||||
expect(response).to redirect_to [project, :contract_templates]
|
||||
end
|
||||
|
||||
it 'archives the record but does not delete' do
|
||||
expect do
|
||||
delete :destroy, params: { id: contract_template }
|
||||
end.to change(ContractTemplate, :count).by(0)
|
||||
expect(ContractTemplate.find(contract_template.id).archived_at).not_to be_nil
|
||||
end
|
||||
|
||||
context 'when contract template has associated releases' do
|
||||
let(:contract_template) { create(:contract_template, appearance_releases: build_list(:appearance_release, 1), project: project) }
|
||||
|
||||
it 'does not raise error' do
|
||||
expect do
|
||||
delete :destroy, params: { id: contract_template }
|
||||
end.not_to raise_error
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def contract_template_params(valid: true)
|
||||
if valid
|
||||
attributes_for(:contract_template).merge(exploitable_rights_params)
|
||||
else
|
||||
attributes_for(:contract_template).except(:name)
|
||||
end
|
||||
end
|
||||
|
||||
def exploitable_rights_params
|
||||
{
|
||||
applicable_medium_id: ApplicableMedium.last.id,
|
||||
applicable_medium_text: 'applicable_media',
|
||||
territory_id: Territory.last.id,
|
||||
territory_text: 'territory',
|
||||
term_id: Term.last.id,
|
||||
term_text: 'term',
|
||||
restriction_id: Restriction.last.id,
|
||||
restriction_text: 'restrictions'
|
||||
}
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user