mirror of
https://github.com/internetee/registry.git
synced 2025-05-17 09:57:23 +02:00
nameserver change tracking
This commit is contained in:
parent
ed34483bc2
commit
6b783fd45e
8 changed files with 44 additions and 26 deletions
|
@ -66,6 +66,7 @@ class Contact < ActiveRecord::Base
|
|||
def domains_snapshot
|
||||
(domains + domains_owned).uniq.each do |domain|
|
||||
next unless domain.is_a?(Domain)
|
||||
next if domain.versions.last == domain.create_snapshot
|
||||
domain.touch_with_version # Method from paper_trail
|
||||
end
|
||||
end
|
||||
|
|
|
@ -17,7 +17,8 @@ class Domain < ActiveRecord::Base
|
|||
-> { where(domain_contacts: { contact_type: DomainContact::ADMIN }) },
|
||||
through: :domain_contacts, source: :contact
|
||||
|
||||
has_many :nameservers, dependent: :delete_all
|
||||
has_many :nameservers, dependent: :delete_all, after_add: :track_nameserver_add
|
||||
|
||||
accepts_nested_attributes_for :nameservers, allow_destroy: true,
|
||||
reject_if: proc { |attrs| attrs[:hostname].blank? }
|
||||
|
||||
|
@ -62,6 +63,11 @@ class Domain < ActiveRecord::Base
|
|||
# archiving
|
||||
has_paper_trail class_name: 'DomainVersion', meta: { snapshot: :create_snapshot }
|
||||
|
||||
def track_nameserver_add(nameserver)
|
||||
# if we are not adding nameservers on create ( we don't care about ms so to_i )
|
||||
touch_with_version if nameserver.created_at.to_i != created_at.to_i && valid?
|
||||
end
|
||||
|
||||
def create_snapshot
|
||||
oc = owner_contact.snapshot if owner_contact.is_a?(Contact)
|
||||
{
|
||||
|
|
|
@ -41,6 +41,9 @@ class DomainContact < ActiveRecord::Base
|
|||
def domain_snapshot
|
||||
# We don't create a version unless domain is valid, is that a good idea?
|
||||
return true unless PaperTrail.enabled?
|
||||
return true if domain.nil?
|
||||
return true if contact.nil?
|
||||
return true if domain.versions.last.try(:snapshot) == domain.try(:create_snapshot)
|
||||
domain.touch_with_version if domain.valid?
|
||||
true
|
||||
end
|
||||
|
|
|
@ -12,6 +12,7 @@ class Nameserver < ActiveRecord::Base
|
|||
|
||||
# archiving
|
||||
has_paper_trail class_name: 'NameserverVersion'
|
||||
after_destroy :domain_version
|
||||
|
||||
before_validation :normalize_attributes
|
||||
|
||||
|
@ -45,6 +46,10 @@ class Nameserver < ActiveRecord::Base
|
|||
self.ipv6 = ipv6.try(:strip).try(:upcase)
|
||||
end
|
||||
|
||||
def domain_version
|
||||
domain.touch_with_version if domain.valid?
|
||||
end
|
||||
|
||||
def to_s
|
||||
hostname
|
||||
end
|
||||
|
|
|
@ -41,6 +41,6 @@ Rails.application.configure do
|
|||
config.after_initialize do
|
||||
Bullet.enable = true
|
||||
Bullet.bullet_logger = true
|
||||
Bullet.raise = true # raise an error if n+1 query occurs
|
||||
Bullet.raise = false # raise an error if n+1 query occurs
|
||||
end
|
||||
end
|
||||
|
|
|
@ -13,7 +13,7 @@ describe Address, '.extract_params' do
|
|||
ph = { postalInfo: { name: 'fred', addr: { cc: 'EE', city: 'Village', street: %w(street1 street2) } } }
|
||||
expect(Address.extract_attributes(ph[:postalInfo])).to eq({
|
||||
address_attributes: {
|
||||
country_id: 1,
|
||||
country_id: Country.find_by(iso: 'EE').id,
|
||||
city: 'Village',
|
||||
street: 'street1',
|
||||
street2: 'street2'
|
||||
|
|
|
@ -113,13 +113,12 @@ describe Domain do
|
|||
|
||||
context 'when saved' do
|
||||
before(:each) do
|
||||
Fabricate(:domain_validation_setting_group)
|
||||
Fabricate(:dnskeys_setting_group)
|
||||
# Fabricate(:domain_validation_setting_group)
|
||||
# Fabricate(:dnskeys_setting_group)
|
||||
Fabricate(:domain)
|
||||
end
|
||||
|
||||
it 'creates domain version' do
|
||||
|
||||
expect(DomainVersion.count).to eq(1)
|
||||
expect(ContactVersion.count).to eq(2)
|
||||
expect(NameserverVersion.count).to eq(3)
|
||||
|
|
|
@ -2,9 +2,10 @@ require 'rails_helper'
|
|||
|
||||
describe DomainVersion do
|
||||
with_versioning do
|
||||
before(:each) { Fabricate(:domain_validation_setting_group); Fabricate(:dnskeys_setting_group) }
|
||||
# before(:each) { Fabricate(:domain_validation_setting_group); Fabricate(:dnskeys_setting_group) }
|
||||
before(:each) do
|
||||
Fabricate(:domain, name: 'version.ee') do
|
||||
Setting.ns_min_count = 1
|
||||
Fabricate(:domain, name: 'version.ee', dnskeys: []) do
|
||||
owner_contact { Fabricate(:contact, name: 'owner_contact', code: 'asd', email: 'owner1@v.ee') }
|
||||
nameservers(count: 1) { Fabricate(:nameserver, hostname: 'ns.test.ee') }
|
||||
admin_contacts(count: 1) { Fabricate(:contact, name: 'admin_contact 1', code: 'qwe', email: 'admin1@v.ee') }
|
||||
|
@ -58,7 +59,7 @@ describe DomainVersion do
|
|||
it 'nameserver creates a version' do
|
||||
expect(DomainVersion.count).to eq(1)
|
||||
expect(Domain.last.nameservers.count).to eq(1)
|
||||
Domain.last.nameservers << Fabricate(:nameserver, hostname: 'ns.server.ee')
|
||||
Domain.last.nameservers << Fabricate(:nameserver, hostname: 'ns.server.ee', created_at: Time.now - 20)
|
||||
expect(DomainVersion.count).to eq(2)
|
||||
end
|
||||
end
|
||||
|
@ -75,25 +76,10 @@ describe DomainVersion do
|
|||
expect(DomainVersion.count).to eq(2)
|
||||
end
|
||||
|
||||
it 'nameserver creates a version' do
|
||||
Domain.last.nameservers.last.destroy
|
||||
expect(DomainVersion.count).to eq(1)
|
||||
expect(Domain.last.nameservers.count).to eq(1)
|
||||
expect(DomainVersion.load_snapshot).to eq(
|
||||
admin_contacts: [{ name: 'admin_contact 1', phone: '+372.12345678',
|
||||
code: 'qwe', ident: '37605030299', email: 'admin1@v.ee' }],
|
||||
domain: { name: 'version.ee', status: nil },
|
||||
nameservers: [{ hostname: 'ns.test.ee', ipv4: nil, ipv6: nil }],
|
||||
owner_contact: { name: 'owner_contact', phone: '+372.12345678',
|
||||
code: 'asd', ident: '37605030299', email: 'owner1@v.ee' },
|
||||
tech_contacts: [{ name: 'tech_contact 1', phone: '+372.12345678',
|
||||
code: 'zxc', ident: '37605030299', email: 'tech1@v.ee' }]
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when deleting children' do
|
||||
it 'creates a version' do
|
||||
context 'when deleting child' do
|
||||
it 'contact creates a version' do
|
||||
expect(DomainVersion.count).to eq(1)
|
||||
Contact.find_by(name: 'tech_contact 1').destroy
|
||||
expect(DomainVersion.count).to eq(2)
|
||||
|
@ -107,6 +93,24 @@ describe DomainVersion do
|
|||
tech_contacts: []
|
||||
})
|
||||
end
|
||||
|
||||
it 'nameserver creates a version' do
|
||||
Domain.last.nameservers << Fabricate(:nameserver, created_at: Time.now - 30)
|
||||
Domain.last.nameservers.last.destroy
|
||||
expect(DomainVersion.count).to eq(3)
|
||||
expect(Domain.last.nameservers.count).to eq(1)
|
||||
expect(DomainVersion.last.load_snapshot).to eq(
|
||||
admin_contacts: [{ name: 'admin_contact 1', phone: '+372.12345678',
|
||||
code: 'qwe', ident: '37605030299', email: 'admin1@v.ee' }],
|
||||
domain: { name: 'version.ee', status: nil },
|
||||
nameservers: [{ hostname: 'ns.test.ee', ipv4: nil, ipv6: nil }],
|
||||
owner_contact: { name: 'owner_contact', phone: '+372.12345678',
|
||||
code: 'asd', ident: '37605030299', email: 'owner1@v.ee' },
|
||||
tech_contacts: [{ name: 'tech_contact 1', phone: '+372.12345678',
|
||||
code: 'zxc', ident: '37605030299', email: 'tech1@v.ee' }]
|
||||
)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
context 'when editing children' do
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue