From cefd310cc02b6f73b561b030dcfd21f01b94e730 Mon Sep 17 00:00:00 2001 From: Artur Beljajev Date: Mon, 12 Dec 2016 04:48:31 +0200 Subject: [PATCH] Make street, city, zip and country optional if address processing is disabled #251 --- app/models/contact.rb | 4 ++-- spec/models/contact_spec.rb | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/app/models/contact.rb b/app/models/contact.rb index ee9410e98..6530cb8bb 100644 --- a/app/models/contact.rb +++ b/app/models/contact.rb @@ -18,8 +18,8 @@ class Contact < ActiveRecord::Base accepts_nested_attributes_for :legal_documents - validates :name, :phone, :email, :ident, :ident_type, - :street, :city, :zip, :country_code, :registrar, presence: true + validates :name, :phone, :email, :ident, :ident_type, :registrar, presence: true + validates :street, :city, :zip, :country_code, presence: true, if: 'self.class.address_processing?' # Phone nr validation is very minimam in order to support legacy requirements validates :phone, format: /\+[0-9]{1,3}\.[0-9]{1,14}?/ diff --git a/spec/models/contact_spec.rb b/spec/models/contact_spec.rb index fa8524f78..e1c88cd53 100644 --- a/spec/models/contact_spec.rb +++ b/spec/models/contact_spec.rb @@ -406,4 +406,39 @@ RSpec.describe Contact, db: false do expect(described_class.address_attribute_names).to eq(attributes) end end + + describe 'address validation', db: false do + let(:contact) { described_class.new } + subject(:errors) { contact.errors } + + required_attributes = %i(street city zip country_code) + + context 'when address processing is enabled' do + before do + allow(described_class).to receive(:address_processing?).and_return(true) + end + + required_attributes.each do |attr_name| + it "rejects absent #{attr_name}" do + contact.send("#{attr_name}=", nil) + contact.validate + expect(errors).to have_key(attr_name) + end + end + end + + context 'when address processing is disabled' do + before do + allow(described_class).to receive(:address_processing?).and_return(false) + end + + required_attributes.each do |attr_name| + it "accepts absent #{attr_name}" do + contact.send("#{attr_name}=", nil) + contact.validate + expect(errors).to_not have_key(attr_name) + end + end + end + end end