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
def audit_deletion
audit_context = {
name: 'approval_rule_deleted',
author: current_user,
scope: rule.project,
target: rule,
......
......@@ -22,8 +22,9 @@ def action
private
def with_audit_logged(&block)
name = rule.new_record? ? 'approval_rule_created' : 'update_aproval_rules'
audit_context = {
name: 'update_aproval_rules',
name: name,
author: current_user,
scope: rule.project,
target: rule
......@@ -62,7 +63,8 @@ def log_audit_event(rule)
:approvals_required,
as: 'number of required approvals',
entity: rule.project,
model: rule
model: rule,
event_type: 'update_aproval_rules'
)
end
end
......
......@@ -349,4 +349,33 @@
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
......@@ -3,18 +3,19 @@
require 'spec_helper'
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) }
describe '#execute' do
let!(:project_rule) { create(:approval_project_rule, project: project) }
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
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({
author_name: current_user.name,
custom_message: 'Deleted approval rule',
......@@ -22,11 +23,20 @@
target_id: project_rule.id
})
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
context 'when there is no merge request rules' do
it 'destroys project rule' do
expect { subject.execute }.to change { ApprovalProjectRule.count }.by(-1)
expect { subject }.to change { ApprovalProjectRule.count }.by(-1)
end
include_context 'an audit event is added'
......@@ -41,7 +51,7 @@
context 'when open' 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
include_context 'an audit event is added'
......@@ -53,7 +63,7 @@
end
it 'does nothing' do
expect { subject.execute }.not_to change { ApprovalMergeRequestRule.count }
expect { subject }.not_to change { ApprovalMergeRequestRule.count }
end
include_context 'an audit event is added'
......
......@@ -203,6 +203,10 @@
end
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(:group) { create(:group, name: 'Justice League') }
let_it_be(:new_approver) { create(:user, name: 'Spiderman') }
......@@ -219,6 +223,7 @@
end
before do
parent_group.add_owner(user)
project.add_reporter approver
project.add_reporter new_approver
end
......@@ -226,6 +231,7 @@
context 'when licensed' do
before do
stub_licensed_features(audit_events: true)
stub_licensed_features(external_audit_events: true)
end
context 'when rule update operation succeeds', :request_store do
......@@ -235,6 +241,11 @@
end.to change { AuditEvent.count }.by(1)
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
described_class.new(approval_rule, user, approvals_required: 1).execute
......
......@@ -88,6 +88,22 @@
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
let(:service) do
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