From 5db541c4bb0283579860b692008277f436489924 Mon Sep 17 00:00:00 2001 From: Michael Becker Date: Thu, 7 Jul 2022 07:15:05 -0400 Subject: [PATCH 1/4] Refactor streaming audit headers This change is prep work for [issues 366350][0] We want to emit audit events whenever the custom streaming event headers are creating/updated/destroyed We have decided to refactor the existing logic into [service classes][1], and then add then add the actual audit events using [this method][2]. I put the services under `ee/app/services` because the custom http header feature is [only available in EE gitlab][3] This first commit is **only** a refactor, so the existing specs have not been touched and the actual audit event work is not included in this commit [0]:https://gitlab.com/gitlab-org/gitlab/-/issues/366350 [1]:https://docs.gitlab.com/ee/development/reusing_abstractions.html#service-classes [2]:https://docs.gitlab.com/ee/development/audit_event_guide/#using-standard-method-call-to-record-single-event [3]:https://docs.gitlab.com/ee/development/ee_features.html#ee-only-features --- .../audit_events/streaming/headers/create.rb | 24 ++++++--- .../audit_events/streaming/headers/destroy.rb | 17 ++++--- .../audit_events/streaming/headers/update.rb | 25 ++++++---- .../audit_events/streaming/headers/base.rb | 34 +++++++++++++ .../streaming/headers/create_service.rb | 22 +++++++++ .../streaming/headers/destroy_service.rb | 27 ++++++++++ .../streaming/headers/update_service.rb | 27 ++++++++++ .../streaming/headers/base_spec.rb | 38 ++++++++++++++ .../streaming/headers/create_service_spec.rb | 38 ++++++++++++++ .../streaming/headers/destroy_service_spec.rb | 42 ++++++++++++++++ .../streaming/headers/update_service_spec.rb | 49 +++++++++++++++++++ 11 files changed, 320 insertions(+), 23 deletions(-) create mode 100644 ee/app/services/audit_events/streaming/headers/base.rb create mode 100644 ee/app/services/audit_events/streaming/headers/create_service.rb create mode 100644 ee/app/services/audit_events/streaming/headers/destroy_service.rb create mode 100644 ee/app/services/audit_events/streaming/headers/update_service.rb create mode 100644 ee/spec/services/audit_events/streaming/headers/base_spec.rb create mode 100644 ee/spec/services/audit_events/streaming/headers/create_service_spec.rb create mode 100644 ee/spec/services/audit_events/streaming/headers/destroy_service_spec.rb create mode 100644 ee/spec/services/audit_events/streaming/headers/update_service_spec.rb diff --git a/ee/app/graphql/mutations/audit_events/streaming/headers/create.rb b/ee/app/graphql/mutations/audit_events/streaming/headers/create.rb index 17353dc0f651d8..47aed587b04f40 100644 --- a/ee/app/graphql/mutations/audit_events/streaming/headers/create.rb +++ b/ee/app/graphql/mutations/audit_events/streaming/headers/create.rb @@ -18,21 +18,29 @@ class Create < BaseMutation argument :destination_id, ::Types::GlobalIDType[::AuditEvents::ExternalAuditEventDestination], required: true, - description: 'Destination to associate header with.' + description: 'Destination to associate header with.' field :header, ::Types::AuditEvents::Streaming::HeaderType, null: true, description: 'Created header.' def resolve(destination_id:, key:, value:) - destination = authorized_find!(destination_id) - unless Feature.enabled?(:streaming_audit_event_headers, destination.group) - raise Gitlab::Graphql::Errors::ResourceNotAvailable, 'feature disabled' + params = { + destination: authorized_find!(destination_id), + key: key, + value: value + } + + response = ::AuditEvents::Streaming::Headers::CreateService.new( + group: params[:destination]&.group, + params: params + ).execute + + if response.success? + { header: response.payload[:header], errors: [] } + else + { header: nil, errors: response.errors } end - - header = destination.headers.new(key: key, value: value) - - { header: (header if header.save), errors: Array(header.errors) } end private diff --git a/ee/app/graphql/mutations/audit_events/streaming/headers/destroy.rb b/ee/app/graphql/mutations/audit_events/streaming/headers/destroy.rb index 17143740b332e3..b1c3b3335b80e0 100644 --- a/ee/app/graphql/mutations/audit_events/streaming/headers/destroy.rb +++ b/ee/app/graphql/mutations/audit_events/streaming/headers/destroy.rb @@ -10,19 +10,24 @@ class Destroy < BaseMutation argument :header_id, ::Types::GlobalIDType[::AuditEvents::Streaming::Header], required: true, - description: 'Header to delete.' + description: 'Header to delete.' def resolve(header_id:) header = authorized_find!(id: header_id) + params = { + header: header, + destination: header.external_audit_event_destination + } - unless Feature.enabled?(:streaming_audit_event_headers, header.external_audit_event_destination.group) - raise Gitlab::Graphql::Errors::ResourceNotAvailable, 'feature disabled' - end + response = ::AuditEvents::Streaming::Headers::DestroyService.new( + group: params[:destination]&.group, + params: params + ).execute - if header.destroy + if response.success? { header: nil, errors: [] } else - { header: header, errors: Array(header.errors) } + { header: header, errors: response.errors } end end diff --git a/ee/app/graphql/mutations/audit_events/streaming/headers/update.rb b/ee/app/graphql/mutations/audit_events/streaming/headers/update.rb index db47650a5f63e2..0560818b00fd3f 100644 --- a/ee/app/graphql/mutations/audit_events/streaming/headers/update.rb +++ b/ee/app/graphql/mutations/audit_events/streaming/headers/update.rb @@ -10,7 +10,7 @@ class Update < BaseMutation argument :header_id, ::Types::GlobalIDType[::AuditEvents::Streaming::Header], required: true, - description: 'Header to update.' + description: 'Header to update.' argument :key, GraphQL::Types::String, required: true, @@ -26,15 +26,22 @@ class Update < BaseMutation def resolve(header_id:, key:, value:) header = authorized_find!(id: header_id) - - unless Feature.enabled?(:streaming_audit_event_headers, header.external_audit_event_destination.group) - raise Gitlab::Graphql::Errors::ResourceNotAvailable, 'feature disabled' - end - - if header.update(key: key, value: value) - { header: header, errors: [] } + params = { + header: header, + destination: header.external_audit_event_destination, + key: key, + value: value + } + + response = ::AuditEvents::Streaming::Headers::UpdateService.new( + group: params[:destination]&.group, + params: params + ).execute + + if response.success? + { header: response.payload[:header], errors: [] } else - { header: header.reset, errors: Array(header.errors) } + { header: header.reset, errors: response.errors } end end diff --git a/ee/app/services/audit_events/streaming/headers/base.rb b/ee/app/services/audit_events/streaming/headers/base.rb new file mode 100644 index 00000000000000..dc2aaf9df6d3a1 --- /dev/null +++ b/ee/app/services/audit_events/streaming/headers/base.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true +module AuditEvents + module Streaming + module Headers + class Base < ::BaseGroupService + attr_reader :destination + + def execute + @destination = params[:destination] + return destination_error if @destination.blank? + + unless feature_enabled? + raise Gitlab::Graphql::Errors::ResourceNotAvailable, 'feature disabled' + end + end + + private + + def destination_error + ServiceResponse.error(message: "missing destination param") + end + + def feature_enabled? + Feature.enabled?(:streaming_audit_event_headers, group) + end + + # authorization not handled by this service + def allowed? + true + end + end + end + end +end diff --git a/ee/app/services/audit_events/streaming/headers/create_service.rb b/ee/app/services/audit_events/streaming/headers/create_service.rb new file mode 100644 index 00000000000000..884e35c374f9f7 --- /dev/null +++ b/ee/app/services/audit_events/streaming/headers/create_service.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true +module AuditEvents + module Streaming + module Headers + class CreateService < Base + def execute + super + + key = params[:key] + value = params[:value] + header = destination.headers.new(key: key, value: value) + + if header.save + ServiceResponse.success(payload: { header: header, errors: [] }) + else + ServiceResponse.error(message: Array(header.errors)) + end + end + end + end + end +end diff --git a/ee/app/services/audit_events/streaming/headers/destroy_service.rb b/ee/app/services/audit_events/streaming/headers/destroy_service.rb new file mode 100644 index 00000000000000..42e4e7a249701b --- /dev/null +++ b/ee/app/services/audit_events/streaming/headers/destroy_service.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true +module AuditEvents + module Streaming + module Headers + class DestroyService < Base + def execute + super + + header = params[:header] + return header_error if header.blank? + + if header.destroy + ServiceResponse.success + else + ServiceResponse.error(message: Array(header.errors)) + end + end + + private + + def header_error + ServiceResponse.error(message: "missing header param") + end + end + end + end +end diff --git a/ee/app/services/audit_events/streaming/headers/update_service.rb b/ee/app/services/audit_events/streaming/headers/update_service.rb new file mode 100644 index 00000000000000..cd10bb3f4cdf5f --- /dev/null +++ b/ee/app/services/audit_events/streaming/headers/update_service.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true +module AuditEvents + module Streaming + module Headers + class UpdateService < Base + def execute + super + + header = params[:header] + return header_error if header.blank? + + if header.update(key: params[:key], value: params[:value]) + ServiceResponse.success(payload: { header: header, errors: [] }) + else + ServiceResponse.error(message: Array(header.errors)) + end + end + + private + + def header_error + ServiceResponse.error(message: "missing header param") + end + end + end + end +end diff --git a/ee/spec/services/audit_events/streaming/headers/base_spec.rb b/ee/spec/services/audit_events/streaming/headers/base_spec.rb new file mode 100644 index 00000000000000..2f707242907e8c --- /dev/null +++ b/ee/spec/services/audit_events/streaming/headers/base_spec.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe AuditEvents::Streaming::Headers::Base do + let(:header) { build_stubbed(:audit_events_streaming_header) } + let(:destination) { header.external_audit_event_destination } + + subject(:service) do + described_class.new( + group: destination&.group, + params: { destination: destination } + ) + end + + describe '#execute' do + subject(:response) { service.execute } + + context 'when destination is missing' do + let(:destination) { nil } + + it 'returns an error' do + expect(response).to be_error + expect(response.errors).to match_array ['missing destination param'] + end + end + + context 'when streaming_audit_event_headers feature flag is disabled' do + before do + stub_feature_flags(streaming_audit_event_headers: false) + end + + it 'raises an exception' do + expect { subject }.to raise_error(Gitlab::Graphql::Errors::ResourceNotAvailable) + end + end + end +end diff --git a/ee/spec/services/audit_events/streaming/headers/create_service_spec.rb b/ee/spec/services/audit_events/streaming/headers/create_service_spec.rb new file mode 100644 index 00000000000000..0a494bea573872 --- /dev/null +++ b/ee/spec/services/audit_events/streaming/headers/create_service_spec.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe AuditEvents::Streaming::Headers::CreateService do + let(:destination) { create(:external_audit_event_destination) } + let(:params) { { destination: destination } } + + subject(:service) do + described_class.new( + group: destination&.group, + params: params + ) + end + + describe '#execute' do + subject(:response) { service.execute } + + context 'when there are validation issues' do + let(:expected_errors) { ["Key can't be blank", "Value can't be blank"] } + + it 'has an array of errors in the response' do + expect(response).to be_error + expect(response.errors).to match_array expected_errors + end + end + + context 'when the header is created successfully' do + let(:params) { super().merge( key: 'a_key', value: 'a_value') } + + it 'has the header in the response payload' do + expect(response).to be_success + expect(response.payload[:header].key).to eq 'a_key' + expect(response.payload[:header].value).to eq 'a_value' + end + end + end +end diff --git a/ee/spec/services/audit_events/streaming/headers/destroy_service_spec.rb b/ee/spec/services/audit_events/streaming/headers/destroy_service_spec.rb new file mode 100644 index 00000000000000..40e731b53d311a --- /dev/null +++ b/ee/spec/services/audit_events/streaming/headers/destroy_service_spec.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe AuditEvents::Streaming::Headers::DestroyService do + let(:header) { create(:audit_events_streaming_header) } + let(:destination) { header.external_audit_event_destination } + let(:params) { { destination: destination, header: header } } + + subject(:service) do + described_class.new( + group: destination&.group, + params: params + ) + end + + describe '#execute' do + context 'when no header is provided' do + let(:params) { super().merge( header: nil) } + + it 'does not destroy the header' do + expect { service.execute }.not_to change { destination.headers.count } + end + + it 'has an error response' do + response = service.execute + + expect(response).to be_error + expect(response.errors).to match_array ['missing header param'] + end + end + + context 'when the header is destroyed successfully' do + let(:response) { service.execute } + + it 'destroys the header' do + expect { response }.to change { destination.headers.count }.by(-1) + expect(response).to be_success + end + end + end +end diff --git a/ee/spec/services/audit_events/streaming/headers/update_service_spec.rb b/ee/spec/services/audit_events/streaming/headers/update_service_spec.rb new file mode 100644 index 00000000000000..4187dc9936121f --- /dev/null +++ b/ee/spec/services/audit_events/streaming/headers/update_service_spec.rb @@ -0,0 +1,49 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe AuditEvents::Streaming::Headers::UpdateService do + let(:header) { create(:audit_events_streaming_header, key: 'old', value: 'old') } + let(:destination) { header.external_audit_event_destination } + let(:params) do + { + destination: destination, + header: header, + key: 'new', + value: 'new' + } + end + + subject(:service) do + described_class.new( + group: destination&.group, + params: params + ) + end + + describe '#execute' do + subject(:response) { service.execute } + + context 'when no header is provided' do + let(:params) { super().merge( header: nil) } + + it 'does not update the header' do + expect(header.reload.key).to eq 'old' + expect(header.value).to eq 'old' + end + + it 'has an error response' do + expect(response).to be_error + expect(response.errors).to match_array ['missing header param'] + end + end + + context 'when the header is updated successfully' do + it 'updates the header' do + expect(response).to be_success + expect(header.reload.key).to eq 'new' + expect(header.value).to eq 'new' + end + end + end +end -- GitLab From 73185a732c051a47326e4439d95d460e8e4bda9b Mon Sep 17 00:00:00 2001 From: Michael Becker Date: Thu, 7 Jul 2022 08:50:33 -0400 Subject: [PATCH 2/4] Hardcode spec initial key for streaming audit header specs In commit 0a42d66d6494bc6f932ab952323ade9965b8614c I refactored the create/update/destroy logic for streaming audit headers into service classes Ideally, in a refactor one should not touch existing specs at all. However, this spec file started failing due to the **initial** key being incorrect in spec expectaions: ```sh Failures: 1) Update an external audit event destination header when feature is licensed when current user is a group owner updates the header with the correct attributes Failure/Error: expect { subject }.to change { header.reload.key }.from('key-1').to('new-key') .and change { header.reload.value }.from('bar') .to('new-value') expected `header.reload.key` to have initially been "key-1", but was "key-3" # ./ee/spec/requests/api/graphql/audit_events/streaming/headers/update_spec.rb:56:in `block (4 levels) in
' ... ``` I think it is because I added additional usages of the header factory in some new specs, and therefore these fail because the [factory][0] uses an incrementing `sequence` Though, this explanation isn't entirely satisfying due to the fact that the spec fails **without me running my newly added specs**: ```sh bundle exec rspec ./ee/spec/requests/api/graphql/audit_events/streaming/headers/* ``` [0]:https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/spec/factories/audit_events/streaming/headers.rb#L5-7 --- .../graphql/audit_events/streaming/headers/update_spec.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ee/spec/requests/api/graphql/audit_events/streaming/headers/update_spec.rb b/ee/spec/requests/api/graphql/audit_events/streaming/headers/update_spec.rb index 8808c179fc56d7..b49fb16fa30c8b 100644 --- a/ee/spec/requests/api/graphql/audit_events/streaming/headers/update_spec.rb +++ b/ee/spec/requests/api/graphql/audit_events/streaming/headers/update_spec.rb @@ -6,7 +6,10 @@ include GraphqlHelpers let_it_be(:destination) { create(:external_audit_event_destination) } - let_it_be(:header) { create(:audit_events_streaming_header, external_audit_event_destination: destination) } + let_it_be(:header) do + create(:audit_events_streaming_header, key: 'key-1', external_audit_event_destination: destination) + end + let_it_be(:owner) { create(:user) } let(:current_user) { owner } -- GitLab From 65b904858eb35ad6265137add861e546b463273b Mon Sep 17 00:00:00 2001 From: Max Woolf Date: Tue, 12 Jul 2022 07:50:21 +0000 Subject: [PATCH 3/4] MR suggestions --- ee/app/services/audit_events/streaming/headers/base.rb | 4 ---- .../audit_events/streaming/headers/create_service.rb | 4 +--- .../audit_events/streaming/headers/update_service_spec.rb | 5 +++-- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/ee/app/services/audit_events/streaming/headers/base.rb b/ee/app/services/audit_events/streaming/headers/base.rb index dc2aaf9df6d3a1..241ebb5212cb9a 100644 --- a/ee/app/services/audit_events/streaming/headers/base.rb +++ b/ee/app/services/audit_events/streaming/headers/base.rb @@ -24,10 +24,6 @@ def feature_enabled? Feature.enabled?(:streaming_audit_event_headers, group) end - # authorization not handled by this service - def allowed? - true - end end end end diff --git a/ee/app/services/audit_events/streaming/headers/create_service.rb b/ee/app/services/audit_events/streaming/headers/create_service.rb index 884e35c374f9f7..e971bacca4ac70 100644 --- a/ee/app/services/audit_events/streaming/headers/create_service.rb +++ b/ee/app/services/audit_events/streaming/headers/create_service.rb @@ -6,9 +6,7 @@ class CreateService < Base def execute super - key = params[:key] - value = params[:value] - header = destination.headers.new(key: key, value: value) + header = destination.headers.new(key: params[:key], value: **value**) if header.save ServiceResponse.success(payload: { header: header, errors: [] }) diff --git a/ee/spec/services/audit_events/streaming/headers/update_service_spec.rb b/ee/spec/services/audit_events/streaming/headers/update_service_spec.rb index 4187dc9936121f..638b488229759a 100644 --- a/ee/spec/services/audit_events/streaming/headers/update_service_spec.rb +++ b/ee/spec/services/audit_events/streaming/headers/update_service_spec.rb @@ -3,7 +3,8 @@ require 'spec_helper' RSpec.describe AuditEvents::Streaming::Headers::UpdateService do - let(:header) { create(:audit_events_streaming_header, key: 'old', value: 'old') } + let_it_be(:header) { create(:audit_events_streaming_header, key: 'old', value: 'old') } + let(:destination) { header.external_audit_event_destination } let(:params) do { @@ -28,7 +29,7 @@ let(:params) { super().merge( header: nil) } it 'does not update the header' do - expect(header.reload.key).to eq 'old' + expect { subject }.not_to change { header.reload.key } expect(header.value).to eq 'old' end -- GitLab From 83914589784f3c909a51e831cb5d12a2695065de Mon Sep 17 00:00:00 2001 From: Michael Becker Date: Tue, 12 Jul 2022 04:26:16 -0400 Subject: [PATCH 4/4] Derive group from the destination --- .../audit_events/streaming/headers/create.rb | 10 ++-------- .../audit_events/streaming/headers/destroy.rb | 8 ++------ .../audit_events/streaming/headers/update.rb | 10 ++-------- .../audit_events/streaming/headers/base.rb | 14 +++++++++++--- .../streaming/headers/create_service.rb | 2 +- .../audit_events/streaming/headers/base_spec.rb | 7 +------ .../streaming/headers/create_service_spec.rb | 4 ++-- .../streaming/headers/destroy_service_spec.rb | 7 +------ .../streaming/headers/update_service_spec.rb | 8 +------- 9 files changed, 23 insertions(+), 47 deletions(-) diff --git a/ee/app/graphql/mutations/audit_events/streaming/headers/create.rb b/ee/app/graphql/mutations/audit_events/streaming/headers/create.rb index 47aed587b04f40..82a570d3fa661e 100644 --- a/ee/app/graphql/mutations/audit_events/streaming/headers/create.rb +++ b/ee/app/graphql/mutations/audit_events/streaming/headers/create.rb @@ -25,15 +25,9 @@ class Create < BaseMutation description: 'Created header.' def resolve(destination_id:, key:, value:) - params = { - destination: authorized_find!(destination_id), - key: key, - value: value - } - response = ::AuditEvents::Streaming::Headers::CreateService.new( - group: params[:destination]&.group, - params: params + destination: authorized_find!(destination_id), + params: { key: key, value: value } ).execute if response.success? diff --git a/ee/app/graphql/mutations/audit_events/streaming/headers/destroy.rb b/ee/app/graphql/mutations/audit_events/streaming/headers/destroy.rb index b1c3b3335b80e0..682f7205b46bca 100644 --- a/ee/app/graphql/mutations/audit_events/streaming/headers/destroy.rb +++ b/ee/app/graphql/mutations/audit_events/streaming/headers/destroy.rb @@ -14,14 +14,10 @@ class Destroy < BaseMutation def resolve(header_id:) header = authorized_find!(id: header_id) - params = { - header: header, - destination: header.external_audit_event_destination - } response = ::AuditEvents::Streaming::Headers::DestroyService.new( - group: params[:destination]&.group, - params: params + destination: header.external_audit_event_destination, + params: { header: header } ).execute if response.success? diff --git a/ee/app/graphql/mutations/audit_events/streaming/headers/update.rb b/ee/app/graphql/mutations/audit_events/streaming/headers/update.rb index 0560818b00fd3f..110f6b6dba93df 100644 --- a/ee/app/graphql/mutations/audit_events/streaming/headers/update.rb +++ b/ee/app/graphql/mutations/audit_events/streaming/headers/update.rb @@ -26,16 +26,10 @@ class Update < BaseMutation def resolve(header_id:, key:, value:) header = authorized_find!(id: header_id) - params = { - header: header, - destination: header.external_audit_event_destination, - key: key, - value: value - } response = ::AuditEvents::Streaming::Headers::UpdateService.new( - group: params[:destination]&.group, - params: params + destination: header.external_audit_event_destination, + params: { header: header, key: key, value: value } ).execute if response.success? diff --git a/ee/app/services/audit_events/streaming/headers/base.rb b/ee/app/services/audit_events/streaming/headers/base.rb index 241ebb5212cb9a..234b5a712d52d3 100644 --- a/ee/app/services/audit_events/streaming/headers/base.rb +++ b/ee/app/services/audit_events/streaming/headers/base.rb @@ -5,9 +5,18 @@ module Headers class Base < ::BaseGroupService attr_reader :destination + def initialize(destination:, current_user: nil, params: {}) + @destination = destination + + super( + group: @destination&.group, + current_user: current_user, + params: params + ) + end + def execute - @destination = params[:destination] - return destination_error if @destination.blank? + return destination_error if destination.blank? unless feature_enabled? raise Gitlab::Graphql::Errors::ResourceNotAvailable, 'feature disabled' @@ -23,7 +32,6 @@ def destination_error def feature_enabled? Feature.enabled?(:streaming_audit_event_headers, group) end - end end end diff --git a/ee/app/services/audit_events/streaming/headers/create_service.rb b/ee/app/services/audit_events/streaming/headers/create_service.rb index e971bacca4ac70..6c8acb098c9a12 100644 --- a/ee/app/services/audit_events/streaming/headers/create_service.rb +++ b/ee/app/services/audit_events/streaming/headers/create_service.rb @@ -6,7 +6,7 @@ class CreateService < Base def execute super - header = destination.headers.new(key: params[:key], value: **value**) + header = destination.headers.new(key: params[:key], value: params[:value]) if header.save ServiceResponse.success(payload: { header: header, errors: [] }) diff --git a/ee/spec/services/audit_events/streaming/headers/base_spec.rb b/ee/spec/services/audit_events/streaming/headers/base_spec.rb index 2f707242907e8c..d6fcb7bdd45d97 100644 --- a/ee/spec/services/audit_events/streaming/headers/base_spec.rb +++ b/ee/spec/services/audit_events/streaming/headers/base_spec.rb @@ -6,12 +6,7 @@ let(:header) { build_stubbed(:audit_events_streaming_header) } let(:destination) { header.external_audit_event_destination } - subject(:service) do - described_class.new( - group: destination&.group, - params: { destination: destination } - ) - end + subject(:service) { described_class.new( destination: destination) } describe '#execute' do subject(:response) { service.execute } diff --git a/ee/spec/services/audit_events/streaming/headers/create_service_spec.rb b/ee/spec/services/audit_events/streaming/headers/create_service_spec.rb index 0a494bea573872..78663f2f97da3c 100644 --- a/ee/spec/services/audit_events/streaming/headers/create_service_spec.rb +++ b/ee/spec/services/audit_events/streaming/headers/create_service_spec.rb @@ -4,11 +4,11 @@ RSpec.describe AuditEvents::Streaming::Headers::CreateService do let(:destination) { create(:external_audit_event_destination) } - let(:params) { { destination: destination } } + let(:params) { {} } subject(:service) do described_class.new( - group: destination&.group, + destination: destination, params: params ) end diff --git a/ee/spec/services/audit_events/streaming/headers/destroy_service_spec.rb b/ee/spec/services/audit_events/streaming/headers/destroy_service_spec.rb index 40e731b53d311a..d3d0661bf7950b 100644 --- a/ee/spec/services/audit_events/streaming/headers/destroy_service_spec.rb +++ b/ee/spec/services/audit_events/streaming/headers/destroy_service_spec.rb @@ -7,12 +7,7 @@ let(:destination) { header.external_audit_event_destination } let(:params) { { destination: destination, header: header } } - subject(:service) do - described_class.new( - group: destination&.group, - params: params - ) - end + subject(:service) { described_class.new(destination: destination, params: params ) } describe '#execute' do context 'when no header is provided' do diff --git a/ee/spec/services/audit_events/streaming/headers/update_service_spec.rb b/ee/spec/services/audit_events/streaming/headers/update_service_spec.rb index 638b488229759a..d28a4f682e1fad 100644 --- a/ee/spec/services/audit_events/streaming/headers/update_service_spec.rb +++ b/ee/spec/services/audit_events/streaming/headers/update_service_spec.rb @@ -8,19 +8,13 @@ let(:destination) { header.external_audit_event_destination } let(:params) do { - destination: destination, header: header, key: 'new', value: 'new' } end - subject(:service) do - described_class.new( - group: destination&.group, - params: params - ) - end + subject(:service) { described_class.new(destination: destination, params: params) } describe '#execute' do subject(:response) { service.execute } -- GitLab