Skip to content
Snippets Groups Projects
Commit 5a0223ae authored by Harsimar Sandhu's avatar Harsimar Sandhu :three: Committed by Alexandru Croitor
Browse files

Event type information in approval rule audit event streaming

Changelog: added
EE: true
parent ca5bcc99
No related branches found
No related tags found
1 merge request!89939Event type information in MR approval rule audit event streaming
...@@ -36,6 +36,7 @@ def remove_associated_approval_rules_from_unmerged_merge_requests ...@@ -36,6 +36,7 @@ def remove_associated_approval_rules_from_unmerged_merge_requests
def audit_deletion def audit_deletion
audit_context = { audit_context = {
name: 'approval_rule_deleted',
author: current_user, author: current_user,
scope: rule.project, scope: rule.project,
target: rule, target: rule,
......
...@@ -22,8 +22,9 @@ def action ...@@ -22,8 +22,9 @@ def action
private private
def with_audit_logged(&block) def with_audit_logged(&block)
name = rule.new_record? ? 'approval_rule_created' : 'update_aproval_rules'
audit_context = { audit_context = {
name: 'update_aproval_rules', name: name,
author: current_user, author: current_user,
scope: rule.project, scope: rule.project,
target: rule target: rule
...@@ -62,7 +63,8 @@ def log_audit_event(rule) ...@@ -62,7 +63,8 @@ def log_audit_event(rule)
:approvals_required, :approvals_required,
as: 'number of required approvals', as: 'number of required approvals',
entity: rule.project, entity: rule.project,
model: rule model: rule,
event_type: 'update_aproval_rules'
) )
end end
end end
......
...@@ -349,4 +349,33 @@ ...@@ -349,4 +349,33 @@
end end
end end
end end
context 'audit event is streamed with correct event type', :request_store do
let_it_be(:user) { create(:user)}
let_it_be(:group) { create(:group) }
let_it_be(:project) { create(:project, creator: user, group: group) }
let_it_be(:new_approvers) { create_list(:user, 2) }
let_it_be(:new_groups) { create_list(:group, 2, :private) }
let_it_be(:destination) { create(:external_audit_event_destination, group: group) }
subject do
described_class.new(
project,
user,
{ name: 'security',
approvals_required: 1,
user_ids: new_approvers.map(&:id),
group_ids: new_groups.map(&:id) }
).execute
end
before do
group.add_owner(user)
stub_licensed_features(external_audit_events: true)
end
it_behaves_like 'sends correct event type in audit event stream' do
let_it_be(:event_type) { 'approval_rule_created' }
end
end
end end
...@@ -3,18 +3,19 @@ ...@@ -3,18 +3,19 @@
require 'spec_helper' require 'spec_helper'
RSpec.describe ApprovalRules::ProjectRuleDestroyService do RSpec.describe ApprovalRules::ProjectRuleDestroyService do
let(:project) { create(:project, :repository) } let(:group) { create(:group) }
let(:project) { create(:project, :repository, group: group) }
let(:merge_request) { create(:merge_request, source_project: project, target_project: project) } let(:merge_request) { create(:merge_request, source_project: project, target_project: project) }
describe '#execute' do describe '#execute' do
let!(:project_rule) { create(:approval_project_rule, project: project) } let!(:project_rule) { create(:approval_project_rule, project: project) }
let(:current_user) { create(:user, name: 'Bruce Wayne') } let(:current_user) { create(:user, name: 'Bruce Wayne') }
subject { described_class.new(project_rule, current_user) } subject { described_class.new(project_rule, current_user).execute }
shared_context 'an audit event is added' do shared_context 'an audit event is added' do
it 'adds an audit event' do it 'adds an audit event' do
expect { subject.execute }.to change { AuditEvent.count }.by(1) expect { subject }.to change { AuditEvent.count }.by(1)
expect(AuditEvent.last.details).to include({ expect(AuditEvent.last.details).to include({
author_name: current_user.name, author_name: current_user.name,
custom_message: 'Deleted approval rule', custom_message: 'Deleted approval rule',
...@@ -22,11 +23,20 @@ ...@@ -22,11 +23,20 @@
target_id: project_rule.id target_id: project_rule.id
}) })
end end
before do
stub_licensed_features(external_audit_events: true)
group.external_audit_event_destinations.create!(destination_url: 'http://example.com')
end
it_behaves_like 'sends correct event type in audit event stream' do
let_it_be(:event_type) { 'approval_rule_deleted' }
end
end end
context 'when there is no merge request rules' do context 'when there is no merge request rules' do
it 'destroys project rule' do it 'destroys project rule' do
expect { subject.execute }.to change { ApprovalProjectRule.count }.by(-1) expect { subject }.to change { ApprovalProjectRule.count }.by(-1)
end end
include_context 'an audit event is added' include_context 'an audit event is added'
...@@ -41,7 +51,7 @@ ...@@ -41,7 +51,7 @@
context 'when open' do context 'when open' do
it 'destroys merge request rules' do it 'destroys merge request rules' do
expect { subject.execute }.to change { ApprovalMergeRequestRule.count }.by(-1) expect { subject }.to change { ApprovalMergeRequestRule.count }.by(-1)
end end
include_context 'an audit event is added' include_context 'an audit event is added'
...@@ -53,7 +63,7 @@ ...@@ -53,7 +63,7 @@
end end
it 'does nothing' do it 'does nothing' do
expect { subject.execute }.not_to change { ApprovalMergeRequestRule.count } expect { subject }.not_to change { ApprovalMergeRequestRule.count }
end end
include_context 'an audit event is added' include_context 'an audit event is added'
......
...@@ -203,6 +203,10 @@ ...@@ -203,6 +203,10 @@
end end
describe 'audit events' do describe 'audit events' do
let_it_be(:user) { create(:user)}
let_it_be(:parent_group) { create(:group) }
let_it_be(:destination) { create(:external_audit_event_destination, group: parent_group) }
let_it_be(:project) { create(:project, creator: user, group: parent_group) }
let_it_be(:approver) { create(:user, name: 'Batman') } let_it_be(:approver) { create(:user, name: 'Batman') }
let_it_be(:group) { create(:group, name: 'Justice League') } let_it_be(:group) { create(:group, name: 'Justice League') }
let_it_be(:new_approver) { create(:user, name: 'Spiderman') } let_it_be(:new_approver) { create(:user, name: 'Spiderman') }
...@@ -219,6 +223,7 @@ ...@@ -219,6 +223,7 @@
end end
before do before do
parent_group.add_owner(user)
project.add_reporter approver project.add_reporter approver
project.add_reporter new_approver project.add_reporter new_approver
end end
...@@ -226,6 +231,7 @@ ...@@ -226,6 +231,7 @@
context 'when licensed' do context 'when licensed' do
before do before do
stub_licensed_features(audit_events: true) stub_licensed_features(audit_events: true)
stub_licensed_features(external_audit_events: true)
end end
context 'when rule update operation succeeds', :request_store do context 'when rule update operation succeeds', :request_store do
...@@ -235,6 +241,11 @@ ...@@ -235,6 +241,11 @@
end.to change { AuditEvent.count }.by(1) end.to change { AuditEvent.count }.by(1)
end end
it_behaves_like 'sends correct event type in audit event stream' do
let_it_be(:event_type) { 'update_aproval_rules' }
subject {described_class.new(approval_rule, user, approvals_required: 1).execute}
end
it 'audits the number of required approvals change' do it 'audits the number of required approvals change' do
described_class.new(approval_rule, user, approvals_required: 1).execute described_class.new(approval_rule, user, approvals_required: 1).execute
......
...@@ -88,6 +88,22 @@ ...@@ -88,6 +88,22 @@
end end
end end
context 'when overriding target details' do
subject(:service) do
described_class.new(
author: author,
scope: scope,
target: target,
message: message,
target_details: "This is my target details"
)
end
it 'uses correct target details' do
expect(event.target_details).to eq("This is my target details")
end
end
context 'when deploy token is passed as author' do context 'when deploy token is passed as author' do
let(:service) do let(:service) do
described_class.new( described_class.new(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment