From cea834d5b759405852377395361f30e0628c80e7 Mon Sep 17 00:00:00 2001 From: Artur Beljajev Date: Thu, 28 Mar 2019 17:36:38 +0200 Subject: [PATCH] Change `domains.delete_at` database column type to date, rename to `delete_date` Closes #1125 --- app/models/concerns/domain/deletable.rb | 2 +- app/models/concerns/domain/expirable.rb | 2 +- app/models/concerns/domain/releasable.rb | 8 +-- app/models/domain.rb | 6 +- app/models/epp/domain.rb | 4 +- app/models/whois_record.rb | 3 +- app/presenters/domain_presenter.rb | 2 +- .../admin/domains/partials/_general.html.erb | 4 +- .../domains/partials/_general.html.erb | 4 +- config/locales/admin/domains.en.yml | 1 - ...151516_change_domains_delete_at_to_date.rb | 5 ++ ...rename_domains_delete_at_to_delete_date.rb | 5 ++ db/structure.sql | 10 ++- doc/epp-examples.md | 2 +- doc/registrant-api/v1/domain.md | 6 +- doc/registrant-api/v1/registry_lock.md | 4 +- doc/repp/v1/domain.md | 2 +- lib/serializers/registrant_api/domain.rb | 2 +- .../convert_domain_delete_date.rake | 16 +++++ lib/tasks/domains/release.rake | 2 +- spec/models/domain_cron_spec.rb | 2 +- spec/models/domain_spec.rb | 6 +- spec/presenters/domain_presenter_spec.rb | 6 +- test/fixtures/domains.yml | 2 +- .../serializers/registrant_api/domain_test.rb | 2 +- .../domain/releasable/auctionable_test.rb | 19 +++--- .../domain/releasable/discardable_test.rb | 32 +++++----- .../system/admin_area/domains/details_test.rb | 4 +- .../registrant_area/domains/details_test.rb | 2 +- .../convert_domain_delete_date_test.rb | 61 +++++++++++++++++++ test/tasks/domains/release_test.rb | 4 +- 31 files changed, 159 insertions(+), 71 deletions(-) create mode 100644 db/migrate/20190328151516_change_domains_delete_at_to_date.rb create mode 100644 db/migrate/20190328151838_rename_domains_delete_at_to_delete_date.rb create mode 100644 lib/tasks/data_migrations/convert_domain_delete_date.rake create mode 100644 test/tasks/data_migrations/convert_domain_delete_date_test.rb diff --git a/app/models/concerns/domain/deletable.rb b/app/models/concerns/domain/deletable.rb index 8640277c8..bd01ab1c9 100644 --- a/app/models/concerns/domain/deletable.rb +++ b/app/models/concerns/domain/deletable.rb @@ -20,6 +20,6 @@ module Concerns::Domain::Deletable end def deletion_deadline - delete_at + 24.hours + delete_date + 24.hours end end \ No newline at end of file diff --git a/app/models/concerns/domain/expirable.rb b/app/models/concerns/domain/expirable.rb index be1928826..f4e8b61f8 100644 --- a/app/models/concerns/domain/expirable.rb +++ b/app/models/concerns/domain/expirable.rb @@ -22,7 +22,7 @@ module Concerns::Domain::Expirable def expirable? return false if expire_time > Time.zone.now - if statuses.include?(DomainStatus::EXPIRED) && outzone_at.present? && delete_at.present? + if statuses.include?(DomainStatus::EXPIRED) && outzone_at.present? && delete_date.present? return false end diff --git a/app/models/concerns/domain/releasable.rb b/app/models/concerns/domain/releasable.rb index 8a5e7b5a5..560d5a91f 100644 --- a/app/models/concerns/domain/releasable.rb +++ b/app/models/concerns/domain/releasable.rb @@ -15,16 +15,16 @@ module Concerns def releasable_domains if release_to_auction - where('(delete_at < ? OR force_delete_date <= ?)' \ + where('(delete_date <= ? OR force_delete_date <= ?)' \ ' AND ? != ALL(coalesce(statuses, array[]::varchar[]))', - Time.zone.now, + Time.zone.today, Time.zone.today, DomainStatus::SERVER_DELETE_PROHIBITED) else - where('(delete_at < ? OR force_delete_date <= ?)' \ + where('(delete_date <= ? OR force_delete_date <= ?)' \ ' AND ? != ALL(coalesce(statuses, array[]::varchar[])) AND' \ ' ? != ALL(COALESCE(statuses, array[]::varchar[]))', - Time.zone.now, + Time.zone.today, Time.zone.today, DomainStatus::SERVER_DELETE_PROHIBITED, DomainStatus::DELETE_CANDIDATE) diff --git a/app/models/domain.rb b/app/models/domain.rb index e2d9d6172..beef862e3 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -399,7 +399,7 @@ class Domain < ActiveRecord::Base def cancel_pending_delete statuses.delete DomainStatus::PENDING_DELETE_CONFIRMATION statuses.delete DomainStatus::PENDING_DELETE - self.delete_at = nil + self.delete_date = nil end def pricelist(operation_category, period_i = nil, unit = nil) @@ -459,7 +459,7 @@ class Domain < ActiveRecord::Base def set_graceful_expired self.outzone_at = expire_time + self.class.expire_warning_period - self.delete_at = outzone_at + self.class.redemption_grace_period + self.delete_date = outzone_at + self.class.redemption_grace_period self.statuses |= [DomainStatus::EXPIRED] end @@ -484,7 +484,7 @@ class Domain < ActiveRecord::Base unless update.include? s case s when DomainStatus::PENDING_DELETE - self.delete_at = nil + self.delete_date = nil when DomainStatus::SERVER_MANUAL_INZONE # removal causes server hold to set self.outzone_at = Time.zone.now if force_delete_scheduled? when DomainStatus::DomainStatus::EXPIRED # removal causes server hold to set diff --git a/app/models/epp/domain.rb b/app/models/epp/domain.rb index fcfbaf369..ff60efe02 100644 --- a/app/models/epp/domain.rb +++ b/app/models/epp/domain.rb @@ -549,7 +549,7 @@ class Epp::Domain < Domain msg: I18n.t(:object_status_prohibits_operation) } unless pending_deletable? - self.delete_at = (Time.zone.now + (Setting.redemption_grace_period.days + 1.day)).utc.beginning_of_day + self.delete_date = Time.zone.today + Setting.redemption_grace_period.days + 1.day set_pending_delete set_server_hold if server_holdable? save(validate: false) @@ -576,7 +576,7 @@ class Epp::Domain < Domain self.expire_time = renewed_expire_time self.outzone_at = nil - self.delete_at = nil + self.delete_date = nil self.period = period self.period_unit = unit diff --git a/app/models/whois_record.rb b/app/models/whois_record.rb index ad0036315..f4acb78f3 100644 --- a/app/models/whois_record.rb +++ b/app/models/whois_record.rb @@ -40,8 +40,7 @@ class WhoisRecord < ActiveRecord::Base h[:changed] = domain.updated_at.try(:to_s, :iso8601) h[:expire] = domain.valid_to.to_date.to_s h[:outzone] = domain.outzone_at.try(:to_date).try(:to_s) - h[:delete] = [domain.delete_at, domain.force_delete_date].compact.min.try(:to_date) - .try(:to_s) + h[:delete] = [domain.delete_date, domain.force_delete_date].compact.min.try(:to_s) h[:registrant] = registrant.name h[:registrant_kind] = registrant.kind diff --git a/app/presenters/domain_presenter.rb b/app/presenters/domain_presenter.rb index f65262080..0915722b1 100644 --- a/app/presenters/domain_presenter.rb +++ b/app/presenters/domain_presenter.rb @@ -35,7 +35,7 @@ class DomainPresenter end def delete_date - view.l(domain.delete_at, format: :date) if domain.delete_at + view.l(domain.delete_date) if domain.delete_date end def force_delete_date diff --git a/app/views/admin/domains/partials/_general.html.erb b/app/views/admin/domains/partials/_general.html.erb index feeaeb01f..0151094b9 100644 --- a/app/views/admin/domains/partials/_general.html.erb +++ b/app/views/admin/domains/partials/_general.html.erb @@ -28,8 +28,8 @@
<%= t('.outzone_time') %>
<%= l(@domain.outzone_at) %>
-
<%= t('.delete_time') %>
-
<%= l(@domain.delete_at) %>
+
<%= Domain.human_attribute_name :delete_date %>
+
<%= l @domain.delete_date %>
<%= Domain.human_attribute_name :force_delete_date %>
<%= l @domain.force_delete_date %>
diff --git a/app/views/registrant/domains/partials/_general.html.erb b/app/views/registrant/domains/partials/_general.html.erb index 842d4e8e3..d79980797 100644 --- a/app/views/registrant/domains/partials/_general.html.erb +++ b/app/views/registrant/domains/partials/_general.html.erb @@ -28,8 +28,8 @@
<%= Domain.human_attribute_name :outzone_at %>
<%= l(@domain.outzone_at) %>
-
<%= Domain.human_attribute_name :delete_at %>
-
<%= l(@domain.delete_at) %>
+
<%= Domain.human_attribute_name :delete_date %>
+
<%= l @domain.delete_date %>
<%= Domain.human_attribute_name :force_delete_date %>
<%= l @domain.force_delete_date %>
diff --git a/config/locales/admin/domains.en.yml b/config/locales/admin/domains.en.yml index 9e1b98781..2abdaee91 100644 --- a/config/locales/admin/domains.en.yml +++ b/config/locales/admin/domains.en.yml @@ -51,7 +51,6 @@ en: partials: general: outzone_time: Outzone time - delete_time: Delete time locked_by_registrant_at: Registry lock time admin_contacts: diff --git a/db/migrate/20190328151516_change_domains_delete_at_to_date.rb b/db/migrate/20190328151516_change_domains_delete_at_to_date.rb new file mode 100644 index 000000000..4af353d52 --- /dev/null +++ b/db/migrate/20190328151516_change_domains_delete_at_to_date.rb @@ -0,0 +1,5 @@ +class ChangeDomainsDeleteAtToDate < ActiveRecord::Migration + def change + change_column :domains, :delete_at, :date + end +end diff --git a/db/migrate/20190328151838_rename_domains_delete_at_to_delete_date.rb b/db/migrate/20190328151838_rename_domains_delete_at_to_delete_date.rb new file mode 100644 index 000000000..37df330a4 --- /dev/null +++ b/db/migrate/20190328151838_rename_domains_delete_at_to_delete_date.rb @@ -0,0 +1,5 @@ +class RenameDomainsDeleteAtToDeleteDate < ActiveRecord::Migration + def change + rename_column :domains, :delete_at, :delete_date + end +end diff --git a/db/structure.sql b/db/structure.sql index 83cd6be80..cc0931e58 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -932,7 +932,7 @@ CREATE TABLE public.domains ( legacy_registrar_id integer, legacy_registrant_id integer, outzone_at timestamp without time zone, - delete_at timestamp without time zone, + delete_date date, registrant_verification_asked_at timestamp without time zone, registrant_verification_token character varying, pending_json jsonb, @@ -3540,10 +3540,10 @@ CREATE INDEX index_domain_transfers_on_domain_id ON public.domain_transfers USIN -- --- Name: index_domains_on_delete_at; Type: INDEX; Schema: public; Owner: -; Tablespace: +-- Name: index_domains_on_delete_date; Type: INDEX; Schema: public; Owner: -; Tablespace: -- -CREATE INDEX index_domains_on_delete_at ON public.domains USING btree (delete_at); +CREATE INDEX index_domains_on_delete_date ON public.domains USING btree (delete_date); -- @@ -4939,5 +4939,9 @@ INSERT INTO schema_migrations (version) VALUES ('20190322152123'); INSERT INTO schema_migrations (version) VALUES ('20190322152529'); +INSERT INTO schema_migrations (version) VALUES ('20190328151516'); + +INSERT INTO schema_migrations (version) VALUES ('20190328151838'); + INSERT INTO schema_migrations (version) VALUES ('20190415120246'); diff --git a/doc/epp-examples.md b/doc/epp-examples.md index 6ad902037..2ad383dfd 100644 --- a/doc/epp-examples.md +++ b/doc/epp-examples.md @@ -10690,7 +10690,7 @@ RESPONSE: ``` -### EPP Domain with valid domain renews a domain when outzone_at or delete_at is nil for some reason +### EPP Domain with valid domain renews a domain when outzone_at or delete_date is nil for some reason REQUEST: diff --git a/doc/registrant-api/v1/domain.md b/doc/registrant-api/v1/domain.md index f16e11c64..5a5a61366 100644 --- a/doc/registrant-api/v1/domain.md +++ b/doc/registrant-api/v1/domain.md @@ -64,7 +64,7 @@ Content-Type: application/json "legacy_registrar_id":null, "legacy_registrant_id":null, "outzone_at":"2016-09-24T09:11:14.861Z", - "delete_at":"2016-10-24T09:11:14.861Z", + "delete_date":"2016-10-24", "registrant_verification_asked_at":null, "registrant_verification_token":null, "locked_by_registrant_at":"2015-09-09T09:11:14.861Z", @@ -179,7 +179,7 @@ Content-Type: application/json "legacy_registrar_id":null, "legacy_registrant_id":null, "outzone_at":"2016-09-24T09:11:14.861Z", - "delete_at":"2016-10-24T09:11:14.861Z", + "delete_date":"2016-10-24", "registrant_verification_asked_at":null, "registrant_verification_token":null, "locked_by_registrant_at":"2015-09-09T09:11:14.861Z", @@ -286,7 +286,7 @@ Content-Type: application/json "legacy_registrar_id":null, "legacy_registrant_id":null, "outzone_at":"2016-09-24T09:11:14.861Z", - "delete_at":"2016-10-24T09:11:14.861Z", + "delete_date":"2016-10-24", "registrant_verification_asked_at":null, "registrant_verification_token":null, "locked_by_registrant_at":"2015-09-09T09:11:14.861Z", diff --git a/doc/registrant-api/v1/registry_lock.md b/doc/registrant-api/v1/registry_lock.md index 9beab9167..61a2c0839 100644 --- a/doc/registrant-api/v1/registry_lock.md +++ b/doc/registrant-api/v1/registry_lock.md @@ -64,7 +64,7 @@ Content-Type: application/json "legacy_registrar_id":null, "legacy_registrant_id":null, "outzone_at":"2016-09-24T09:11:14.861Z", - "delete_at":"2016-10-24T09:11:14.861Z", + "delete_date":"2016-10-24", "registrant_verification_asked_at":null, "registrant_verification_token":null, "locked_by_registrant_at":"2015-09-09T09:11:14.861Z", @@ -208,7 +208,7 @@ Content-Type: application/json "legacy_registrar_id":null, "legacy_registrant_id":null, "outzone_at":"2016-09-24T09:11:14.861Z", - "delete_at":"2016-10-24T09:11:14.861Z", + "delete_date":"2016-10-24", "registrant_verification_asked_at":null, "registrant_verification_token":null, "locked_by_registrant_at":null, diff --git a/doc/repp/v1/domain.md b/doc/repp/v1/domain.md index 061241706..035bb1e9a 100644 --- a/doc/repp/v1/domain.md +++ b/doc/repp/v1/domain.md @@ -52,7 +52,7 @@ Content-Type: application/json "legacy_registrar_id": null, "legacy_registrant_id": null, "outzone_at": "2016-09-24T09:11:14.861Z", - "delete_at": "2016-10-24T09:11:14.861Z", + "delete_date": "2016-10-24", "registrant_verification_asked_at": null, "registrant_verification_token": null, "pending_json": { diff --git a/lib/serializers/registrant_api/domain.rb b/lib/serializers/registrant_api/domain.rb index b1851b59b..500d6c08c 100644 --- a/lib/serializers/registrant_api/domain.rb +++ b/lib/serializers/registrant_api/domain.rb @@ -36,7 +36,7 @@ module Serializers legacy_registrar_id: domain.legacy_registrar_id, legacy_registrant_id: domain.legacy_registrant_id, outzone_at: domain.outzone_at, - delete_at: domain.delete_at, + delete_date: domain.delete_date, registrant_verification_asked_at: domain.registrant_verification_asked_at, registrant_verification_token: domain.registrant_verification_token, pending_json: domain.pending_json, diff --git a/lib/tasks/data_migrations/convert_domain_delete_date.rake b/lib/tasks/data_migrations/convert_domain_delete_date.rake new file mode 100644 index 000000000..7eeee5cf0 --- /dev/null +++ b/lib/tasks/data_migrations/convert_domain_delete_date.rake @@ -0,0 +1,16 @@ +namespace :data_migrations do + task convert_domain_delete_date: :environment do + processed_domain_count = 0 + + Domain.transaction do + Domain.find_each do |domain| + next unless domain.delete_date + + domain.update_columns(delete_date: domain.delete_date + 1.day) + processed_domain_count += 1 + end + end + + puts "Domains processed: #{processed_domain_count}" + end +end \ No newline at end of file diff --git a/lib/tasks/domains/release.rake b/lib/tasks/domains/release.rake index 0b9f0c19d..e3f499c90 100644 --- a/lib/tasks/domains/release.rake +++ b/lib/tasks/domains/release.rake @@ -1,6 +1,6 @@ namespace :domains do desc <<~TEXT.gsub("\n", "\s") - Releases domains with past `delete_at` by either sending them to the auction or discarding, + Releases domains with past `delete_date` by either sending them to the auction or discarding, depending on `release_domains_to_auction` setting TEXT diff --git a/spec/models/domain_cron_spec.rb b/spec/models/domain_cron_spec.rb index 7fe2246a0..0d25e375b 100644 --- a/spec/models/domain_cron_spec.rb +++ b/spec/models/domain_cron_spec.rb @@ -31,7 +31,7 @@ RSpec.describe DomainCron do old_valid_to = Time.zone.now - 10.days @domain.valid_to = old_valid_to @domain.statuses = [DomainStatus::EXPIRED] - @domain.outzone_at, @domain.delete_at = nil, nil + @domain.outzone_at, @domain.delete_date = nil, nil @domain.save described_class.start_expire_period diff --git a/spec/models/domain_spec.rb b/spec/models/domain_spec.rb index bed293474..259f2d307 100644 --- a/spec/models/domain_spec.rb +++ b/spec/models/domain_spec.rb @@ -132,7 +132,7 @@ RSpec.describe Domain do old_valid_to = Time.zone.now - 10.days @domain.valid_to = old_valid_to @domain.statuses = [DomainStatus::EXPIRED] - @domain.outzone_at, @domain.delete_at = nil, nil + @domain.outzone_at, @domain.delete_date = nil, nil @domain.save DomainCron.start_expire_period @@ -711,8 +711,8 @@ RSpec.describe Domain do expect(domain.outzone_at).to eq(Time.zone.parse('06.07.2010 10:30')) end - it 'sets :delete_at to :outzone_at + redemption grace period' do - expect(domain.delete_at).to eq(Time.zone.parse('08.07.2010 10:30')) + it 'sets :delete_date to :outzone_at + redemption grace period' do + expect(domain.delete_date).to eq(Date.parse('08.07.2010')) end end diff --git a/spec/presenters/domain_presenter_spec.rb b/spec/presenters/domain_presenter_spec.rb index 06f2e33ec..2a1b1bc45 100644 --- a/spec/presenters/domain_presenter_spec.rb +++ b/spec/presenters/domain_presenter_spec.rb @@ -44,16 +44,16 @@ RSpec.describe DomainPresenter do subject(:delete_date) { presenter.delete_date } context 'when present' do - let(:domain) { instance_double(Domain, delete_at: '05.07.2010') } + let(:domain) { instance_double(Domain, delete_date: '05.07.2010') } it 'returns localized date' do - expect(view).to receive(:l).with('05.07.2010', format: :date).and_return('delete date') + expect(view).to receive(:l).with('05.07.2010').and_return('delete date') expect(delete_date).to eq('delete date') end end context 'when absent' do - let(:domain) { instance_double(Domain, delete_at: nil) } + let(:domain) { instance_double(Domain, delete_date: nil) } specify { expect(delete_date).to be_nil } end diff --git a/test/fixtures/domains.yml b/test/fixtures/domains.yml index cce7298cf..bbf5ced40 100644 --- a/test/fixtures/domains.yml +++ b/test/fixtures/domains.yml @@ -7,7 +7,7 @@ shop: registered_at: <%= Time.zone.parse('2010-07-04').to_s(:db) %> valid_to: <%= Time.zone.parse('2010-07-05').to_s(:db) %> outzone_at: <%= Time.zone.parse('2010-07-06').to_s(:db) %> - delete_at: <%= Time.zone.parse('2010-07-07').to_s(:db) %> + delete_date: 2010-07-07 force_delete_date: 2010-07-08 period: 1 period_unit: m diff --git a/test/lib/serializers/registrant_api/domain_test.rb b/test/lib/serializers/registrant_api/domain_test.rb index 6d86088b7..71f234c04 100644 --- a/test/lib/serializers/registrant_api/domain_test.rb +++ b/test/lib/serializers/registrant_api/domain_test.rb @@ -72,7 +72,7 @@ class SerializersRegistrantApiDomainTest < ActiveSupport::TestCase keys = %i[id name registrar registered_at valid_to created_at updated_at registrant tech_contacts admin_contacts transfer_code name_dirty name_puny period period_unit creator_str updator_str legacy_id legacy_registrar_id legacy_registrant_id - outzone_at delete_at registrant_verification_asked_at + outzone_at delete_date registrant_verification_asked_at registrant_verification_token pending_json force_delete_date statuses locked_by_registrant_at status_notes nameservers] diff --git a/test/models/domain/releasable/auctionable_test.rb b/test/models/domain/releasable/auctionable_test.rb index b4cb9098b..3af0049dc 100644 --- a/test/models/domain/releasable/auctionable_test.rb +++ b/test/models/domain/releasable/auctionable_test.rb @@ -14,8 +14,8 @@ class DomainReleasableAuctionableTest < ActiveSupport::TestCase end def test_sells_domain_at_auction - @domain.update!(delete_at: Time.zone.parse('2010-07-05 07:59')) - travel_to Time.zone.parse('2010-07-05 08:00') + @domain.update!(delete_date: '2010-07-04') + travel_to Time.zone.parse('2010-07-05') Domain.release_domains @@ -50,17 +50,17 @@ class DomainReleasableAuctionableTest < ActiveSupport::TestCase end def test_deletes_registered_domain - @domain.update!(delete_at: Time.zone.parse('2010-07-05 07:59')) - travel_to Time.zone.parse('2010-07-05 08:00') + @domain.update!(delete_date: '2010-07-04') + travel_to Time.zone.parse('2010-07-05') assert_difference 'Domain.count', -1 do Domain.release_domains end end - def test_ignores_domains_with_delete_at_in_the_future_or_now - @domain.update!(delete_at: Time.zone.parse('2010-07-05 08:00')) - travel_to Time.zone.parse('2010-07-05 08:00') + def test_ignores_domains_with_delete_date_in_the_future + @domain.update!(delete_date: '2010-07-06') + travel_to Time.zone.parse('2010-07-05') assert_no_difference 'Domain.count' do Domain.release_domains @@ -69,9 +69,8 @@ class DomainReleasableAuctionableTest < ActiveSupport::TestCase end def test_ignores_domains_with_server_delete_prohibited_status - @domain.update!(delete_at: Time.zone.parse('2010-07-05 07:59'), - statuses: [DomainStatus::SERVER_DELETE_PROHIBITED]) - travel_to Time.zone.parse('2010-07-05 08:00') + @domain.update!(delete_date: '2010-07-04', statuses: [DomainStatus::SERVER_DELETE_PROHIBITED]) + travel_to Time.zone.parse('2010-07-05') assert_no_difference 'Domain.count' do Domain.release_domains diff --git a/test/models/domain/releasable/discardable_test.rb b/test/models/domain/releasable/discardable_test.rb index b1603e7fa..d7c2a8ed2 100644 --- a/test/models/domain/releasable/discardable_test.rb +++ b/test/models/domain/releasable/discardable_test.rb @@ -5,9 +5,9 @@ class DomainReleasableDiscardableTest < ActiveSupport::TestCase @domain = domains(:shop) end - def test_discards_domains_with_past_delete_at - @domain.update!(delete_at: Time.zone.parse('2010-07-05 07:59')) - travel_to Time.zone.parse('2010-07-05 08:00') + def test_discards_domains_with_past_delete_date + @domain.update!(delete_date: '2010-07-04') + travel_to Time.zone.parse('2010-07-05') Domain.release_domains @domain.reload @@ -25,9 +25,9 @@ class DomainReleasableDiscardableTest < ActiveSupport::TestCase assert @domain.discarded? end - def test_ignores_domains_with_delete_at_in_the_future_or_now - @domain.update!(delete_at: Time.zone.parse('2010-07-05 08:00')) - travel_to Time.zone.parse('2010-07-05 08:00') + def test_ignores_domains_with_delete_date_in_the_future + @domain.update!(delete_date: '2010-07-06') + travel_to Time.zone.parse('2010-07-05') Domain.release_domains @domain.reload @@ -36,8 +36,8 @@ class DomainReleasableDiscardableTest < ActiveSupport::TestCase end def test_ignores_already_discarded_domains - @domain.update!(delete_at: Time.zone.parse('2010-07-05 07:59')) - travel_to Time.zone.parse('2010-07-05 08:00') + @domain.update!(delete_date:'2010-07-05') + travel_to Time.zone.parse('2010-07-05') Domain.release_domains @@ -51,9 +51,8 @@ class DomainReleasableDiscardableTest < ActiveSupport::TestCase end def test_ignores_domains_with_server_delete_prohibited_status - @domain.update!(delete_at: Time.zone.parse('2010-07-05 07:59'), - statuses: [DomainStatus::SERVER_DELETE_PROHIBITED]) - travel_to Time.zone.parse('2010-07-05 08:00') + @domain.update!(delete_date: '2010-07-04', statuses: [DomainStatus::SERVER_DELETE_PROHIBITED]) + travel_to Time.zone.parse('2010-07-05') Domain.release_domains @domain.reload @@ -62,12 +61,13 @@ class DomainReleasableDiscardableTest < ActiveSupport::TestCase end def test_discarding_a_domain_schedules_deletion_at_random_time - travel_to Time.zone.parse('2010-07-05 10:30') - @domain.update_columns(delete_at: Time.zone.parse('2010-07-05 10:00')) + travel_to Time.zone.parse('2010-07-05') + + @domain.update_columns(delete_date: '2010-07-05') Domain.release_domains other_domain = domains(:airport) - other_domain.update_columns(delete_at: Time.zone.parse('2010-07-05 10:00')) + other_domain.update_columns(delete_date: '2010-07-05') Domain.release_domains background_job = QueJob.find_by("args->>0 = '#{@domain.id}'", job_class: DomainDeleteJob.name) @@ -77,9 +77,9 @@ class DomainReleasableDiscardableTest < ActiveSupport::TestCase end def test_discarding_a_domain_bypasses_validation - travel_to Time.zone.parse('2010-07-05 10:30') domain = domains(:invalid) - domain.update_columns(delete_at: Time.zone.parse('2010-07-05 10:00')) + domain.update_columns(delete_date: '2010-07-04') + travel_to Time.zone.parse('2010-07-05') Domain.release_domains domain.reload diff --git a/test/system/admin_area/domains/details_test.rb b/test/system/admin_area/domains/details_test.rb index 33636e39a..49fada58e 100644 --- a/test/system/admin_area/domains/details_test.rb +++ b/test/system/admin_area/domains/details_test.rb @@ -7,8 +7,8 @@ class AdminAreaDomainDetailsTest < ApplicationSystemTestCase end def test_discarded_domain_has_corresponding_label - travel_to Time.zone.parse('2010-07-05 10:30') - @domain.delete_at = Time.zone.parse('2010-07-05 10:00') + @domain.delete_date = '2010-07-04' + travel_to Time.zone.parse('2010-07-05') visit admin_domain_url(@domain) assert_no_css 'span.label.label-warning', text: 'deleteCandidate' diff --git a/test/system/registrant_area/domains/details_test.rb b/test/system/registrant_area/domains/details_test.rb index 5ebff3e28..ef9197541 100644 --- a/test/system/registrant_area/domains/details_test.rb +++ b/test/system/registrant_area/domains/details_test.rb @@ -20,7 +20,7 @@ class RegistrantAreaDomainDetailsTest < ApplicationSystemTestCase assert_text "Valid to #{l Time.zone.parse('2010-07-05')}" assert_text "Outzone at #{l Time.zone.parse('2010-07-06')}" - assert_text "Delete at #{l Time.zone.parse('2010-07-07')}" + assert_text "Delete date #{l Date.parse('2010-07-07')}" assert_text "Force delete date #{l Date.parse('2010-07-08')}" end diff --git a/test/tasks/data_migrations/convert_domain_delete_date_test.rb b/test/tasks/data_migrations/convert_domain_delete_date_test.rb new file mode 100644 index 000000000..a17e1109b --- /dev/null +++ b/test/tasks/data_migrations/convert_domain_delete_date_test.rb @@ -0,0 +1,61 @@ +require 'test_helper' + +class ConvertDomainDeleteDateTaskTest < ActiveSupport::TestCase + setup do + @domain = domains(:shop) + end + + def test_moves_domain_delete_date_one_day_ahead + @domain.update!(delete_date: '2010-07-05') + + capture_io do + run_task + end + @domain.reload + + assert_equal Date.parse('2010-07-06'), @domain.delete_date + end + + def test_processes_invalid_domains + @domain = domains(:invalid) + @domain.update_columns(delete_date: '2010-07-05') + + capture_io do + run_task + end + @domain.reload + + assert_equal Date.parse('2010-07-06'), @domain.delete_date + end + + def test_skips_non_expired_domains + @domain.update!(delete_date: nil) + + assert_nothing_raised do + capture_io do + run_task + end + end + end + + def test_output + eliminate_effect_of_all_domains_except(@domain) + @domain.update!(delete_date: '2010-07-05') + + assert_output "Domains processed: 1\n" do + run_task + end + end + + private + + def eliminate_effect_of_all_domains_except(domain) + Domain.connection.disable_referential_integrity do + Domain.delete_all("id != #{domain.id}") + end + end + + def run_task + Rake::Task['data_migrations:convert_domain_delete_date'].execute + end +end \ No newline at end of file diff --git a/test/tasks/domains/release_test.rb b/test/tasks/domains/release_test.rb index 69d0eae84..0db06ea9e 100644 --- a/test/tasks/domains/release_test.rb +++ b/test/tasks/domains/release_test.rb @@ -6,8 +6,8 @@ class ReleaseDomainsTaskTest < ActiveSupport::TestCase end def test_output - @domain.update!(delete_at: Time.zone.parse('2010-07-05 07:59')) - travel_to Time.zone.parse('2010-07-05 08:00') + @domain.update!(delete_date: '2010-07-04') + travel_to Time.zone.parse('2010-07-05') assert_output("shop.test is released\nReleased total: 1\n") { run_task } end