diff --git a/app/models/signature.rb b/app/models/signature.rb index 47408858a..06ade968c 100644 --- a/app/models/signature.rb +++ b/app/models/signature.rb @@ -10,6 +10,8 @@ class Signature < ActiveRecord::Base delegate :signable, to: :signature_sheet + before_validation :clean_document_number + def verified? user_exists? || in_census? end @@ -58,6 +60,11 @@ class Signature < ActiveRecord::Base User.create!(user_params) end + def clean_document_number + return if self.document_number.blank? + self.document_number = self.document_number.gsub(/[^a-z0-9]+/i, "").upcase + end + def random_password (0...20).map { ('a'..'z').to_a[rand(26)] }.join end diff --git a/spec/models/signature_spec.rb b/spec/models/signature_spec.rb index 6f7237484..8bb090614 100644 --- a/spec/models/signature_spec.rb +++ b/spec/models/signature_spec.rb @@ -13,6 +13,12 @@ describe Signature do it "should not be valid without a document number" do signature.document_number = nil expect(signature).to_not be_valid + + signature.document_number = "" + expect(signature).to_not be_valid + + signature.document_number = " " + expect(signature).to_not be_valid end it "should not be valid without an associated signature sheet" do @@ -22,6 +28,24 @@ describe Signature do 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 "#verified?" do it "returns true if user exists" do