implement amendment signing for appearance releases

This commit is contained in:
Bilal
2020-08-04 10:28:41 +02:00
parent 8214ba9e67
commit ee710d7cd1
14 changed files with 374 additions and 117 deletions

View File

@@ -1,112 +1,118 @@
require 'rails_helper'
RSpec.describe Public::AmendmentsController, type: :controller do
let(:user) { create(:user) }
let(:account) { user.primary_account }
let(:project) { create(:project, account: account) }
let(:contract_template) { create(:location_release_contract_template, :with_amendment_clause, project: project) }
let(:location_release) { create(:location_release, contract_template: contract_template, project: project) }
release_types = %i[location_release appearance_release]
render_views
release_types.each do |release_type|
describe "#new" do
it "shows amendment signing form for non-signed amendment of a release" do
expect(location_release.amendment_signed?).to be_falsey
RSpec.describe Public::AmendmentsController, type: :controller do
let(:user) { create(:user) }
let(:account) { user.primary_account }
let(:project) { create(:project, account: account) }
let(:contract_template) { create("#{release_type}_contract_template".to_sym, :with_amendment_clause, project: project) }
let(:release) { create(release_type, contract_template: contract_template, project: project) }
get :new, params: {
account_id: account,
project_id: project,
contract_template_id: location_release.contract_template,
location_release_id: location_release
}
render_views
expect(response).to be_successful
describe "#new" do
it "shows amendment signing form for non-signed amendment of a release" do
expect(release.amendment_signed?).to be_falsey
body = CGI.unescape_html(response.body)
expect(body).not_to match already_signed_message
end
it "shows already signed message for signed amendment of a release" do
signed_release = create(:location_release, :amendment_signed, contract_template: contract_template, project: project)
expect(signed_release.amendment_signed?).to be_truthy
get :new, params: {
account_id: account,
project_id: project,
contract_template_id: location_release.contract_template,
location_release_id: signed_release
}
expect(response).to be_successful
body = CGI.unescape_html(response.body)
expect(body).to match already_signed_message
end
end
describe "#create" do
it "signs amendment" do
expect(location_release.amendment_signed?).to be_falsey
post :create, params: {
account_id: account,
project_id: project,
contract_template_id: location_release.contract_template,
location_release_id: location_release,
location_release: {
amendment_signer_name: "Signer Name",
amendment_signature_base64: signature_base64
get :new, params: {
account_id: account,
project_id: project,
contract_template_id: release.contract_template,
"#{release_type}_id": release
}
}
expect(response).to be_successful
expect(response).to be_successful
body = CGI.unescape_html(response.body)
expect(body).not_to match already_signed_message
expect(body).to match signed_successfully_message
body = CGI.unescape_html(response.body)
expect(body).not_to match already_signed_message
end
expect(LocationRelease.last.amendment_signed?).to be_truthy
expect(LocationRelease.last.amendment_signer_name).to eq "Signer Name"
end
it "shows already signed message for signed amendment of a release" do
signed_release = create(release_type, :amendment_signed, contract_template: contract_template, project: project)
it "shows already signed message for signed amendment of a release" do
signed_release = create(:location_release, :amendment_signed, name: "Test Loc", amendment_signer_name: "Big Signer", contract_template: contract_template, project: project)
expect(signed_release.amendment_signed?).to be_truthy
expect(signed_release.amendment_signed?).to be_truthy
post :create, params: {
account_id: account,
project_id: project,
contract_template_id: location_release.contract_template,
location_release_id: signed_release,
location_release: {
amendment_signer_name: "Signer Who",
amendment_signature_base64: signature_base64
get :new, params: {
account_id: account,
project_id: project,
contract_template_id: release.contract_template,
"#{release_type}_id": signed_release
}
}
expect(response).to be_successful
expect(response).to be_successful
body = CGI.unescape_html(response.body)
expect(body).to match already_signed_message
body = CGI.unescape_html(response.body)
expect(body).to match already_signed_message
end
end
expect(signed_release.amendment_signed?).to be_truthy
expect(signed_release.amendment_signer_name).to eq "Big Signer"
describe "#create" do
it "signs amendment" do
expect(release.amendment_signed?).to be_falsey
post :create, params: {
account_id: account,
project_id: project,
contract_template_id: release.contract_template,
"#{release_type}_id": release,
"#{release_type}": {
amendment_signer_name: "Signer Name",
amendment_signature_base64: signature_base64
}
}
expect(response).to be_successful
body = CGI.unescape_html(response.body)
expect(body).not_to match already_signed_message
expect(body).to match signed_successfully_message
expect(release.class.last.amendment_signed?).to be_truthy
expect(release.class.last.amendment_signer_name).to eq "Signer Name"
end
it "shows already signed message for signed amendment of a release" do
signed_release = create(release_type, :amendment_signed, amendment_signer_name: "Big Signer", contract_template: contract_template, project: project)
expect(signed_release.amendment_signed?).to be_truthy
post :create, params: {
account_id: account,
project_id: project,
contract_template_id: release.contract_template,
"#{release_type}_id": signed_release,
"#{release_type}": {
amendment_signer_name: "Signer Who",
amendment_signature_base64: signature_base64
}
}
expect(response).to be_successful
body = CGI.unescape_html(response.body)
expect(body).to match already_signed_message
expect(signed_release.amendment_signed?).to be_truthy
expect(signed_release.amendment_signer_name).to eq "Big Signer"
end
end
private
def already_signed_message
t 'public.amendments.create.amendment_already_signed_message'
end
def signed_successfully_message
t 'public.amendments.create.amendment_signed_message'
end
def signature_base64
@signature_base64 ||= Base64Image.from_image(file_fixture('signature.png')).data_uri
end
end
private
def already_signed_message
t 'public.amendments.create.amendment_already_signed_message'
end
def signed_successfully_message
t 'public.amendments.create.amendment_signed_message'
end
def signature_base64
@signature_base64 ||= Base64Image.from_image(file_fixture('signature.png')).data_uri
end
end
end