Fix broken spec due to last_activity_at updates being throttled
In https://gitlab.com/gitlab-org/gitlab-ce/builds/4218398, the build failed because the last_activity_at column was only being updated once per hour. We can fix this spec by stubbing out the throttling and adjusting the spec to test the right event timestamp.
This commit is contained in:
parent
b94de5fd55
commit
cf9ee8fda7
|
@ -330,13 +330,23 @@ class Event < ActiveRecord::Base
|
||||||
|
|
||||||
# Don't even bother obtaining a lock if the last update happened less than
|
# Don't even bother obtaining a lock if the last update happened less than
|
||||||
# 60 minutes ago.
|
# 60 minutes ago.
|
||||||
return if project.last_activity_at > RESET_PROJECT_ACTIVITY_INTERVAL.ago
|
return if recent_update?
|
||||||
|
|
||||||
return unless Gitlab::ExclusiveLease.
|
return unless try_obtain_lease
|
||||||
new("project:update_last_activity_at:#{project.id}",
|
|
||||||
timeout: RESET_PROJECT_ACTIVITY_INTERVAL.to_i).
|
|
||||||
try_obtain
|
|
||||||
|
|
||||||
project.update_column(:last_activity_at, created_at)
|
project.update_column(:last_activity_at, created_at)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def recent_update?
|
||||||
|
project.last_activity_at > RESET_PROJECT_ACTIVITY_INTERVAL.ago
|
||||||
|
end
|
||||||
|
|
||||||
|
def try_obtain_lease
|
||||||
|
Gitlab::ExclusiveLease.
|
||||||
|
new("project:update_last_activity_at:#{project.id}",
|
||||||
|
timeout: RESET_PROJECT_ACTIVITY_INTERVAL.to_i).
|
||||||
|
try_obtain
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
FactoryGirl.define do
|
FactoryGirl.define do
|
||||||
factory :event do
|
factory :event do
|
||||||
|
project
|
||||||
|
author factory: :user
|
||||||
|
|
||||||
factory :closed_issue_event do
|
factory :closed_issue_event do
|
||||||
project
|
|
||||||
action { Event::CLOSED }
|
action { Event::CLOSED }
|
||||||
target factory: :closed_issue
|
target factory: :closed_issue
|
||||||
author factory: :user
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -308,20 +308,23 @@ describe Project, models: true do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'last_activity methods' do
|
describe 'last_activity methods' do
|
||||||
let(:project) { create(:project) }
|
let(:timestamp) { Time.now - 2.hours }
|
||||||
let(:last_event) { double(created_at: Time.now) }
|
let(:project) { create(:project, created_at: timestamp, updated_at: timestamp) }
|
||||||
|
|
||||||
describe 'last_activity' do
|
describe 'last_activity' do
|
||||||
it 'alias last_activity to last_event' do
|
it 'alias last_activity to last_event' do
|
||||||
allow(project).to receive(:last_event).and_return(last_event)
|
last_event = create(:event, project: project)
|
||||||
|
|
||||||
expect(project.last_activity).to eq(last_event)
|
expect(project.last_activity).to eq(last_event)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'last_activity_date' do
|
describe 'last_activity_date' do
|
||||||
it 'returns the creation date of the project\'s last event if present' do
|
it 'returns the creation date of the project\'s last event if present' do
|
||||||
create(:event, project: project)
|
expect_any_instance_of(Event).to receive(:try_obtain_lease).and_return(true)
|
||||||
expect(project.last_activity_at.to_i).to eq(last_event.created_at.to_i)
|
new_event = create(:event, project: project, created_at: Time.now)
|
||||||
|
|
||||||
|
expect(project.last_activity_at.to_i).to eq(new_event.created_at.to_i)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns the project\'s last update date if it has no events' do
|
it 'returns the project\'s last update date if it has no events' do
|
||||||
|
|
Loading…
Reference in New Issue