mirror of
https://github.com/internetee/registry.git
synced 2025-07-22 10:45:58 +02:00
Dynamic validations example
This commit is contained in:
parent
0c5b7c4cb8
commit
415f109d8f
7 changed files with 75 additions and 48 deletions
|
@ -127,8 +127,10 @@ class Domain < ActiveRecord::Base
|
||||||
### VALIDATIONS ###
|
### VALIDATIONS ###
|
||||||
|
|
||||||
def validate_nameservers_count
|
def validate_nameservers_count
|
||||||
unless nameservers.length.between?(1, 13)
|
sg = SettingGroup.find_by(code: SettingGroup::DOMAIN_VALIDATION_CODE)
|
||||||
errors.add(:nameservers, :out_of_range, {min: 1, max: 13})
|
min, max = sg.get(:ns_min_count).to_i, sg.get(:ns_max_count).to_i
|
||||||
|
unless nameservers.length.between?(min, max)
|
||||||
|
errors.add(:nameservers, :out_of_range, {min: min, max: max})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -2,4 +2,11 @@ class SettingGroup < ActiveRecord::Base
|
||||||
has_many :settings
|
has_many :settings
|
||||||
|
|
||||||
accepts_nested_attributes_for :settings
|
accepts_nested_attributes_for :settings
|
||||||
|
|
||||||
|
DOMAIN_VALIDATION_CODE = 'domain_validation'
|
||||||
|
|
||||||
|
def get(key)
|
||||||
|
s = settings.find_by(code: key.to_s)
|
||||||
|
s.try(:value)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,7 +4,10 @@ describe 'EPP Domain', epp: true do
|
||||||
let(:server) { server = Epp::Server.new({server: 'localhost', tag: 'gitlab', password: 'ghyt9e4fu', port: 701}) }
|
let(:server) { server = Epp::Server.new({server: 'localhost', tag: 'gitlab', password: 'ghyt9e4fu', port: 701}) }
|
||||||
|
|
||||||
context 'with valid user' do
|
context 'with valid user' do
|
||||||
before(:each) { Fabricate(:epp_user) }
|
before(:each) do
|
||||||
|
Fabricate(:epp_user)
|
||||||
|
Fabricate(:domain_validation_setting_group)
|
||||||
|
end
|
||||||
|
|
||||||
it 'returns error if contact does not exists' do
|
it 'returns error if contact does not exists' do
|
||||||
Fabricate(:contact, code: 'jd1234')
|
Fabricate(:contact, code: 'jd1234')
|
||||||
|
|
|
@ -5,3 +5,11 @@ Fabricator(:setting_group) do
|
||||||
Fabricate(:setting, code: 'ns_max_count', value: 13)
|
Fabricate(:setting, code: 'ns_max_count', value: 13)
|
||||||
]}
|
]}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Fabricator(:domain_validation_setting_group, from: :setting_group) do
|
||||||
|
code 'domain_validation'
|
||||||
|
settings { [
|
||||||
|
Fabricate(:setting, code: 'ns_min_count', value: 1),
|
||||||
|
Fabricate(:setting, code: 'ns_max_count', value: 13)
|
||||||
|
]}
|
||||||
|
end
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
require 'rails_helper'
|
require 'rails_helper'
|
||||||
|
|
||||||
feature 'Setting management' do
|
feature 'Setting management' do
|
||||||
background { Fabricate(:setting_group) }
|
background { Fabricate(:domain_validation_setting_group) }
|
||||||
|
|
||||||
scenario 'User changes a setting', js: true do
|
scenario 'User changes a setting', js: true do
|
||||||
visit root_path
|
visit root_path
|
||||||
|
|
|
@ -51,7 +51,11 @@ describe Contact, '#get_relation' do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe Contact, '#has_relation' do
|
describe Contact, '#has_relation' do
|
||||||
before(:each) { Fabricate(:domain) }
|
before(:each) do
|
||||||
|
Fabricate(:domain_validation_setting_group)
|
||||||
|
Fabricate(:domain)
|
||||||
|
end
|
||||||
|
|
||||||
it 'should return false if no relation' do
|
it 'should return false if no relation' do
|
||||||
expect(Contact.last.has_relation(:chewbacca)).to eq false
|
expect(Contact.last.has_relation(:chewbacca)).to eq false
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,55 +7,58 @@ describe Domain do
|
||||||
it { should have_many(:tech_contacts) }
|
it { should have_many(:tech_contacts) }
|
||||||
it { should have_many(:admin_contacts) }
|
it { should have_many(:admin_contacts) }
|
||||||
|
|
||||||
it 'validates domain name' do
|
context 'with sufficient settings' do
|
||||||
d = Fabricate(:domain)
|
before(:each) { Fabricate(:domain_validation_setting_group) }
|
||||||
expect(d.name).to_not be_nil
|
|
||||||
|
|
||||||
invalid = ['a.ee', "#{'a' * 64}.ee", 'ab.eu', 'test.ab.ee', '-test.ee', '-test-.ee', 'test-.ee', 'te--st.ee', 'õ.pri.ee', 'test.com', 'www.ab.ee', 'test.eu', ' .ee', 'a b.ee', 'Ž .ee', 'test.edu.ee']
|
it 'validates domain name' do
|
||||||
|
d = Fabricate(:domain)
|
||||||
|
expect(d.name).to_not be_nil
|
||||||
|
|
||||||
invalid.each do |x|
|
invalid = ['a.ee', "#{'a' * 64}.ee", 'ab.eu', 'test.ab.ee', '-test.ee', '-test-.ee', 'test-.ee', 'te--st.ee', 'õ.pri.ee', 'test.com', 'www.ab.ee', 'test.eu', ' .ee', 'a b.ee', 'Ž .ee', 'test.edu.ee']
|
||||||
expect(Fabricate.build(:domain, name: x).valid?).to be false
|
|
||||||
|
invalid.each do |x|
|
||||||
|
expect(Fabricate.build(:domain, name: x).valid?).to be false
|
||||||
|
end
|
||||||
|
|
||||||
|
valid = ['ab.ee', "#{'a' * 63}.ee", 'te-s-t.ee', 'jäääär.ee', 'päike.pri.ee', 'õigus.com.ee', 'õäöü.fie.ee', 'test.med.ee', 'žä.ee', ' ŽŠ.ee ']
|
||||||
|
|
||||||
|
valid.each do |x|
|
||||||
|
expect(Fabricate.build(:domain, name: x).valid?).to be true
|
||||||
|
end
|
||||||
|
|
||||||
|
invalid_punycode = ['xn--geaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-4we.pri.ee']
|
||||||
|
|
||||||
|
invalid_punycode.each do |x|
|
||||||
|
expect(Fabricate.build(:domain, name: x).valid?).to be false
|
||||||
|
end
|
||||||
|
|
||||||
|
valid_punycode = ['xn--ge-uia.pri.ee', 'xn--geaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-9te.pri.ee']
|
||||||
|
|
||||||
|
valid_punycode.each do |x|
|
||||||
|
expect(Fabricate.build(:domain, name: x).valid?).to be true
|
||||||
|
end
|
||||||
|
|
||||||
|
d = Domain.new
|
||||||
|
expect(d.valid?).to be false
|
||||||
|
|
||||||
|
expect(d.errors.messages).to match_array({
|
||||||
|
name: ['is missing'],
|
||||||
|
period: ['is not a number'],
|
||||||
|
owner_contact: ["Registrant is missing"],
|
||||||
|
admin_contacts: ["Admin contact is missing"],
|
||||||
|
nameservers: ["Nameservers count must be between 1-13"]
|
||||||
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
valid = ['ab.ee', "#{'a' * 63}.ee", 'te-s-t.ee', 'jäääär.ee', 'päike.pri.ee', 'õigus.com.ee', 'õäöü.fie.ee', 'test.med.ee', 'žä.ee', ' ŽŠ.ee ']
|
it 'does not create a reserved domain' do
|
||||||
|
Fabricate(:reserved_domain)
|
||||||
valid.each do |x|
|
expect(Fabricate.build(:domain, name: '1162.ee').valid?).to be false
|
||||||
expect(Fabricate.build(:domain, name: x).valid?).to be true
|
|
||||||
end
|
end
|
||||||
|
|
||||||
invalid_punycode = ['xn--geaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-4we.pri.ee']
|
it 'validates period' do
|
||||||
|
expect(Fabricate.build(:domain, period: 0).valid?).to be false
|
||||||
invalid_punycode.each do |x|
|
expect(Fabricate.build(:domain, period: 4).valid?).to be false
|
||||||
expect(Fabricate.build(:domain, name: x).valid?).to be false
|
expect(Fabricate.build(:domain, period: 3).valid?).to be true
|
||||||
end
|
end
|
||||||
|
|
||||||
valid_punycode = ['xn--ge-uia.pri.ee', 'xn--geaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-9te.pri.ee']
|
|
||||||
|
|
||||||
valid_punycode.each do |x|
|
|
||||||
expect(Fabricate.build(:domain, name: x).valid?).to be true
|
|
||||||
end
|
|
||||||
|
|
||||||
d = Domain.new
|
|
||||||
expect(d.valid?).to be false
|
|
||||||
|
|
||||||
expect(d.errors.messages).to match_array({
|
|
||||||
name: ['is missing'],
|
|
||||||
period: ['is not a number'],
|
|
||||||
owner_contact: ["Registrant is missing"],
|
|
||||||
admin_contacts: ["Admin contact is missing"],
|
|
||||||
nameservers: ["Nameservers count must be between 1-13"]
|
|
||||||
})
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not create a reserved domain' do
|
|
||||||
Fabricate(:reserved_domain)
|
|
||||||
expect(Fabricate.build(:domain, name: '1162.ee').valid?).to be false
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'validates period' do
|
|
||||||
expect(Fabricate.build(:domain, period: 0).valid?).to be false
|
|
||||||
expect(Fabricate.build(:domain, period: 4).valid?).to be false
|
|
||||||
expect(Fabricate.build(:domain, period: 3).valid?).to be true
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue