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) } render_views describe "#new" do it "shows amendment signing form for non-signed amendment of a release" do expect(location_release.amendment_signed?).to be_falsey get :new, params: { account_id: account, project_id: project, contract_template_id: location_release.contract_template, location_release_id: location_release } expect(response).to be_successful 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 } } 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(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(: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 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 } } 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