Skip to content
代码片段 群组 项目
未验证 提交 b765da7f 编辑于 作者: Shane Maglangit's avatar Shane Maglangit 提交者: GitLab
浏览文件

Ensure organizations activity page shows most recent project activities

上级 c08dacf6
No related branches found
No related tags found
2 合并请求!3031Merge per-main-jh to main-jh by luzhiyuan,!3030Merge per-main-jh to main-jh
......@@ -86,7 +86,8 @@ def load_events
# limit + 1 allows us to determine if we have another page.
# This will be removed as part of https://gitlab.com/gitlab-org/gitlab/-/issues/382473
limit: activity_query_limit + 1,
groups: groups
groups: groups,
preserve_projects_order: true
).to_a.map(&:present)
Events::RenderService.new(current_user).execute(@events)
......
......@@ -17,12 +17,14 @@ class EventCollection
# projects - An ActiveRecord::Relation object that returns the projects for
# which to retrieve events.
# filter - An EventFilter instance to use for filtering events.
def initialize(projects, limit: 20, offset: 0, filter: nil, groups: nil)
# preserve_projects_order - If true, retains the :order clause for projects.
def initialize(projects, limit: 20, offset: 0, filter: nil, groups: nil, preserve_projects_order: false)
@projects = projects
@limit = limit
@offset = offset
@filter = filter || EventFilter.new(EventFilter::ALL)
@groups = groups
@preserve_projects_order = preserve_projects_order
end
# Returns an Array containing the events.
......@@ -92,7 +94,7 @@ def current_page
end
def projects
@projects.except(:order)
@preserve_projects_order ? @projects : @projects.except(:order)
end
def groups
......
......@@ -122,6 +122,33 @@
end
end
context 'with multiple projects' do
let_it_be(:project_1) { create(:project_empty_repo, name: 'Project Z') }
let_it_be(:project_1_event) { create(:wiki_page_event, project: project_1) }
let_it_be(:project_2) { create(:project_empty_repo, name: 'Project A') }
let_it_be(:project_2_event) { create(:wiki_page_event, project: project_2) }
context 'when projects param has an order by clause' do
let_it_be(:projects_sorted_by_name) do
Project.where(id: [project_1.id, project_2.id]).limit(1).order(:name)
end
context 'when preserve_projects_order is true' do
subject(:events) do
described_class.new(
projects_sorted_by_name,
preserve_projects_order: true
).to_a
end
it 'returns events from the first project with respect to the order by column' do
expect(events).to contain_exactly(project_2_event)
end
end
end
end
context 'with group events' do
let(:groups) { group.self_and_descendants.public_or_visible_to_user(user) }
let(:subject) { described_class.new(projects, groups: groups).to_a }
......
......@@ -208,6 +208,33 @@
end
end
context 'when organization has multiple projects' do
let_it_be(:stale_project) do
create(:project, organization: organization, last_activity_at: Date.yesterday)
end
let_it_be(:recently_updated_project) do
create(:project, organization: organization, last_activity_at: Date.current)
end
before_all do
stale_project.add_developer(user)
recently_updated_project.add_developer(user)
sign_in(user)
end
it 'returns events from the projects with the most recent activities' do
stub_const("#{described_class}::DEFAULT_RESOURCE_LIMIT", 1)
get activity_organization_path(organization, format: :json)
expect(json_response['events'].size).to eq(1)
expect(json_response['events'].first["resource_parent"]["full_path"])
.to eq(recently_updated_project.full_path)
end
end
context 'when most recent activities are from groups inaccessible to user' do
let_it_be(:limit) { 5 }
......
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册