From 36d4ea981a46bda0ad68565e84e45c1f5d74f088 Mon Sep 17 00:00:00 2001 From: Oleg Hasjanov Date: Fri, 12 Feb 2021 15:21:09 +0200 Subject: [PATCH 1/4] add test for removing contact with server delete prohibited --- .../epp/contact/delete/base_test.rb | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/test/integration/epp/contact/delete/base_test.rb b/test/integration/epp/contact/delete/base_test.rb index 26ba63897..50335edb5 100644 --- a/test/integration/epp/contact/delete/base_test.rb +++ b/test/integration/epp/contact/delete/base_test.rb @@ -27,6 +27,33 @@ class EppContactDeleteBaseTest < EppTestCase assert_epp_response :completed_successfully end + def test_delete_contact_with_server_delete_prohibited + contact = deletable_contact + contact.update(statuses: Contact::SERVER_DELETE_PROHIBITED) + assert contact.statuses.include? Contact::SERVER_DELETE_PROHIBITED + + contact.update_columns(code: contact.code.upcase) + + request_xml = <<-XML + + + + + + #{contact.code.upcase} + + + + + XML + + post epp_delete_path, params: { frame: request_xml }, + headers: { 'HTTP_COOKIE' => 'session=api_bestnames' } + + assert Contact.exists?(id: contact.id) + assert_epp_response :object_association_prohibits_operation + end + def test_undeletable_cannot_be_deleted contact = contacts(:john) assert_not contact.deletable? From fad739d279bb15a0dd8cb1137905b0b939992439 Mon Sep 17 00:00:00 2001 From: Oleg Hasjanov Date: Fri, 12 Feb 2021 15:22:05 +0200 Subject: [PATCH 2/4] add test for removing contact with client delete prohibited --- .../epp/contact/delete/base_test.rb | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/test/integration/epp/contact/delete/base_test.rb b/test/integration/epp/contact/delete/base_test.rb index 50335edb5..a93b68b6d 100644 --- a/test/integration/epp/contact/delete/base_test.rb +++ b/test/integration/epp/contact/delete/base_test.rb @@ -54,6 +54,33 @@ class EppContactDeleteBaseTest < EppTestCase assert_epp_response :object_association_prohibits_operation end + def test_delete_contact_with_client_delete_prohibited + contact = deletable_contact + contact.update(statuses: Contact::CLIENT_DELETE_PROHIBITED) + assert contact.statuses.include? Contact::CLIENT_DELETE_PROHIBITED + + contact.update_columns(code: contact.code.upcase) + + request_xml = <<-XML + + + + + + #{contact.code.upcase} + + + + + XML + + post epp_delete_path, params: { frame: request_xml }, + headers: { 'HTTP_COOKIE' => 'session=api_bestnames' } + + assert Contact.exists?(id: contact.id) + assert_epp_response :object_association_prohibits_operation + end + def test_undeletable_cannot_be_deleted contact = contacts(:john) assert_not contact.deletable? From 340e1820f273fe6bdd4a66eb88000451c7ee86d5 Mon Sep 17 00:00:00 2001 From: Alex Sherman Date: Mon, 15 Feb 2021 14:51:01 +0500 Subject: [PATCH 3/4] Fix contact deletion if contact *DeleteProhibited --- app/models/actions/contact_delete.rb | 5 +++++ app/models/epp/contact.rb | 3 ++- config/locales/contacts.en.yml | 2 ++ test/integration/epp/contact/delete/base_test.rb | 2 +- 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/models/actions/contact_delete.rb b/app/models/actions/contact_delete.rb index 59032d566..d4169e8b3 100644 --- a/app/models/actions/contact_delete.rb +++ b/app/models/actions/contact_delete.rb @@ -19,6 +19,11 @@ module Actions return end + if contact.delete_prohibited? + contact.errors.add(:status, :delete_prohibited) + return + end + commit end diff --git a/app/models/epp/contact.rb b/app/models/epp/contact.rb index 0c0ed3d5f..e7054c8aa 100644 --- a/app/models/epp/contact.rb +++ b/app/models/epp/contact.rb @@ -83,7 +83,8 @@ class Epp::Contact < Contact [:code, :epp_id_taken] ], '2305' => [ # Association exists - [:domains, :exist] + [:domains, :exist], + [:domains, :delete_prohibited], ] } end diff --git a/config/locales/contacts.en.yml b/config/locales/contacts.en.yml index 906bde193..b5f0dd7ed 100644 --- a/config/locales/contacts.en.yml +++ b/config/locales/contacts.en.yml @@ -25,6 +25,8 @@ en: email_regex_check_error: Invalid format domains: exist: 'Object association prohibits operation' + status: + delete_prohibited: Contact delete prohibited by status statuses: not_uniq: 'not uniq' country_code: diff --git a/test/integration/epp/contact/delete/base_test.rb b/test/integration/epp/contact/delete/base_test.rb index a93b68b6d..5bdb7b8cf 100644 --- a/test/integration/epp/contact/delete/base_test.rb +++ b/test/integration/epp/contact/delete/base_test.rb @@ -115,4 +115,4 @@ class EppContactDeleteBaseTest < EppTestCase DomainContact.delete_all contacts(:john) end -end \ No newline at end of file +end From b9d57be6abb90dbbac170ca676633fc0cc2b8b59 Mon Sep 17 00:00:00 2001 From: Alex Sherman Date: Mon, 15 Feb 2021 19:46:16 +0500 Subject: [PATCH 4/4] Add i18n, change error response code to 2304 --- app/models/actions/contact_delete.rb | 2 +- app/models/epp/contact.rb | 4 +++- config/locales/contacts.en.yml | 2 +- test/integration/epp/contact/delete/base_test.rb | 4 ++-- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/app/models/actions/contact_delete.rb b/app/models/actions/contact_delete.rb index d4169e8b3..60d3252c4 100644 --- a/app/models/actions/contact_delete.rb +++ b/app/models/actions/contact_delete.rb @@ -20,7 +20,7 @@ module Actions end if contact.delete_prohibited? - contact.errors.add(:status, :delete_prohibited) + contact.errors.add(:statuses, :delete_prohibited) return end diff --git a/app/models/epp/contact.rb b/app/models/epp/contact.rb index e7054c8aa..4cd876d5f 100644 --- a/app/models/epp/contact.rb +++ b/app/models/epp/contact.rb @@ -82,9 +82,11 @@ class Epp::Contact < Contact '2302' => [ # Object exists [:code, :epp_id_taken] ], + '2304' => [ # Status prohibits operation + [:statuses, :delete_prohibited], + ], '2305' => [ # Association exists [:domains, :exist], - [:domains, :delete_prohibited], ] } end diff --git a/config/locales/contacts.en.yml b/config/locales/contacts.en.yml index b5f0dd7ed..4b4d099d7 100644 --- a/config/locales/contacts.en.yml +++ b/config/locales/contacts.en.yml @@ -25,10 +25,10 @@ en: email_regex_check_error: Invalid format domains: exist: 'Object association prohibits operation' - status: delete_prohibited: Contact delete prohibited by status statuses: not_uniq: 'not uniq' + delete_prohibited: Contact delete prohibited by status country_code: invalid: Country code is not valid, should be in ISO_3166-1 alpha 2 format (%{value}) disclosed_attributes: diff --git a/test/integration/epp/contact/delete/base_test.rb b/test/integration/epp/contact/delete/base_test.rb index 5bdb7b8cf..e86bea9dd 100644 --- a/test/integration/epp/contact/delete/base_test.rb +++ b/test/integration/epp/contact/delete/base_test.rb @@ -51,7 +51,7 @@ class EppContactDeleteBaseTest < EppTestCase headers: { 'HTTP_COOKIE' => 'session=api_bestnames' } assert Contact.exists?(id: contact.id) - assert_epp_response :object_association_prohibits_operation + assert_epp_response :object_status_prohibits_operation end def test_delete_contact_with_client_delete_prohibited @@ -78,7 +78,7 @@ class EppContactDeleteBaseTest < EppTestCase headers: { 'HTTP_COOKIE' => 'session=api_bestnames' } assert Contact.exists?(id: contact.id) - assert_epp_response :object_association_prohibits_operation + assert_epp_response :object_status_prohibits_operation end def test_undeletable_cannot_be_deleted