diff options
author | Douwe Maan <douwe@gitlab.com> | 2018-03-06 19:21:17 +0300 |
---|---|---|
committer | Douwe Maan <douwe@gitlab.com> | 2018-03-06 19:21:17 +0300 |
commit | 76658d06b4dcc48497a604b00e8870359790d1bc (patch) | |
tree | 1326f0c4ec3064131e430fc7fcfc261f5a0e1dd3 | |
parent | 12bc2d8df0890fad3296b47395fb7279a11e43c1 (diff) | |
parent | 9cb7e93f09b1ff0c1c889a004479a8ef21abbae2 (diff) |
Merge branch 'sh-dashboard-sort-fix' into 'master'
Fix project dashboard showing the wrong timestamps
Closes #27181
See merge request gitlab-org/gitlab-ce!17504
-rw-r--r-- | app/models/project.rb | 5 | ||||
-rw-r--r-- | changelogs/unreleased/sh-dashboard-sort-fix.yml | 5 | ||||
-rw-r--r-- | spec/features/dashboard/projects_spec.rb | 8 | ||||
-rw-r--r-- | spec/models/project_spec.rb | 14 |
4 files changed, 30 insertions, 2 deletions
diff --git a/app/models/project.rb b/app/models/project.rb index 934b226f46b..7a6abf2e643 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -276,7 +276,8 @@ class Project < ActiveRecord::Base scope :without_storage_feature, ->(feature) { where('storage_version < :version OR storage_version IS NULL', version: HASHED_STORAGE_FEATURES[feature]) } scope :with_unmigrated_storage, -> { where('storage_version < :version OR storage_version IS NULL', version: LATEST_STORAGE_VERSION) } - scope :sorted_by_activity, -> { reorder(last_activity_at: :desc) } + # last_activity_at is throttled every minute, but last_repository_updated_at is updated with every push + scope :sorted_by_activity, -> { reorder("GREATEST(COALESCE(last_activity_at, '1970-01-01'), COALESCE(last_repository_updated_at, '1970-01-01')) DESC") } scope :sorted_by_stars, -> { reorder('projects.star_count DESC') } scope :in_namespace, ->(namespace_ids) { where(namespace_id: namespace_ids) } @@ -778,7 +779,7 @@ class Project < ActiveRecord::Base end def last_activity_date - last_repository_updated_at || last_activity_at || updated_at + [last_activity_at, last_repository_updated_at, updated_at].compact.max end def project_id diff --git a/changelogs/unreleased/sh-dashboard-sort-fix.yml b/changelogs/unreleased/sh-dashboard-sort-fix.yml new file mode 100644 index 00000000000..6fd252f6707 --- /dev/null +++ b/changelogs/unreleased/sh-dashboard-sort-fix.yml @@ -0,0 +1,5 @@ +--- +title: Fix project dashboard showing the wrong timestamps +merge_request: +author: +type: fixed diff --git a/spec/features/dashboard/projects_spec.rb b/spec/features/dashboard/projects_spec.rb index 586c7b48d0b..986f864f0b5 100644 --- a/spec/features/dashboard/projects_spec.rb +++ b/spec/features/dashboard/projects_spec.rb @@ -37,6 +37,14 @@ feature 'Dashboard Projects' do expect(page).to have_xpath("//time[@datetime='#{project.last_repository_updated_at.getutc.iso8601}']") end + + it 'shows the last_activity_at attribute as the update date' do + project.update_attributes!(last_repository_updated_at: 1.hour.ago, last_activity_at: Time.now) + + visit dashboard_projects_path + + expect(page).to have_xpath("//time[@datetime='#{project.last_activity_at.getutc.iso8601}']") + end end context 'when last_repository_updated_at and last_activity_at are missing' do diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index 92ea8841123..b1c9e6754b9 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -518,6 +518,20 @@ describe Project do it 'returns the project\'s last update date if it has no events' do expect(project.last_activity_date).to eq(project.updated_at) end + + it 'returns the most recent timestamp' do + project.update_attributes(updated_at: nil, + last_activity_at: timestamp, + last_repository_updated_at: timestamp - 1.hour) + + expect(project.last_activity_date).to eq(timestamp) + + project.update_attributes(updated_at: timestamp, + last_activity_at: timestamp - 1.hour, + last_repository_updated_at: nil) + + expect(project.last_activity_date).to eq(timestamp) + end end end |