diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-06-16 21:25:58 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-06-16 21:25:58 +0300 |
commit | a5f4bba440d7f9ea47046a0a561d49adf0a1e6d4 (patch) | |
tree | fb69158581673816a8cd895f9d352dcb3c678b1e /spec/lib/gitlab/email | |
parent | d16b2e8639e99961de6ddc93909f3bb5c1445ba1 (diff) |
Add latest changes from gitlab-org/gitlab@14-0-stable-eev14.0.0-rc42
Diffstat (limited to 'spec/lib/gitlab/email')
9 files changed, 115 insertions, 16 deletions
diff --git a/spec/lib/gitlab/email/handler/create_issue_handler_spec.rb b/spec/lib/gitlab/email/handler/create_issue_handler_spec.rb index 1a7d837af73..dd230140b30 100644 --- a/spec/lib/gitlab/email/handler/create_issue_handler_spec.rb +++ b/spec/lib/gitlab/email/handler/create_issue_handler_spec.rb @@ -128,6 +128,14 @@ RSpec.describe Gitlab::Email::Handler::CreateIssueHandler do expect { receiver.execute }.to raise_error(Gitlab::Email::ProjectNotFound) end end + + context 'when project ID is invalid' do + it 'raises a ProjectNotFound' do + handler = described_class.new(email_raw, "gitlabhq-gitlabhq-#{Gitlab::Database::MAX_INT_VALUE}-#{user.incoming_email_token}-issue") + + expect { handler.execute }.to raise_error(Gitlab::Email::ProjectNotFound) + end + end end def email_fixture(path) diff --git a/spec/lib/gitlab/email/handler/service_desk_handler_spec.rb b/spec/lib/gitlab/email/handler/service_desk_handler_spec.rb index 6d26b3e1064..3a60564d8d2 100644 --- a/spec/lib/gitlab/email/handler/service_desk_handler_spec.rb +++ b/spec/lib/gitlab/email/handler/service_desk_handler_spec.rb @@ -168,7 +168,7 @@ RSpec.describe Gitlab::Email::Handler::ServiceDeskHandler do end context 'when using service desk key' do - let_it_be(:service_desk_settings) { create(:service_desk_setting, project: project, project_key: 'mykey') } + let_it_be(:service_desk_key) { 'mykey' } let(:email_raw) { service_desk_fixture('emails/service_desk_custom_address.eml') } let(:receiver) { Gitlab::Email::ServiceDeskReceiver.new(email_raw) } @@ -176,6 +176,10 @@ RSpec.describe Gitlab::Email::Handler::ServiceDeskHandler do stub_service_desk_email_setting(enabled: true, address: 'support+%{key}@example.com') end + before_all do + create(:service_desk_setting, project: project, project_key: service_desk_key) + end + it_behaves_like 'a new issue request' context 'when there is no project with the key' do @@ -193,6 +197,20 @@ RSpec.describe Gitlab::Email::Handler::ServiceDeskHandler do expect { receiver.execute }.to raise_error(Gitlab::Email::ProjectNotFound) end end + + context 'when there are multiple projects with same key' do + let_it_be(:project_with_same_key) { create(:project, group: group, service_desk_enabled: true) } + let(:email_raw) { service_desk_fixture('emails/service_desk_custom_address.eml', slug: project_with_same_key.full_path_slug.to_s) } + + before do + create(:service_desk_setting, project: project_with_same_key, project_key: service_desk_key) + end + + it 'process email for project with matching slug' do + expect { receiver.execute }.to change { Issue.count }.by(1) + expect(Issue.last.project).to eq(project_with_same_key) + end + end end end diff --git a/spec/lib/gitlab/email/message/in_product_marketing/base_spec.rb b/spec/lib/gitlab/email/message/in_product_marketing/base_spec.rb index 42d84b3e4de..277f1158f8b 100644 --- a/spec/lib/gitlab/email/message/in_product_marketing/base_spec.rb +++ b/spec/lib/gitlab/email/message/in_product_marketing/base_spec.rb @@ -4,12 +4,13 @@ require 'spec_helper' RSpec.describe Gitlab::Email::Message::InProductMarketing::Base do let_it_be(:group) { build(:group) } + let_it_be(:user) { build(:user) } let(:series) { 0 } let(:test_class) { Gitlab::Email::Message::InProductMarketing::Create } describe 'initialize' do - subject { test_class.new(group: group, series: series) } + subject { test_class.new(group: group, user: user, series: series) } context 'when series does not exist' do let(:series) { 3 } @@ -29,13 +30,13 @@ RSpec.describe Gitlab::Email::Message::InProductMarketing::Base do end describe '#logo_path' do - subject { test_class.new(group: group, series: series).logo_path } + subject { test_class.new(group: group, user: user, series: series).logo_path } it { is_expected.to eq('mailers/in_product_marketing/create-0.png') } end describe '#unsubscribe' do - subject { test_class.new(group: group, series: series).unsubscribe } + subject { test_class.new(group: group, user: user, series: series).unsubscribe } before do allow(Gitlab).to receive(:com?).and_return(is_gitlab_com) @@ -55,7 +56,7 @@ RSpec.describe Gitlab::Email::Message::InProductMarketing::Base do end describe '#cta_link' do - subject(:cta_link) { test_class.new(group: group, series: series).cta_link } + subject(:cta_link) { test_class.new(group: group, user: user, series: series).cta_link } it 'renders link' do expect(CGI.unescapeHTML(cta_link)).to include(Gitlab::Routing.url_helpers.group_email_campaigns_url(group, track: :create, series: series)) @@ -63,7 +64,7 @@ RSpec.describe Gitlab::Email::Message::InProductMarketing::Base do end describe '#progress' do - subject { test_class.new(group: group, series: series).progress } + subject { test_class.new(group: group, user: user, series: series).progress } before do allow(Gitlab).to receive(:com?).and_return(is_gitlab_com) diff --git a/spec/lib/gitlab/email/message/in_product_marketing/create_spec.rb b/spec/lib/gitlab/email/message/in_product_marketing/create_spec.rb index be8a33b18bd..35470ef3555 100644 --- a/spec/lib/gitlab/email/message/in_product_marketing/create_spec.rb +++ b/spec/lib/gitlab/email/message/in_product_marketing/create_spec.rb @@ -6,8 +6,9 @@ RSpec.describe Gitlab::Email::Message::InProductMarketing::Create do using RSpec::Parameterized::TableSyntax let_it_be(:group) { build(:group) } + let_it_be(:user) { build(:user) } - subject(:message) { described_class.new(group: group, series: series)} + subject(:message) { described_class.new(group: group, user: user, series: series)} describe "public methods" do where(series: [0, 1, 2]) diff --git a/spec/lib/gitlab/email/message/in_product_marketing/experience_spec.rb b/spec/lib/gitlab/email/message/in_product_marketing/experience_spec.rb new file mode 100644 index 00000000000..b742eff3f56 --- /dev/null +++ b/spec/lib/gitlab/email/message/in_product_marketing/experience_spec.rb @@ -0,0 +1,64 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Gitlab::Email::Message::InProductMarketing::Experience do + let_it_be(:group) { build(:group) } + let_it_be(:user) { build(:user) } + + subject(:message) { described_class.new(group: group, user: user, series: series)} + + describe 'public methods' do + context 'with series 0' do + let(:series) { 0 } + + it 'returns value for series', :aggregate_failures do + expect(message.subject_line).to be_present + expect(message.tagline).to be_nil + expect(message.title).to be_present + expect(message.subtitle).to be_present + expect(message.body_line1).to be_present + expect(message.body_line2).to be_present + expect(message.cta_text).to be_nil + end + + describe '#feedback_link' do + let(:member_count) { 2 } + let(:user_access) { GroupMember::DEVELOPER } + let(:preferred_language) { 'en' } + + before do + allow(message).to receive(:onboarding_progress).and_return(1) + allow(group).to receive(:member_count).and_return(member_count) + allow(group).to receive(:max_member_access_for_user).and_return(user_access) + allow(user).to receive(:preferred_language).and_return(preferred_language) + end + + subject do + uri = URI.parse(message.feedback_link(1)) + Rack::Utils.parse_query(uri.query).with_indifferent_access[:show_invite_link] + end + + it { is_expected.to eq('true') } + + context 'with only one member' do + let(:member_count) { 1 } + + it { is_expected.to eq('false') } + end + + context 'with less than developer access' do + let(:user_access) { GroupMember::GUEST } + + it { is_expected.to eq('false') } + end + + context 'with preferred language other than English' do + let(:preferred_language) { 'nl' } + + it { is_expected.to eq('false') } + end + end + end + end +end diff --git a/spec/lib/gitlab/email/message/in_product_marketing/team_spec.rb b/spec/lib/gitlab/email/message/in_product_marketing/team_spec.rb index 6251128f560..f72994fcce1 100644 --- a/spec/lib/gitlab/email/message/in_product_marketing/team_spec.rb +++ b/spec/lib/gitlab/email/message/in_product_marketing/team_spec.rb @@ -6,8 +6,9 @@ RSpec.describe Gitlab::Email::Message::InProductMarketing::Team do using RSpec::Parameterized::TableSyntax let_it_be(:group) { build(:group) } + let_it_be(:user) { build(:user) } - subject(:message) { described_class.new(group: group, series: series)} + subject(:message) { described_class.new(group: group, user: user, series: series)} describe "public methods" do where(series: [0, 1]) diff --git a/spec/lib/gitlab/email/message/in_product_marketing/trial_spec.rb b/spec/lib/gitlab/email/message/in_product_marketing/trial_spec.rb index 2c435490765..5f7639a9ed6 100644 --- a/spec/lib/gitlab/email/message/in_product_marketing/trial_spec.rb +++ b/spec/lib/gitlab/email/message/in_product_marketing/trial_spec.rb @@ -6,8 +6,9 @@ RSpec.describe Gitlab::Email::Message::InProductMarketing::Trial do using RSpec::Parameterized::TableSyntax let_it_be(:group) { build(:group) } + let_it_be(:user) { build(:user) } - subject(:message) { described_class.new(group: group, series: series)} + subject(:message) { described_class.new(group: group, user: user, series: series)} describe "public methods" do where(series: [0, 1, 2]) diff --git a/spec/lib/gitlab/email/message/in_product_marketing/verify_spec.rb b/spec/lib/gitlab/email/message/in_product_marketing/verify_spec.rb index 73252c0dbdf..a7da2e9553d 100644 --- a/spec/lib/gitlab/email/message/in_product_marketing/verify_spec.rb +++ b/spec/lib/gitlab/email/message/in_product_marketing/verify_spec.rb @@ -4,8 +4,9 @@ require 'spec_helper' RSpec.describe Gitlab::Email::Message::InProductMarketing::Verify do let_it_be(:group) { build(:group) } + let_it_be(:user) { build(:user) } - subject(:message) { described_class.new(group: group, series: series)} + subject(:message) { described_class.new(group: group, user: user, series: series)} describe "public methods" do context 'with series 0' do diff --git a/spec/lib/gitlab/email/receiver_spec.rb b/spec/lib/gitlab/email/receiver_spec.rb index 9b05c12ef57..2c1fe529a5d 100644 --- a/spec/lib/gitlab/email/receiver_spec.rb +++ b/spec/lib/gitlab/email/receiver_spec.rb @@ -5,9 +5,13 @@ require 'spec_helper' RSpec.describe Gitlab::Email::Receiver do include_context :email_shared_context - shared_examples 'correctly finds the mail key' do - specify do + shared_examples 'correctly finds the mail key and adds metric event' do + let(:metric_transaction) { double('Gitlab::Metrics::WebTransaction') } + + specify :aggregate_failures do expect(Gitlab::Email::Handler).to receive(:for).with(an_instance_of(Mail::Message), 'gitlabhq/gitlabhq+auth_token').and_return(handler) + expect(::Gitlab::Metrics::BackgroundTransaction).to receive(:current).and_return(metric_transaction) + expect(metric_transaction).to receive(:add_event).with(handler.metrics_event, handler.metrics_params) receiver.execute end @@ -30,7 +34,7 @@ RSpec.describe Gitlab::Email::Receiver do context 'when in a Delivered-To header' do let(:email_raw) { fixture_file('emails/forwarded_new_issue.eml') } - it_behaves_like 'correctly finds the mail key' + it_behaves_like 'correctly finds the mail key and adds metric event' it 'parses the metadata' do expect(metadata[:delivered_to]). to eq(["incoming+gitlabhq/gitlabhq+auth_token@appmail.example.com", "support@example.com"]) @@ -40,7 +44,7 @@ RSpec.describe Gitlab::Email::Receiver do context 'when in an Envelope-To header' do let(:email_raw) { fixture_file('emails/envelope_to_header.eml') } - it_behaves_like 'correctly finds the mail key' + it_behaves_like 'correctly finds the mail key and adds metric event' it 'parses the metadata' do expect(metadata[:envelope_to]). to eq(["incoming+gitlabhq/gitlabhq+auth_token@appmail.example.com"]) @@ -50,7 +54,7 @@ RSpec.describe Gitlab::Email::Receiver do context 'when in an X-Envelope-To header' do let(:email_raw) { fixture_file('emails/x_envelope_to_header.eml') } - it_behaves_like 'correctly finds the mail key' + it_behaves_like 'correctly finds the mail key and adds metric event' it 'parses the metadata' do expect(metadata[:x_envelope_to]). to eq(["incoming+gitlabhq/gitlabhq+auth_token@appmail.example.com"]) @@ -60,7 +64,7 @@ RSpec.describe Gitlab::Email::Receiver do context 'when enclosed with angle brackets in an Envelope-To header' do let(:email_raw) { fixture_file('emails/envelope_to_header_with_angle_brackets.eml') } - it_behaves_like 'correctly finds the mail key' + it_behaves_like 'correctly finds the mail key and adds metric event' end end |