debian-mirror-gitlab/spec/requests/groups/email_campaigns_controller_spec.rb

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

128 lines
3.3 KiB
Ruby
Raw Permalink Normal View History

2021-03-11 19:13:27 +05:30
# frozen_string_literal: true
require 'spec_helper'
2023-03-04 22:38:38 +05:30
RSpec.describe Groups::EmailCampaignsController, feature_category: :navigation do
2021-03-11 19:13:27 +05:30
using RSpec::Parameterized::TableSyntax
describe 'GET #index', :snowplow do
let_it_be(:group) { create(:group) }
let_it_be(:project) { create(:project, group: group) }
let_it_be(:user) { create(:user) }
2021-09-04 01:27:46 +05:30
2021-03-11 19:13:27 +05:30
let(:track) { 'create' }
let(:series) { '0' }
let(:schema) { described_class::EMAIL_CAMPAIGNS_SCHEMA_URL }
2021-09-04 01:27:46 +05:30
let(:subject_line_text) { Gitlab::Email::Message::InProductMarketing.for(track.to_sym).new(group: group, user: user, series: series.to_i).subject_line }
2021-03-11 19:13:27 +05:30
let(:data) do
{
namespace_id: group.id,
track: track.to_sym,
series: series.to_i,
2021-04-29 21:17:54 +05:30
subject_line: subject_line_text
2021-03-11 19:13:27 +05:30
}
end
before do
sign_in(user)
group.add_developer(user)
end
subject do
get group_email_campaigns_url(group, track: track, series: series)
response
end
shared_examples 'track and redirect' do
2021-04-29 21:17:54 +05:30
it 'redirects' do
expect(subject).to have_gitlab_http_status(:redirect)
end
2023-05-27 22:25:52 +05:30
context 'on SaaS', :saas do
2021-04-29 21:17:54 +05:30
it 'emits a snowplow event', :snowplow do
subject
expect_snowplow_event(
category: described_class.name,
action: 'click',
context: [{
schema: described_class::EMAIL_CAMPAIGNS_SCHEMA_URL,
data: { namespace_id: group.id, series: series.to_i, subject_line: subject_line_text, track: track.to_s }
2021-09-04 01:27:46 +05:30
}],
user: user,
namespace: group
2021-04-29 21:17:54 +05:30
)
end
it 'does not save the cta_click' do
expect(Users::InProductMarketingEmail).not_to receive(:save_cta_click)
subject
end
end
context 'when not on.com' do
it 'saves the cta_click' do
expect(Users::InProductMarketingEmail).to receive(:save_cta_click)
subject
end
it 'does not track snowplow events' do
subject
expect_no_snowplow_event
end
2021-03-11 19:13:27 +05:30
end
end
shared_examples 'no track and 404' do
2021-04-29 21:17:54 +05:30
it 'returns 404' do
expect(subject).to have_gitlab_http_status(:not_found)
end
it 'does not emit a snowplow event', :snowplow do
subject
expect_no_snowplow_event
2021-03-11 19:13:27 +05:30
end
end
describe 'track parameter' do
context 'when valid' do
2022-06-21 17:19:12 +05:30
where(track: Namespaces::InProductMarketingEmailsService::TRACKS.keys.without(:experience))
2021-03-11 19:13:27 +05:30
with_them do
it_behaves_like 'track and redirect'
end
end
context 'when invalid' do
where(track: [nil, 'xxxx'])
with_them do
it_behaves_like 'no track and 404'
end
end
end
describe 'series parameter' do
context 'when valid' do
2021-09-04 01:27:46 +05:30
where(series: (0..Namespaces::InProductMarketingEmailsService::TRACKS[:create][:interval_days].length - 1).to_a)
2021-03-11 19:13:27 +05:30
with_them do
it_behaves_like 'track and redirect'
end
end
context 'when invalid' do
2021-09-04 01:27:46 +05:30
where(series: [-1, nil, Namespaces::InProductMarketingEmailsService::TRACKS[:create][:interval_days].length])
2021-03-11 19:13:27 +05:30
with_them do
it_behaves_like 'no track and 404'
end
end
end
end
end