42 lines
1.5 KiB
Ruby
42 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
RSpec.describe Members::Mailgun::ProcessWebhookService do
|
|
describe '#execute', :aggregate_failures do
|
|
let_it_be(:member) { create(:project_member, :invited) }
|
|
|
|
let(:raw_invite_token) { member.raw_invite_token }
|
|
let(:payload) { { 'user-variables' => { ::Members::Mailgun::INVITE_EMAIL_TOKEN_KEY => raw_invite_token } } }
|
|
|
|
subject(:service) { described_class.new(payload).execute }
|
|
|
|
it 'marks the member invite email success as false' do
|
|
expect(Gitlab::AppLogger).to receive(:info).with(/^UPDATED MEMBER INVITE_EMAIL_SUCCESS/).and_call_original
|
|
|
|
expect { service }.to change { member.reload.invite_email_success }.from(true).to(false)
|
|
end
|
|
|
|
context 'when member can not be found' do
|
|
let(:raw_invite_token) { '_foobar_' }
|
|
|
|
it 'does not change member status' do
|
|
expect(Gitlab::AppLogger).not_to receive(:info).with(/^UPDATED MEMBER INVITE_EMAIL_SUCCESS/)
|
|
|
|
expect { service }.not_to change { member.reload.invite_email_success }
|
|
end
|
|
end
|
|
|
|
context 'when invite token is not found in payload' do
|
|
let(:payload) { {} }
|
|
|
|
it 'does not change member status and logs an error' do
|
|
expect(Gitlab::AppLogger).not_to receive(:info).with(/^UPDATED MEMBER INVITE_EMAIL_SUCCESS/)
|
|
expect(Gitlab::ErrorTracking).to receive(:track_exception).with(
|
|
an_instance_of(described_class::ProcessWebhookServiceError))
|
|
|
|
expect { service }.not_to change { member.reload.invite_email_success }
|
|
end
|
|
end
|
|
end
|
|
end
|