mirror of
https://github.com/internetee/registry.git
synced 2025-07-20 01:36:02 +02:00
Merge branch 'master' into migrate-fabricators-to-factory-bot-factories
# Conflicts: # Gemfile # lib/tasks/dev.rake # spec/models/contact_spec.rb
This commit is contained in:
commit
be959a8471
59 changed files with 2505 additions and 480 deletions
33
spec/models/contact/contact_phone_spec.rb
Normal file
33
spec/models/contact/contact_phone_spec.rb
Normal file
|
@ -0,0 +1,33 @@
|
|||
require 'rails_helper'
|
||||
require 'lib/validators/e164'
|
||||
|
||||
RSpec.describe Contact do
|
||||
let(:contact) { described_class.new }
|
||||
|
||||
describe 'phone', db: false do
|
||||
it_behaves_like 'e164' do
|
||||
let(:model) { contact }
|
||||
let(:attribute) { :phone }
|
||||
end
|
||||
end
|
||||
|
||||
describe 'phone validation', db: false do
|
||||
it 'rejects absent' do
|
||||
contact.phone = nil
|
||||
contact.validate
|
||||
expect(contact.errors).to be_added(:phone, :blank)
|
||||
end
|
||||
|
||||
it 'rejects all zeros in country code' do
|
||||
contact.phone = '+000.1'
|
||||
contact.validate
|
||||
expect(contact.errors).to be_added(:phone, :invalid)
|
||||
end
|
||||
|
||||
it 'rejects all zeros in subscriber number' do
|
||||
contact.phone = '+123.0'
|
||||
contact.validate
|
||||
expect(contact.errors).to be_added(:phone, :invalid)
|
||||
end
|
||||
end
|
||||
end
|
227
spec/models/contact/ident_spec.rb
Normal file
227
spec/models/contact/ident_spec.rb
Normal file
|
@ -0,0 +1,227 @@
|
|||
require 'active_model'
|
||||
require 'lib/validators/iso31661_alpha2'
|
||||
require 'lib/validators/iso8601'
|
||||
|
||||
RSpec.describe Contact::Ident, db: false do
|
||||
let(:ident) { described_class.new }
|
||||
|
||||
describe 'country code' do
|
||||
it_behaves_like 'iso31661_alpha2' do
|
||||
let(:model) { ident }
|
||||
let(:attribute) { :country_code }
|
||||
end
|
||||
end
|
||||
|
||||
describe 'code validation' do
|
||||
it 'rejects absent' do
|
||||
ident.code = nil
|
||||
ident.validate
|
||||
expect(ident.errors).to be_added(:code, :blank)
|
||||
end
|
||||
|
||||
context 'when type is :birthday' do
|
||||
let(:ident) { described_class.new(type: 'birthday') }
|
||||
|
||||
it_behaves_like 'iso8601' do
|
||||
let(:model) { ident }
|
||||
let(:attribute) { :code }
|
||||
end
|
||||
end
|
||||
|
||||
context 'when type is not :birthday' do
|
||||
let(:ident) { described_class.new(type: 'priv') }
|
||||
|
||||
it 'accepts any' do
|
||||
ident.code = '%123456789%'
|
||||
ident.validate
|
||||
expect(ident.errors).to_not include(:code)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when country code is EE' do
|
||||
context 'when type is :priv' do
|
||||
let(:ident) { described_class.new(country_code: 'EE', type: 'priv') }
|
||||
|
||||
it 'rejects invalid' do
|
||||
ident.code = 'invalid'
|
||||
ident.validate
|
||||
expect(ident.errors).to be_added(:code, :invalid_national_id, country: 'Estonia')
|
||||
end
|
||||
|
||||
it 'accepts valid' do
|
||||
ident.code = '47101010033'
|
||||
ident.validate
|
||||
expect(ident.errors).to_not be_added(:code, :invalid_national_id, country: 'Estonia')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when ident type is :org' do
|
||||
let(:ident) { described_class.new(country_code: 'EE', type: 'org') }
|
||||
|
||||
it 'rejects invalid' do
|
||||
ident.code = '1' * 7
|
||||
ident.validate
|
||||
expect(ident.errors).to be_added(:code, :invalid_reg_no, country: 'Estonia')
|
||||
end
|
||||
|
||||
it 'accepts valid length' do
|
||||
ident.code = '1' * 8
|
||||
ident.validate
|
||||
expect(ident.errors).to_not be_added(:code, :invalid_reg_no, country: 'Estonia')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when ident country code is not EE' do
|
||||
let(:ident) { described_class.new(country_code: 'US') }
|
||||
|
||||
it 'accepts any' do
|
||||
ident.code = 'test-123456789'
|
||||
ident.validate
|
||||
expect(ident.errors).to_not include(:code)
|
||||
end
|
||||
end
|
||||
|
||||
it 'translates :invalid_national_id error message' do
|
||||
expect(ident.errors.generate_message(:code, :invalid_national_id, country: 'Germany'))
|
||||
.to eq('does not conform to national identification number format of Germany')
|
||||
end
|
||||
|
||||
it 'translates :invalid_reg_no error message' do
|
||||
expect(ident.errors.generate_message(:code, :invalid_reg_no, country: 'Germany'))
|
||||
.to eq('does not conform to registration number format of Germany')
|
||||
end
|
||||
end
|
||||
|
||||
describe 'type validation' do
|
||||
before do
|
||||
allow(described_class).to receive(:types).and_return(%w(valid))
|
||||
end
|
||||
|
||||
it 'rejects absent' do
|
||||
ident.type = nil
|
||||
ident.validate
|
||||
expect(ident.errors).to be_added(:type, :blank)
|
||||
end
|
||||
|
||||
it 'rejects invalid' do
|
||||
ident.type = 'invalid'
|
||||
ident.validate
|
||||
expect(ident.errors).to be_added(:type, :inclusion)
|
||||
end
|
||||
|
||||
it 'accepts valid' do
|
||||
ident.type = 'valid'
|
||||
ident.validate
|
||||
expect(ident.errors).to_not be_added(:type, :inclusion)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'country code validation' do
|
||||
it 'rejects absent' do
|
||||
ident.country_code = nil
|
||||
ident.validate
|
||||
expect(ident.errors).to be_added(:country_code, :blank)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'mismatch validation' do
|
||||
let(:ident) { described_class.new(type: 'test', country_code: 'DE') }
|
||||
|
||||
before do
|
||||
mismatches = [Contact::Ident::MismatchValidator::Mismatch.new('test', Country.new('DE'))]
|
||||
allow(Contact::Ident::MismatchValidator).to receive(:mismatches).and_return(mismatches)
|
||||
end
|
||||
|
||||
it 'rejects mismatched' do
|
||||
ident.validate
|
||||
expect(ident.errors).to be_added(:base, :mismatch, type: 'test', country: 'Germany')
|
||||
end
|
||||
|
||||
it 'accepts matched' do
|
||||
ident.validate
|
||||
expect(ident.errors).to_not be_added(:base, :mismatch, type: 'another-test', country: 'Germany')
|
||||
end
|
||||
|
||||
it 'translates :mismatch error message' do
|
||||
expect(ident.errors.generate_message(:base, :mismatch, type: 'test', country: 'Germany'))
|
||||
.to eq('Ident type "test" is invalid for Germany')
|
||||
end
|
||||
end
|
||||
|
||||
describe '::types' do
|
||||
it 'returns types' do
|
||||
types = %w[
|
||||
org
|
||||
priv
|
||||
birthday
|
||||
]
|
||||
|
||||
expect(described_class.types).to eq(types)
|
||||
end
|
||||
end
|
||||
|
||||
describe '#birthday?' do
|
||||
context 'when type is birthday' do
|
||||
subject(:ident) { described_class.new(type: 'birthday') }
|
||||
it { is_expected.to be_birthday }
|
||||
end
|
||||
|
||||
context 'when type is not birthday' do
|
||||
subject(:ident) { described_class.new(type: 'priv') }
|
||||
it { is_expected.to_not be_birthday }
|
||||
end
|
||||
end
|
||||
|
||||
describe '#national_id?' do
|
||||
context 'when type is priv' do
|
||||
subject(:ident) { described_class.new(type: 'priv') }
|
||||
it { is_expected.to be_national_id }
|
||||
end
|
||||
|
||||
context 'when type is not' do
|
||||
subject(:ident) { described_class.new(type: 'org') }
|
||||
it { is_expected.to_not be_national_id }
|
||||
end
|
||||
end
|
||||
|
||||
describe '#reg_no?' do
|
||||
context 'when type is birthday' do
|
||||
subject(:ident) { described_class.new(type: 'org') }
|
||||
it { is_expected.to be_reg_no }
|
||||
end
|
||||
|
||||
context 'when type is not birthday' do
|
||||
subject(:ident) { described_class.new(type: 'priv') }
|
||||
it { is_expected.to_not be_reg_no }
|
||||
end
|
||||
end
|
||||
|
||||
describe '#country' do
|
||||
let(:ident) { described_class.new(country_code: 'US') }
|
||||
|
||||
it 'returns country' do
|
||||
expect(ident.country).to eq(Country.new('US'))
|
||||
end
|
||||
end
|
||||
|
||||
describe '#==' do
|
||||
let(:ident) { described_class.new(code: 'test', type: 'test', country_code: 'US') }
|
||||
|
||||
context 'when code, type and country code are the same' do
|
||||
let(:another_ident) { described_class.new(code: 'test', type: 'test', country_code: 'US') }
|
||||
|
||||
it 'returns true' do
|
||||
expect(ident).to eq(another_ident)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when code, type and country code are not the same' do
|
||||
let(:another_ident) { described_class.new(code: 'another-test', type: 'test', country_code: 'US') }
|
||||
|
||||
it 'returns false' do
|
||||
expect(ident).to_not eq(another_ident)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -28,45 +28,6 @@ RSpec.describe Contact do
|
|||
@contact.updator.should == nil
|
||||
end
|
||||
|
||||
it 'should require country code when org' do
|
||||
@contact.ident_type = 'org'
|
||||
@contact.valid?
|
||||
@contact.errors[:ident_country_code].should == ['is missing']
|
||||
end
|
||||
|
||||
it 'should require country code when priv' do
|
||||
@contact.ident_type = 'priv'
|
||||
@contact.valid?
|
||||
@contact.errors[:ident_country_code].should == ['is missing']
|
||||
end
|
||||
|
||||
it 'should validate correct country code' do
|
||||
@contact.ident = 1
|
||||
@contact.ident_type = 'org'
|
||||
@contact.ident_country_code = 'EE'
|
||||
@contact.valid?
|
||||
|
||||
@contact.errors[:ident_country_code].should == []
|
||||
end
|
||||
|
||||
it 'should require valid country code' do
|
||||
@contact.ident = '123'
|
||||
@contact.ident_type = 'org'
|
||||
@contact.ident_country_code = 'INVALID'
|
||||
@contact.valid?
|
||||
|
||||
expect(@contact.errors).to have_key(:ident)
|
||||
end
|
||||
|
||||
it 'should convert to alpha2 country code' do
|
||||
@contact.ident = 1
|
||||
@contact.ident_type = 'org'
|
||||
@contact.ident_country_code = 'ee'
|
||||
@contact.validate
|
||||
|
||||
@contact.ident_country_code.should == 'EE'
|
||||
end
|
||||
|
||||
it 'should not have any versions' do
|
||||
@contact.versions.should == []
|
||||
end
|
||||
|
@ -119,14 +80,6 @@ RSpec.describe Contact do
|
|||
@contact.domains_present?.should == false
|
||||
end
|
||||
|
||||
it 'org should be valid' do
|
||||
contact = build(:contact, ident_type: 'org', ident: '1' * 8)
|
||||
|
||||
contact.validate
|
||||
|
||||
contact.errors.full_messages.should match_array([])
|
||||
end
|
||||
|
||||
it 'should not overwrite code' do
|
||||
old_code = @contact.code
|
||||
@contact.code = 'CID:REG1:should-not-overwrite-old-code-12345'
|
||||
|
@ -217,31 +170,6 @@ RSpec.describe Contact do
|
|||
end
|
||||
end
|
||||
|
||||
context 'as birthday' do
|
||||
before :example do
|
||||
@contact.ident_type = 'birthday'
|
||||
end
|
||||
|
||||
it 'birthday should be valid' do
|
||||
valid = ['2012-12-11', '1990-02-16']
|
||||
valid.each do |date|
|
||||
@contact.ident = date
|
||||
@contact.valid?
|
||||
@contact.errors.full_messages.should match_array([])
|
||||
end
|
||||
end
|
||||
|
||||
it 'birthday should be invalid' do
|
||||
invalid = ['123' '12/12/2012', 'aaaa', '12/12/12', '02-11-1999']
|
||||
invalid.each do |date|
|
||||
@contact.ident = date
|
||||
@contact.valid?
|
||||
@contact.errors.full_messages.should ==
|
||||
["Ident Ident not in valid birthady format, should be YYYY-MM-DD"]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'with callbacks' do
|
||||
before :example do
|
||||
# Ensure callbacks are not taken out from other specs
|
||||
|
@ -445,7 +373,7 @@ RSpec.describe Contact do
|
|||
end
|
||||
end
|
||||
|
||||
describe 'country code validation' do
|
||||
describe 'country code validation', db: false do
|
||||
let(:contact) { described_class.new(country_code: 'test') }
|
||||
|
||||
it 'rejects invalid' do
|
||||
|
@ -455,37 +383,25 @@ RSpec.describe Contact do
|
|||
end
|
||||
end
|
||||
|
||||
describe 'phone validation', db: false do
|
||||
describe 'identifier validation', db: false do
|
||||
let(:contact) { described_class.new }
|
||||
|
||||
it 'rejects absent' do
|
||||
contact.phone = nil
|
||||
it 'rejects invalid' do
|
||||
ident = Contact::Ident.new
|
||||
ident.validate
|
||||
contact.identifier = ident
|
||||
contact.validate
|
||||
expect(contact.errors).to have_key(:phone)
|
||||
end
|
||||
|
||||
it 'rejects invalid format' do
|
||||
contact.phone = '123'
|
||||
contact.validate
|
||||
expect(contact.errors).to have_key(:phone)
|
||||
end
|
||||
|
||||
it 'rejects all zeros in country code' do
|
||||
contact.phone = '+000.1'
|
||||
contact.validate
|
||||
expect(contact.errors).to have_key(:phone)
|
||||
end
|
||||
|
||||
it 'rejects all zeros in phone number' do
|
||||
contact.phone = '+123.0'
|
||||
contact.validate
|
||||
expect(contact.errors).to have_key(:phone)
|
||||
expect(contact.errors).to be_added(:identifier, :invalid)
|
||||
end
|
||||
|
||||
it 'accepts valid' do
|
||||
contact.phone = '+123.4'
|
||||
ident = Contact::Ident.new(code: 'test', type: 'priv', country_code: 'US')
|
||||
ident.validate
|
||||
contact.identifier = ident
|
||||
contact.validate
|
||||
expect(contact.errors).to_not have_key(:phone)
|
||||
|
||||
expect(contact.errors).to_not be_added(:identifier, :invalid)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -595,4 +511,13 @@ RSpec.describe Contact do
|
|||
expect(domain_names).to eq({ 'test.com' => %i[admin_domain_contact].to_set })
|
||||
end
|
||||
end
|
||||
|
||||
it 'normalizes ident country code', db: false do
|
||||
contact = described_class.new
|
||||
|
||||
contact.ident_country_code = 'ee'
|
||||
contact.validate
|
||||
|
||||
expect(contact.ident_country_code).to eq('EE')
|
||||
end
|
||||
end
|
||||
|
|
21
spec/models/epp/response/result_spec.rb
Normal file
21
spec/models/epp/response/result_spec.rb
Normal file
|
@ -0,0 +1,21 @@
|
|||
require 'rails_helper'
|
||||
|
||||
RSpec.describe EPP::Response::Result, db: false do
|
||||
# https://tools.ietf.org/html/rfc5730#section-3
|
||||
describe '::codes' do
|
||||
it 'returns codes' do
|
||||
codes = {
|
||||
'1000' => :success,
|
||||
'1001' => :success_pending,
|
||||
'1300' => :success_empty_queue,
|
||||
'1301' => :success_dequeue,
|
||||
'2001' => :syntax_error,
|
||||
'2003' => :required_param_missing,
|
||||
'2005' => :param_syntax_error,
|
||||
'2308' => :data_management_policy_violation
|
||||
}
|
||||
|
||||
expect(described_class.codes).to eq(codes)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -35,10 +35,6 @@ describe Registrar do
|
|||
@registrar.reference_no.should_not be_blank
|
||||
@registrar.reference_no.last(10).to_i.should_not == 0
|
||||
end
|
||||
|
||||
it 'should not have priv contacts' do
|
||||
@registrar.priv_contacts.size.should == 0
|
||||
end
|
||||
end
|
||||
|
||||
context 'with valid attributes' do
|
||||
|
@ -118,9 +114,5 @@ describe Registrar do
|
|||
registrar.valid?
|
||||
registrar.errors.full_messages.should == ['Code is forbidden to use']
|
||||
end
|
||||
|
||||
it 'should not have priv contacts' do
|
||||
@registrar.priv_contacts.size.should == 0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue