diff --git a/app/views/admin/domain_versions/archive.haml b/app/views/admin/domain_versions/archive.haml index 5e6d8eaa9..4137064a2 100644 --- a/app/views/admin/domain_versions/archive.haml +++ b/app/views/admin/domain_versions/archive.haml @@ -56,7 +56,10 @@ - @versions.each do |version| - if version - domain = Domain.new(version.object.to_h) - - version.object_changes.to_h.each{|k,v| domain.public_send("#{k}=", v.last) } + - version.object_changes.to_h.each do |k, v| + - method_name = "#{k}=".to_sym + - if domain.respond_to?(method_name) + - domain.public_send("#{k}=", v.last) %tr %td= link_to(domain.name, admin_domain_version_path(version.id)) diff --git a/app/views/admin/domain_versions/show.haml b/app/views/admin/domain_versions/show.haml index 1a17ba3f9..9071feafb 100644 --- a/app/views/admin/domain_versions/show.haml +++ b/app/views/admin/domain_versions/show.haml @@ -1,5 +1,8 @@ - domain = Domain.new(@version.object.to_h) -- @version.object_changes.to_h.each{|k,v| domain.public_send("#{k}=", v.last) } +- @version.object_changes.to_h.each do |k, v| + - method_name = "#{k}=".to_sym + - if domain.respond_to?(method_name) + - domain.public_send("#{k}=", v.last) - if @version - children = HashWithIndifferentAccess.new(@version.children) diff --git a/test/integration/admin/domain_versions_test.rb b/test/integration/admin/domain_versions_test.rb new file mode 100644 index 000000000..8e69d5098 --- /dev/null +++ b/test/integration/admin/domain_versions_test.rb @@ -0,0 +1,64 @@ +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