Skip to content

Commit

Permalink
Update
Browse files Browse the repository at this point in the history
  • Loading branch information
Artur Beljajev committed Jun 17, 2019
1 parent 8a64b10 commit 75f7dd2
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 33 deletions.
27 changes: 14 additions & 13 deletions app/models/concerns/contact/archivable.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,19 @@ module Contact
module Archivable
extend ActiveSupport::Concern

class_methods do
def inactivity_period
Setting.orphans_contacts_in_months&.months
end
included do
class_attribute :inactivity_period, instance_predicate: false, instance_writer: false
self.inactivity_period = Setting.orphans_contacts_in_months.months
end

class_methods do
def archivable
unlinked.find_each.select(&:archivable?)
end
end

def archivable?
if DomainVersion.was_contact_linked?(self)
DomainVersion.contact_unlinked_more_than?(contact: self,
period: self.class.inactivity_period)
else
older_than(archival_threshold)
end
inactive?
end

def archive
Expand All @@ -29,12 +25,17 @@ def archive

private

def older_than(time)
def older_than?(time)
created_at < time
end

def archival_threshold
self.class.inactivity_period.ago
def inactive?
if DomainVersion.was_contact_linked?(self)
DomainVersion.contact_unlinked_more_than?(contact: self,
period: inactivity_period)
else
older_than?(inactivity_period.ago)
end
end
end
end
Expand Down
25 changes: 10 additions & 15 deletions test/models/contact/archivable_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,41 +5,36 @@ class ArchivableContactTest < ActiveSupport::TestCase
@contact = contacts(:john)
end

def test_returns_inactivity_period
Setting.orphans_contacts_in_months = 1
assert_equal 1.month, Contact.inactivity_period
end

def test_contact_is_archivable_when_inactivity_threshold_is_reached
def test_contact_is_archivable_when_inactivity_period_is_reached
DomainVersion.stub(:contact_unlinked_more_than?, true) do
assert @contact.archivable?
end
end

def test_contact_is_archivable_when_it_is_older_than_inactivity_period_and_was_never_linked
@contact.created_at = Time.zone.parse('2010-06-05')
def test_contact_is_archivable_when_it_was_never_linked_and_is_older_than_inactivity_period
Contact.inactivity_period = 1.second
@contact.created_at = Time.zone.parse('2010-07-05 00:00:00')
travel_to Time.zone.parse('2010-07-05 00:00:01')
Setting.orphans_contacts_in_months = 1

DomainVersion.stub(:was_contact_linked?, false) do
assert @contact.archivable?
end
end

def test_contact_is_unarchivable_when_inactivity_threshold_is_not_reached
def test_contact_is_not_archivable_when_inactivity_period_is_not_reached
Contact.inactivity_period = 1.second
@contact.created_at = Time.zone.parse('2010-07-05')
travel_to Time.zone.parse('2010-07-05')
Setting.orphans_contacts_in_months = 1

DomainVersion.stub(:contact_unlinked_more_than?, false) do
assert_not @contact.archivable?
end
end

def test_contact_is_unarchivable_when_it_was_linked_within_inactivity_period
def test_contact_is_not_archivable_when_it_was_linked_within_inactivity_period
Contact.inactivity_period = 0.seconds
@contact.created_at = Time.zone.parse('2010-07-05')
travel_to Time.zone.parse('2010-07-05')
Setting.orphans_contacts_in_months = 1

DomainVersion.stub(:was_contact_linked?, false) do
assert_not @contact.archivable?
Expand Down Expand Up @@ -70,7 +65,7 @@ def archivable_contact
contact.update_columns(created_at: Time.zone.parse('2010-06-05'))

travel_to Time.zone.parse('2010-07-05 00:00:01')
Setting.orphans_contacts_in_months = 1
Contact.inactivity_period = 1.month
DomainVersion.delete_all

contact
Expand All @@ -81,7 +76,7 @@ def unarchivable_contact
contact.update_columns(created_at: Time.zone.parse('2010-07-05'))

travel_to Time.zone.parse('2010-07-05')
Setting.orphans_contacts_in_months = 1
Contact.inactivity_period = 1.month
DomainVersion.delete_all

contact
Expand Down
8 changes: 3 additions & 5 deletions test/tasks/contacts/archive_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,20 @@

class ArchiveContactsTaskTest < ActiveSupport::TestCase
setup do
@contact = inactive_contact(create_time: Time.zone.parse('2010-06-05'))
@contact = inactive_contact(create_time: Time.zone.parse('2010-06-05 00:00:00'))
travel_to Time.zone.parse('2010-07-05 00:00:01')
Setting.orphans_contacts_in_months = 1
Contact.inactivity_period = 1.second

eliminate_effect_of_all_contacts_except(@contact)
end

def test_archives_contacts
def test_archives_inactive_contacts
assert_difference 'Contact.count', -1 do
capture_io { run_task }
end
end

def test_output
assert_not_empty @contact.code

expected_output = "Contact ##{@contact.id} (code: #{@contact.code}) is archived\n" \
"Archived total: 1\n"
assert_output(expected_output) { run_task }
Expand Down

0 comments on commit 75f7dd2

Please sign in to comment.