Settings are stored in the database, and so any changes to the settings done during the tests are automatically rolled back between one test and the next one. There were also a few places where we weren't using an `after` block but changing the setting at the end of the test.
284 lines
8.5 KiB
Ruby
284 lines
8.5 KiB
Ruby
require "rails_helper"
|
|
|
|
describe Signature do
|
|
|
|
let(:signature) { build(:signature) }
|
|
|
|
describe "validations" do
|
|
|
|
it "is valid" do
|
|
expect(signature).to be_valid
|
|
end
|
|
|
|
it "is not valid without a document number" do
|
|
signature.document_number = nil
|
|
expect(signature).not_to be_valid
|
|
|
|
signature.document_number = ""
|
|
expect(signature).not_to be_valid
|
|
|
|
signature.document_number = " "
|
|
expect(signature).not_to be_valid
|
|
end
|
|
|
|
it "is not valid without an associated signature sheet" do
|
|
signature.signature_sheet = nil
|
|
expect(signature).not_to be_valid
|
|
end
|
|
|
|
end
|
|
|
|
describe "custom validations" do
|
|
|
|
let(:signature) { build(:signature,
|
|
document_number: "12345678Z",
|
|
date_of_birth: "31/12/1980",
|
|
postal_code: "28013") }
|
|
|
|
before do
|
|
Setting["feature.remote_census"] = true
|
|
Setting["remote_census.request.date_of_birth"] = "some.value"
|
|
Setting["remote_census.request.postal_code"] = "some.value"
|
|
end
|
|
|
|
it "is valid" do
|
|
expect(signature).to be_valid
|
|
end
|
|
|
|
it "is not valid without a document number" do
|
|
signature.document_number = nil
|
|
expect(signature).not_to be_valid
|
|
end
|
|
|
|
it "is not valid without a date of birth" do
|
|
signature.date_of_birth = nil
|
|
|
|
expect(signature).not_to be_valid
|
|
end
|
|
|
|
it "is not valid without a postal_code" do
|
|
signature.postal_code = nil
|
|
|
|
expect(signature).not_to be_valid
|
|
end
|
|
|
|
end
|
|
|
|
describe "#clean_document_number" do
|
|
it "removes non alphanumeric characters" do
|
|
signature = create(:signature, document_number: "123-[;,9]")
|
|
expect(signature.document_number).to eq("1239")
|
|
end
|
|
|
|
it "upcases letter in document number" do
|
|
signature = create(:signature, document_number: "123a")
|
|
expect(signature.document_number).to eq("123A")
|
|
end
|
|
|
|
it "deals gracefully with empty document numbers" do
|
|
signature = build(:signature, document_number: "")
|
|
signature.clean_document_number
|
|
expect(signature.document_number).to eq("")
|
|
end
|
|
end
|
|
|
|
describe "#verify" do
|
|
|
|
describe "existing user" do
|
|
|
|
it "assigns vote to user on proposal" do
|
|
user = create(:user, :level_two, document_number: "123A")
|
|
signature = create(:signature, document_number: user.document_number)
|
|
proposal = signature.signable
|
|
|
|
signature.verify
|
|
|
|
expect(user.voted_for?(proposal)).to be
|
|
end
|
|
|
|
it "assigns vote to user on budget investment" do
|
|
investment = create(:budget_investment)
|
|
signature_sheet = create(:signature_sheet, signable: investment)
|
|
user = create(:user, :level_two, document_number: "123A")
|
|
signature = create(:signature, document_number: user.document_number, signature_sheet: signature_sheet)
|
|
|
|
signature.verify
|
|
|
|
expect(user.voted_for?(investment)).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.verify
|
|
signature.verify
|
|
|
|
expect(Vote.count).to eq(1)
|
|
end
|
|
|
|
it "does not assigns vote to invalid user on budget investment" do
|
|
investment = create(:budget_investment)
|
|
signature_sheet = create(:signature_sheet, signable: investment)
|
|
user = create(:user, document_number: "123A")
|
|
signature = create(:signature, document_number: user.document_number, signature_sheet: signature_sheet)
|
|
|
|
signature.verify
|
|
|
|
expect(user.voted_for?(investment)).not_to be
|
|
expect(Vote.count).to eq(0)
|
|
end
|
|
|
|
it "does not assign vote to user multiple times on budget investment" do
|
|
investment = create(:budget_investment)
|
|
signature_sheet = create(:signature_sheet, signable: investment)
|
|
user = create(:user, :level_two, document_number: "123A")
|
|
signature = create(:signature, document_number: user.document_number, signature_sheet: signature_sheet)
|
|
|
|
signature.verify
|
|
signature.verify
|
|
|
|
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.verify
|
|
|
|
expect(Vote.count).to eq(1)
|
|
end
|
|
|
|
it "does not assign vote to user if already voted on budget investment" do
|
|
investment = create(:budget_investment)
|
|
user = create(:user, :level_two, document_number: "123A")
|
|
vote = create(:vote, votable: investment, voter: user)
|
|
|
|
signature_sheet = create(:signature_sheet, signable: investment)
|
|
signature = create(:signature, document_number: user.document_number, signature_sheet: signature_sheet)
|
|
|
|
expect(Vote.count).to eq(1)
|
|
|
|
signature.verify
|
|
|
|
expect(Vote.count).to eq(1)
|
|
end
|
|
|
|
it "marks the vote as coming from a signature" do
|
|
signature = create(:signature, document_number: "12345678Z")
|
|
|
|
signature.verify
|
|
|
|
expect(Vote.last.signature).to eq(signature)
|
|
end
|
|
|
|
end
|
|
|
|
describe "inexistent user" do
|
|
|
|
it "creates a user with that document number" do
|
|
create(:geozone, census_code: "01")
|
|
signature = create(:signature, document_number: "12345678Z")
|
|
proposal = signature.signable
|
|
|
|
signature.verify
|
|
|
|
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
|
|
expect(user.geozone).to be
|
|
expect(user.gender).to be
|
|
expect(user.date_of_birth).to be
|
|
end
|
|
|
|
it "assign the vote to newly created user" do
|
|
signature = create(:signature, document_number: "12345678Z")
|
|
proposal = signature.signable
|
|
|
|
signature.verify
|
|
|
|
user = signature.user
|
|
expect(user.voted_for?(proposal)).to be
|
|
end
|
|
|
|
it "assigns signature to vote" do
|
|
signature = create(:signature, document_number: "12345678Z")
|
|
|
|
signature.verify
|
|
|
|
expect(Vote.last.signature).to eq(signature)
|
|
end
|
|
end
|
|
|
|
describe "document in census" do
|
|
|
|
it "calls assign_vote_to_user" do
|
|
signature = create(:signature, document_number: "12345678Z")
|
|
|
|
allow(signature).to receive(:assign_vote_to_user)
|
|
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 in census throught CustomCensusApi" do
|
|
|
|
before do
|
|
Setting["feature.remote_census"] = true
|
|
Setting["remote_census.request.date_of_birth"] = "some.value"
|
|
Setting["remote_census.request.postal_code"] = "some.value"
|
|
access_user_data = "get_habita_datos_response.get_habita_datos_return.datos_habitante.item"
|
|
access_residence_data = "get_habita_datos_response.get_habita_datos_return.datos_vivienda.item"
|
|
Setting["remote_census.response.date_of_birth"] = "#{access_user_data}.fecha_nacimiento_string"
|
|
Setting["remote_census.response.postal_code"] = "#{access_residence_data}.codigo_postal"
|
|
Setting["remote_census.response.valid"] = access_user_data
|
|
end
|
|
|
|
it "calls assign_vote_to_user" do
|
|
signature = create(:signature, document_number: "12345678Z",
|
|
date_of_birth: "31/12/1980",
|
|
postal_code: "28013")
|
|
|
|
expect_any_instance_of(Signature).to receive(:assign_vote_to_user).exactly(1).times
|
|
|
|
signature.verify
|
|
end
|
|
|
|
end
|
|
|
|
describe "document not in census" do
|
|
|
|
it "does not call assign_vote_to_user" do
|
|
signature = create(:signature, document_number: "123A")
|
|
|
|
expect(signature).not_to receive(:assign_vote_to_user)
|
|
signature.verify
|
|
end
|
|
|
|
it "maintains signature as not verified" do
|
|
signature = create(:signature, document_number: "123A")
|
|
|
|
signature.verify
|
|
expect(signature).not_to be_verified
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
end
|