Skip to content
代码片段 群组 项目
提交 7fadb500 编辑于 作者: charlie ablett's avatar charlie ablett
浏览文件

Merge branch '420167-fix-group-hooks' into 'master'

No related branches found
No related tags found
无相关合并请求
......@@ -132,6 +132,28 @@
end
end
end
context 'when group_webhooks feature is available', :aggregate_failures do
let(:input) do
{
title: 'new title',
workItemTypeId: WorkItems::Type.default_by_type(:task).to_global_id.to_s
}
end
before do
stub_licensed_features(group_webhooks: true)
create(:group_hook, issues_events: true, group: group)
end
it 'creates a work item' do
expect do
post_graphql_mutation(mutation, current_user: current_user)
end.to change { WorkItem.count }.by(1)
expect(response).to have_gitlab_http_status(:success)
end
end
end
context 'when user has permissions to create a work item' do
......
......@@ -16,12 +16,12 @@ def build(user: nil, changes: {})
object_kind: object_kind,
event_type: event_type,
user: user.hook_attrs,
project: issuable.project.hook_attrs,
project: issuable.project&.hook_attrs,
object_attributes: issuable_builder.new(issuable).build,
labels: issuable.labels_hook_attrs,
changes: final_changes(changes.slice(*safe_keys)),
# DEPRECATED
repository: issuable.project.hook_attrs.slice(:name, :url, :description, :homepage)
repository: issuable.project&.hook_attrs&.slice(:name, :url, :description, :homepage)
}
hook_data[:assignees] = issuable.assignees.map(&:hook_attrs) if issuable.assignees.any?
......
......@@ -4,6 +4,8 @@
RSpec.describe Gitlab::DataBuilder::Issuable do
let_it_be(:user) { create(:user) }
let_it_be(:group) { create(:group) }
let_it_be(:reusable_project) { create(:project, :repository, group: group) }
# This shared example requires a `builder` and `user` variable
shared_examples 'issuable hook data' do |kind, hook_data_issuable_builder_class|
......@@ -96,17 +98,17 @@
describe '#build' do
it_behaves_like 'issuable hook data', 'issue', Gitlab::HookData::IssueBuilder do
let(:issuable) { create(:issue, description: 'A description') }
let_it_be(:issuable) { create(:issue, description: 'A description', project: reusable_project) }
let(:builder) { described_class.new(issuable) }
end
it_behaves_like 'issuable hook data', 'merge_request', Gitlab::HookData::MergeRequestBuilder do
let(:issuable) { create(:merge_request, description: 'A description') }
let_it_be(:issuable) { create(:merge_request, description: 'A description', source_project: reusable_project) }
let(:builder) { described_class.new(issuable) }
end
context 'issue is assigned' do
let(:issue) { create(:issue, assignees: [user]) }
let(:issue) { create(:issue, assignees: [user], project: reusable_project) }
let(:data) { described_class.new(issue).build(user: user) }
it 'returns correct hook data' do
......@@ -117,8 +119,21 @@
end
end
context 'when issuable is a group level work item' do
let(:work_item) { create(:work_item, namespace: group, description: 'work item description') }
it 'returns correct hook data', :aggregate_failures do
data = described_class.new(work_item).build(user: user)
expect(data[:object_kind]).to eq('work_item')
expect(data[:event_type]).to eq('work_item')
expect(data.dig(:object_attributes, :id)).to eq(work_item.id)
expect(data.dig(:object_attributes, :iid)).to eq(work_item.iid)
end
end
context 'merge_request is assigned' do
let(:merge_request) { create(:merge_request, assignees: [user]) }
let(:merge_request) { create(:merge_request, assignees: [user], source_project: reusable_project) }
let(:data) { described_class.new(merge_request).build(user: user) }
it 'returns correct hook data' do
......@@ -129,7 +144,7 @@
end
context 'merge_request is assigned reviewers' do
let(:merge_request) { create(:merge_request, reviewers: [user]) }
let(:merge_request) { create(:merge_request, reviewers: [user], source_project: reusable_project) }
let(:data) { described_class.new(merge_request).build(user: user) }
it 'returns correct hook data' do
......@@ -139,7 +154,7 @@
end
context 'when merge_request does not have reviewers and assignees' do
let(:merge_request) { create(:merge_request) }
let(:merge_request) { create(:merge_request, source_project: reusable_project) }
let(:data) { described_class.new(merge_request).build(user: user) }
it 'returns correct hook data' do
......
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册