mirror of
https://github.com/internetee/registry.git
synced 2025-07-25 12:08:27 +02:00
Merge pull request #831 from internetee/registry-830
Handle missing values in version views
This commit is contained in:
commit
1fd70df6db
11 changed files with 165 additions and 12 deletions
|
@ -1,5 +1,7 @@
|
||||||
module Admin
|
module Admin
|
||||||
class ContactVersionsController < BaseController
|
class ContactVersionsController < BaseController
|
||||||
|
include ObjectVersionsHelper
|
||||||
|
|
||||||
load_and_authorize_resource
|
load_and_authorize_resource
|
||||||
|
|
||||||
def index
|
def index
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
module Admin
|
module Admin
|
||||||
class DomainVersionsController < BaseController
|
class DomainVersionsController < BaseController
|
||||||
|
include ObjectVersionsHelper
|
||||||
|
|
||||||
load_and_authorize_resource
|
load_and_authorize_resource
|
||||||
|
|
||||||
def index
|
def index
|
||||||
|
|
5
app/helpers/contact_helper.rb
Normal file
5
app/helpers/contact_helper.rb
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
module ContactHelper
|
||||||
|
def printable_street(street)
|
||||||
|
street.to_s.gsub("\n", '<br>').html_safe
|
||||||
|
end
|
||||||
|
end
|
15
app/helpers/object_versions_helper.rb
Normal file
15
app/helpers/object_versions_helper.rb
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
module ObjectVersionsHelper
|
||||||
|
def attach_existing_fields(version, new_object)
|
||||||
|
version.object_changes.to_h.each do |key, value|
|
||||||
|
method_name = "#{key}=".to_sym
|
||||||
|
if new_object.respond_to?(method_name)
|
||||||
|
new_object.public_send(method_name, value.last)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def only_present_fields(version, model)
|
||||||
|
field_names = model.column_names
|
||||||
|
version.object.to_h.select { |key, _value| field_names.include?(key) }
|
||||||
|
end
|
||||||
|
end
|
|
@ -57,8 +57,9 @@
|
||||||
%tbody
|
%tbody
|
||||||
- @versions.each do |version|
|
- @versions.each do |version|
|
||||||
- if version
|
- if version
|
||||||
- contact = Contact.new(version.object.to_h)
|
- attributes = only_present_fields(version, Contact)
|
||||||
- version.object_changes.to_h.each { |k,v| contact.public_send("#{k}=", v.last) }
|
- contact = Contact.new(attributes)
|
||||||
|
- attach_existing_fields(version, contact)
|
||||||
|
|
||||||
%tr
|
%tr
|
||||||
%td= link_to(contact.name, admin_contact_version_path(version.id))
|
%td= link_to(contact.name, admin_contact_version_path(version.id))
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
- contact = Contact.new(@version.object.to_h)
|
- attributes = only_present_fields(@version, Contact)
|
||||||
- @version.object_changes.to_h.each { |k,v| contact.public_send("#{k}=", v.last ) }
|
- contact = Contact.new(attributes)
|
||||||
|
- attach_existing_fields(@version, contact)
|
||||||
= render 'shared/title', name: contact.name
|
= render 'shared/title', name: contact.name
|
||||||
|
|
||||||
.row
|
.row
|
||||||
|
@ -41,11 +42,11 @@
|
||||||
|
|
||||||
%br
|
%br
|
||||||
|
|
||||||
%dt= t(:created)
|
%dt= t(:created_at)
|
||||||
%dd{class: changing_css_class(@version,"created_at")}
|
%dd{class: changing_css_class(@version,"created_at")}
|
||||||
= l(contact.created_at, format: :short)
|
= l(contact.created_at, format: :short)
|
||||||
|
|
||||||
%dt= t(:updated)
|
%dt= t(:updated_at)
|
||||||
%dd{class: changing_css_class(@version,"updated_at")}
|
%dd{class: changing_css_class(@version,"updated_at")}
|
||||||
= l(contact.updated_at, format: :short)
|
= l(contact.updated_at, format: :short)
|
||||||
|
|
||||||
|
@ -61,7 +62,7 @@
|
||||||
|
|
||||||
- if contact.street.present?
|
- if contact.street.present?
|
||||||
%dt= t(:street)
|
%dt= t(:street)
|
||||||
%dd{class: changing_css_class(@version,"street")}= contact.street.to_s.gsub("\n", '<br>').html_safe
|
%dd{class: changing_css_class(@version,"street")}= printable_street(contact.street)
|
||||||
|
|
||||||
- if contact.city.present?
|
- if contact.city.present?
|
||||||
%dt= t(:city)
|
%dt= t(:city)
|
||||||
|
|
|
@ -55,8 +55,9 @@
|
||||||
%tbody
|
%tbody
|
||||||
- @versions.each do |version|
|
- @versions.each do |version|
|
||||||
- if version
|
- if version
|
||||||
- domain = Domain.new(version.object.to_h)
|
- attributes = only_present_fields(version, Domain)
|
||||||
- version.object_changes.to_h.each{|k,v| domain.public_send("#{k}=", v.last) }
|
- domain = Domain.new(attributes)
|
||||||
|
- attach_existing_fields(version, domain)
|
||||||
|
|
||||||
%tr
|
%tr
|
||||||
%td= link_to(domain.name, admin_domain_version_path(version.id))
|
%td= link_to(domain.name, admin_domain_version_path(version.id))
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
- domain = Domain.new(@version.object.to_h)
|
- present_fields = only_present_fields(@version, Domain)
|
||||||
- @version.object_changes.to_h.each{|k,v| domain.public_send("#{k}=", v.last) }
|
- domain = Domain.new(present_fields)
|
||||||
|
- attach_existing_fields(@version, domain)
|
||||||
|
|
||||||
- if @version
|
- if @version
|
||||||
- children = HashWithIndifferentAccess.new(@version.children)
|
- children = HashWithIndifferentAccess.new(@version.children)
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
%dd= @contact.org_name
|
%dd= @contact.org_name
|
||||||
|
|
||||||
%dt= t(:street)
|
%dt= t(:street)
|
||||||
%dd= @contact.street.to_s.gsub("\n", '<br>').html_safe
|
%dd= printable_street(@contact.street)
|
||||||
|
|
||||||
%dt= t(:city)
|
%dt= t(:city)
|
||||||
%dd= @contact.city
|
%dd= @contact.city
|
||||||
|
|
60
test/integration/admin/contact_versions_test.rb
Normal file
60
test/integration/admin/contact_versions_test.rb
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
require 'test_helper'
|
||||||
|
|
||||||
|
class ContactVersionsTest < ActionDispatch::IntegrationTest
|
||||||
|
def setup
|
||||||
|
super
|
||||||
|
|
||||||
|
create_contact_with_history
|
||||||
|
login_as users(:admin)
|
||||||
|
end
|
||||||
|
|
||||||
|
def teardown
|
||||||
|
super
|
||||||
|
|
||||||
|
delete_objects_once_done
|
||||||
|
end
|
||||||
|
|
||||||
|
def create_contact_with_history
|
||||||
|
sql = <<-SQL.squish
|
||||||
|
INSERT INTO registrars (id, name, reg_no, email, country_code, code,
|
||||||
|
accounting_customer_code, language)
|
||||||
|
VALUES (75, 'test_registrar', 'test123', 'test@test.com', 'EE', 'TEST123',
|
||||||
|
'test123', 'en');
|
||||||
|
|
||||||
|
INSERT INTO contacts (id, code, auth_info, registrar_id)
|
||||||
|
VALUES (75, 'test_code', '8b4d462aa04194ca78840a', 75);
|
||||||
|
|
||||||
|
INSERT INTO log_contacts (item_type, item_id, event, whodunnit, object,
|
||||||
|
object_changes, created_at, session, children, ident_updated_at, uuid)
|
||||||
|
VALUES ('Contact', 75, 'update', '1-AdminUser',
|
||||||
|
'{"id": 75, "code": "test_code", "auth_info": "8b4d462aa04194ca78840a", "registrar_id": 75, "old_field": "value"}',
|
||||||
|
'{"other_made_up_field": "value"}',
|
||||||
|
'2018-04-23 15:50:48.113491', '2018-04-23 12:44:56',
|
||||||
|
'{"legal_documents":[null]}', null, null
|
||||||
|
)
|
||||||
|
SQL
|
||||||
|
|
||||||
|
ActiveRecord::Base.connection.execute(sql)
|
||||||
|
end
|
||||||
|
|
||||||
|
def delete_objects_once_done
|
||||||
|
ActiveRecord::Base.connection.execute('DELETE from log_contacts where item_id = 75')
|
||||||
|
Domain.destroy_all
|
||||||
|
Contact.destroy_all
|
||||||
|
Registrar.destroy_all
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_removed_fields_are_not_causing_errors_in_index_view
|
||||||
|
visit admin_contact_versions_path
|
||||||
|
assert_text 'test_registrar'
|
||||||
|
assert_text 'update 23.04.18, 18:50'
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_removed_fields_are_not_causing_errors_in_details_view
|
||||||
|
version_id = Contact.find(75).versions.last
|
||||||
|
visit admin_contact_version_path(version_id)
|
||||||
|
|
||||||
|
assert_text 'test_registrar'
|
||||||
|
assert_text '23.04.18, 18:50 update 1-AdminUser'
|
||||||
|
end
|
||||||
|
end
|
65
test/integration/admin/domain_versions_test.rb
Normal file
65
test/integration/admin/domain_versions_test.rb
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
require 'test_helper'
|
||||||
|
|
||||||
|
class DomainVersionsTest < ActionDispatch::IntegrationTest
|
||||||
|
def setup
|
||||||
|
super
|
||||||
|
|
||||||
|
create_domain_with_history
|
||||||
|
login_as users(:admin)
|
||||||
|
end
|
||||||
|
|
||||||
|
def teardown
|
||||||
|
super
|
||||||
|
|
||||||
|
delete_objects_once_done
|
||||||
|
end
|
||||||
|
|
||||||
|
def create_domain_with_history
|
||||||
|
sql = <<-SQL.squish
|
||||||
|
INSERT INTO registrars (id, name, reg_no, email, country_code, code,
|
||||||
|
accounting_customer_code, language)
|
||||||
|
VALUES (54, 'test_registrar', 'test123', 'test@test.com', 'EE', 'TEST123',
|
||||||
|
'test123', 'en');
|
||||||
|
|
||||||
|
INSERT INTO contacts (id, code, auth_info, registrar_id)
|
||||||
|
VALUES (54, 'test_code', '8b4d462aa04194ca78840a', 54);
|
||||||
|
|
||||||
|
INSERT INTO domains (id, registrar_id, valid_to, registrant_id,
|
||||||
|
transfer_code)
|
||||||
|
VALUES (54, 54, '2018-06-23T12:14:02.732+03:00', 54, 'transfer_code');
|
||||||
|
|
||||||
|
INSERT INTO log_domains (item_type, item_id, event, whodunnit, object,
|
||||||
|
object_changes, created_at, nameserver_ids, tech_contact_ids,
|
||||||
|
admin_contact_ids, session, children)
|
||||||
|
VALUES ('Domain', 54, 'update', '1-AdminUser',
|
||||||
|
'{"id": 54, "registrar_id": 54, "valid_to": "2018-07-23T12:14:05.583+03:00", "registrant_id": 54, "transfer_code": "transfer_code", "valid_from": "2017-07-23T12:14:05.583+03:00"}',
|
||||||
|
'{"foo": "bar", "other_made_up_field": "value"}',
|
||||||
|
'2018-04-23 15:50:48.113491', '{}', '{}', '{}', '2018-04-23 12:44:56',
|
||||||
|
'{"null_fracdmin_contacts":[108],"tech_contacts":[109],"nameservers":[],"dnskeys":[],"legal_documents":[null],"registrant":[1]}'
|
||||||
|
)
|
||||||
|
SQL
|
||||||
|
ActiveRecord::Base.connection.execute(sql)
|
||||||
|
end
|
||||||
|
|
||||||
|
def delete_objects_once_done
|
||||||
|
ActiveRecord::Base.connection.execute('DELETE FROM log_domains where item_id = 54')
|
||||||
|
Domain.destroy_all
|
||||||
|
Contact.destroy_all
|
||||||
|
Registrar.destroy_all
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_removed_fields_are_not_causing_errors_in_index_view
|
||||||
|
visit admin_domain_versions_path
|
||||||
|
|
||||||
|
assert_text 'test_registrar'
|
||||||
|
assert_text 'test_registrar update 23.04.18, 18:50'
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_removed_fields_are_not_causing_errors_in_details_view
|
||||||
|
version_id = Domain.find(54).versions.last
|
||||||
|
visit admin_domain_version_path(version_id)
|
||||||
|
|
||||||
|
assert_text 'test_registrar'
|
||||||
|
assert_text '23.04.18, 18:50 update 1-AdminUser'
|
||||||
|
end
|
||||||
|
end
|
Loading…
Add table
Add a link
Reference in a new issue