From 0deba76db136a457c626a1ffa8e7d31cec7dc391 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Wed, 21 Dec 2016 18:46:38 +0100 Subject: [PATCH] adds specs --- spec/features/admin/signature_sheets_spec.rb | 68 ++++++-- spec/models/signature_spec.rb | 171 ++++++++++++++----- 2 files changed, 181 insertions(+), 58 deletions(-) diff --git a/spec/features/admin/signature_sheets_spec.rb b/spec/features/admin/signature_sheets_spec.rb index 3ba13d819..4c959d1ee 100644 --- a/spec/features/admin/signature_sheets_spec.rb +++ b/spec/features/admin/signature_sheets_spec.rb @@ -1,3 +1,5 @@ +require 'rails_helper' + feature 'Signature sheets' do background do @@ -5,31 +7,61 @@ feature 'Signature sheets' do login_as(admin.user) end - scenario "Index" + scenario "Index" do + 3.times { create(:signature_sheet) } - scenario 'Create' do - visit admin_path + visit admin_signature_sheets_path - click_link 'Signature Sheets' - click_link 'New' + expect(page).to have_css(".signature_sheet", count: 3) - select "Proposal", from: "signable_type" - fill_in "signable_id", with: "1" - fill_in "document_numbers", with: "12345678Z, 99999999Z" - click_button "Save" - - expect(page).to have_content "Signature sheet saved successfully" + SignatureSheet.all.each do |signature_sheet| + expect(page).to have_content signature_sheet.name + end end - scenario 'Errors on create' + scenario 'Create' do + proposal = create(:proposal) + visit new_admin_signature_sheet_path + + select "Citizen proposal", from: "signature_sheet_signable_type" + fill_in "signature_sheet_signable_id", with: proposal.id + fill_in "signature_sheet_document_numbers", with: "12345678Z, 99999999Z" + click_button "Create signature sheet" + + expect(page).to have_content "Signature sheet created successfully" + end + + scenario 'Errors on create' do + visit new_admin_signature_sheet_path + + click_button "Create signature sheet" + + expect(page).to have_content error_message + end scenario 'Show' do - #display signable - #display created_at - #display author - #display valid signatures count - #display invalid signatures count - #display invalid signatures with their error + proposal = create(:proposal) + user = Administrator.first.user + signature_sheet = create(:signature_sheet, + signable: proposal, + document_numbers: "12345678Z, 123A, 123B", + author: user) + signature_sheet.verify_signatures + + visit admin_signature_sheet_path(signature_sheet) + + expect(page).to have_content "Citizen proposal #{proposal.id}" + expect(page).to have_content "12345678Z, 123A, 123B" + expect(page).to have_content signature_sheet.created_at.strftime("%d %b %H:%M") + expect(page).to have_content user.name + + within("#verified_signatures") do + expect(page).to have_content 1 + end + + within("#unverified_signatures") do + expect(page).to have_content 2 + end end end \ No newline at end of file diff --git a/spec/models/signature_spec.rb b/spec/models/signature_spec.rb index fe3ee47e0..6f7237484 100644 --- a/spec/models/signature_spec.rb +++ b/spec/models/signature_spec.rb @@ -5,6 +5,7 @@ describe Signature do let(:signature) { build(:signature) } describe "validations" do + it "should be valid" do expect(signature).to be_valid end @@ -18,61 +19,151 @@ describe Signature do signature.signature_sheet = nil expect(signature).to_not be_valid end - end - - describe "#in_census" do - it "checks for all document_types" do - #### - end - end - - describe "#verify" do - - describe "valid", :focus do - it "asigns vote to user" do - proposal = create(:proposal) - user = create(:user, document_number: "123A") - signature_sheet = create(:signature_sheet, signable: proposal) - signature = create(:signature, signature_sheet: signature_sheet, document_number: "123A") - - signature.verify - expect(user.voted_for?(proposal)).to be - end - - it "sets status to verified" do - - end - - end - - describe "invalid" do - it "sets status to error" - it "does not asign any votes" - end end describe "#verified?" do - it "returns true if user exists" do + it "returns true if user exists" do + user = create(:user, :level_two, document_number: "123A") + signature = create(:signature, document_number: user.document_number) + + expect(signature.verified?).to eq(true) + end + + it "returns true if document number in census" do + signature = create(:signature, document_number: "12345678Z") + + expect(signature.verified?).to eq(true) + end + + it "returns false if user does not exist and not in census" do + signature = create(:signature, document_number: "123A") + + expect(signature.verified?).to eq(false) end - it "returns true if document number in census" - it "returns false if user does not exist and not in census" end describe "#assign_vote" do describe "existing user" do - it "assigns vote to user" - it "does not assign vote to user if already voted" - it "marks the vote as coming from a signature" + + it "assigns vote to user" do + user = create(:user, :level_two, document_number: "123A") + signature = create(:signature, document_number: user.document_number) + proposal = signature.signable + + signature.assign_vote + + expect(user.voted_for?(proposal)).to be + end + + it "does not assign vote to user multiple times" do + user = create(:user, :level_two, document_number: "123A") + signature = create(:signature, document_number: user.document_number) + + signature.assign_vote + signature.assign_vote + + expect(Vote.count).to eq(1) + end + + it "does not assign vote to user if already voted" do + proposal = create(:proposal) + user = create(:user, :level_two, document_number: "123A") + vote = create(:vote, votable: proposal, voter: user) + signature_sheet = create(:signature_sheet, signable: proposal) + signature = create(:signature, signature_sheet: signature_sheet, document_number: user.document_number) + + signature.assign_vote + + expect(Vote.count).to eq(1) + end + + it "marks the vote as coming from a signature" do + signature = create(:signature, document_number: "12345678Z") + + signature.assign_vote + + expect(Vote.last.signature).to eq(signature) + end + end describe "inexistent user" do - it "creates a user with that document number" - it "assign the vote to newly created user" - it "marks the vote as coming from a signature" + + it "creates a user with that document number" do + signature = create(:signature, document_number: "12345678Z") + proposal = signature.signable + + signature.assign_vote + + user = User.last + expect(user.document_number).to eq("12345678Z") + expect(user.created_from_signature).to eq(true) + expect(user.verified_at).to be + expect(user.erased_at).to be + end + + it "assign the vote to newly created user" do + signature = create(:signature, document_number: "12345678Z") + proposal = signature.signable + + signature.assign_vote + + user = signature.user + expect(user.voted_for?(proposal)).to be + end + + it "assigns signature to vote" do + signature = create(:signature, document_number: "12345678Z") + + signature.assign_vote + + expect(Vote.last.signature).to eq(signature) + end + end + + end + + describe "#verify" do + + describe "document in census" do + + it "calls assign_vote" do + signature = create(:signature, document_number: "12345678Z") + + expect(signature).to receive(:assign_vote) + signature.verify + end + + it "sets signature as verified" do + user = create(:user, :level_two, document_number: "123A") + signature = create(:signature, document_number: user.document_number) + + signature.verify + + expect(signature).to be_verified + end + + end + + describe "document not in census" do + + it "does not call assign_vote" do + signature = create(:signature, document_number: "123A") + + expect(signature).to_not receive(:assign_vote) + signature.verify + end + + it "maintains signature as not verified" do + signature = create(:signature, document_number: "123A") + + signature.verify + expect(signature).to_not be_verified + end end end