Fix Geo::ProjectRegistry.failed to count projects where wiki sync failed

parent a240dbab
......@@ -4,7 +4,16 @@ class Geo::ProjectRegistry < Geo::BaseRegistry
validates :project, presence: true
scope :dirty, -> { where(arel_table[:resync_repository].eq(true).or(arel_table[:resync_wiki].eq(true))) }
scope :failed, -> { where.not(last_repository_synced_at: nil).where(last_repository_successful_sync_at: nil) }
def self.failed
repository_sync_failed = arel_table[:last_repository_synced_at].not_eq(nil)
.and(arel_table[:last_repository_successful_sync_at].eq(nil))
wiki_sync_failed = arel_table[:last_wiki_synced_at].not_eq(nil)
.and(arel_table[:last_wiki_successful_sync_at].eq(nil))
where(repository_sync_failed.or(wiki_sync_failed))
end
def self.synced
where.not(last_repository_synced_at: nil, last_repository_successful_sync_at: nil)
......
......@@ -40,5 +40,23 @@ FactoryGirl.define do
resync_repository true
resync_wiki true
end
trait :repository_sync_failed do
last_repository_synced_at { 5.days.ago }
last_repository_successful_sync_at nil
last_wiki_synced_at { 5.days.ago }
last_wiki_successful_sync_at { 5.days.ago }
resync_repository true
resync_wiki false
end
trait :wiki_sync_failed do
last_repository_synced_at { 5.days.ago }
last_repository_successful_sync_at { 5.days.ago }
last_wiki_synced_at { 5.days.ago }
last_wiki_successful_sync_at nil
resync_repository false
resync_wiki true
end
end
end
......@@ -9,6 +9,30 @@ describe Geo::ProjectRegistry do
it { is_expected.to validate_presence_of(:project) }
end
describe '.failed' do
let(:project) { create(:project) }
let(:synced_at) { Time.now }
it 'does not return synced projects' do
create(:geo_project_registry, :synced, project: project)
expect(described_class.failed).to be_empty
end
it 'does not return dirty projects' do
create(:geo_project_registry, :synced, :dirty, project: project)
expect(described_class.synced).to be_empty
end
it 'returns projects where last attempt to sync failed' do
repository_sync_failed = create(:geo_project_registry, :repository_sync_failed, project: project)
wiki_sync_failed = create(:geo_project_registry, :wiki_sync_failed, project: project)
expect(described_class.failed).to match_array([repository_sync_failed, wiki_sync_failed])
end
end
describe '.synced' do
let(:project) { create(:project) }
let(:synced_at) { Time.now }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment