diff --git a/app/models/concerns/domain/deletable.rb b/app/models/concerns/domain/deletable.rb index f724162e5..a0d49decb 100644 --- a/app/models/concerns/domain/deletable.rb +++ b/app/models/concerns/domain/deletable.rb @@ -5,6 +5,11 @@ module Concerns::Domain::Deletable alias_attribute :delete_time, :delete_at end + def discard + self.statuses << DomainStatus::DELETE_CANDIDATE + save + end + def discarded? statuses.include?(DomainStatus::DELETE_CANDIDATE) end diff --git a/spec/factories/domain.rb b/spec/factories/domain.rb index fc4d3a97b..4e15a8713 100644 --- a/spec/factories/domain.rb +++ b/spec/factories/domain.rb @@ -10,9 +10,5 @@ FactoryBot.define do domain.admin_domain_contacts << FactoryBot.build(:admin_domain_contact) domain.tech_domain_contacts << FactoryBot.build(:tech_domain_contact) end - - factory :domain_discarded do - statuses [DomainStatus::DELETE_CANDIDATE] - end end end diff --git a/spec/models/concerns/domain/deletable_spec.rb b/spec/models/concerns/domain/deletable_spec.rb deleted file mode 100644 index 826299b69..000000000 --- a/spec/models/concerns/domain/deletable_spec.rb +++ /dev/null @@ -1,19 +0,0 @@ -require 'rails_helper' - -RSpec.describe Domain, db: false do - it { is_expected.to alias_attribute(:delete_time, :delete_at) } - - describe '#discarded?' do - context 'when :deleteCandidate status is present' do - let(:domain) { described_class.new(statuses: [DomainStatus::DELETE_CANDIDATE]) } - - specify { expect(domain).to be_discarded } - end - - context 'when :deleteCandidate status is absent' do - let(:domain) { described_class.new(statuses: []) } - - specify { expect(domain).to_not be_discarded } - end - end -end diff --git a/spec/requests/epp/domain/delete/discarded_spec.rb b/spec/requests/epp/domain/delete/discarded_spec.rb deleted file mode 100644 index 55e74d965..000000000 --- a/spec/requests/epp/domain/delete/discarded_spec.rb +++ /dev/null @@ -1,47 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'EPP domain:delete' do - let(:registrar) { create(:registrar) } - let(:user) { create(:api_user_epp, registrar: registrar) } - let(:session_id) { create(:epp_session, user: user).session_id } - let(:request_xml) { <<-XML - - - - - - test.com - - - - - dGVzdCBmYWlsCg== - - - - - XML - } - - before :example do - login_as user - end - - context 'when domain is not discarded' do - let!(:domain) { create(:domain, name: 'test.com') } - - it 'returns epp code of 1001' do - post '/epp/command/delete', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(response).to have_code_of(1001) - end - end - - context 'when domain is discarded' do - let!(:domain) { create(:domain_discarded, name: 'test.com') } - - it 'returns epp code of 2105' do - post '/epp/command/delete', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(response).to have_code_of(2105) - end - end -end diff --git a/spec/requests/epp/domain/update/discarded_spec.rb b/spec/requests/epp/domain/update/discarded_spec.rb deleted file mode 100644 index 4a31b7d10..000000000 --- a/spec/requests/epp/domain/update/discarded_spec.rb +++ /dev/null @@ -1,42 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'EPP domain:update' do - let(:registrar) { create(:registrar) } - let(:user) { create(:api_user_epp, registrar: registrar) } - let(:session_id) { create(:epp_session, user: user).session_id } - let(:request_xml) { <<-XML - - - - - - test.com - - - - - XML - } - - before :example do - login_as user - end - - context 'when domain is not discarded' do - let!(:domain) { create(:domain, name: 'test.com') } - - it 'returns epp code of 1000' do - post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(response).to have_code_of(1000) - end - end - - context 'when domain is discarded' do - let!(:domain) { create(:domain_discarded, name: 'test.com') } - - it 'returns epp code of 2105' do - post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => "session=#{session_id}" - expect(response).to have_code_of(2105) - end - end -end diff --git a/test/integration/epp/domain/domain_delete_test.rb b/test/integration/epp/domain/domain_delete_test.rb index bdd326a3e..eae4d39ff 100644 --- a/test/integration/epp/domain/domain_delete_test.rb +++ b/test/integration/epp/domain/domain_delete_test.rb @@ -25,4 +25,31 @@ class EppDomainDeleteTest < ActionDispatch::IntegrationTest assert_equal '1001', Nokogiri::XML(response.body).at_css('result')[:code] assert_equal 1, Nokogiri::XML(response.body).css('result').size end + + def test_discarded_domain_cannot_be_deleted + domains(:shop).discard + + request_xml = <<-XML + + + + + + shop.test + + + + + dGVzdCBmYWlsCg== + + + + + XML + + assert_no_difference 'Domain.count' do + post '/epp/command/delete', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' + end + assert_equal '2105', Nokogiri::XML(response.body).at_css('result')[:code] + end end diff --git a/test/integration/epp/domain/domain_update_test.rb b/test/integration/epp/domain/domain_update_test.rb new file mode 100644 index 000000000..9519b37bc --- /dev/null +++ b/test/integration/epp/domain/domain_update_test.rb @@ -0,0 +1,23 @@ +require 'test_helper' + +class EppDomainUpdateTest < ActionDispatch::IntegrationTest + def test_discarded_domain_cannot_be_updated + domains(:shop).discard + + request_xml = <<-XML + + + + + + shop.test + + + + + XML + + post '/epp/command/update', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' + assert_equal '2105', Nokogiri::XML(response.body).at_css('result')[:code] + end +end diff --git a/test/models/domain/deletable_test.rb b/test/models/domain/deletable_test.rb new file mode 100644 index 000000000..499ff20b6 --- /dev/null +++ b/test/models/domain/deletable_test.rb @@ -0,0 +1,14 @@ +require 'test_helper' + +class DomainDeletableTest < ActiveSupport::TestCase + def setup + @domain = domains(:shop) + end + + def test_discard + refute @domain.discarded? + @domain.discard + @domain.reload + assert @domain.discarded? + end +end