Welcome to mirror list, hosted at ThFree Co, Russian Federation.

email_shared_examples.rb « email « lib « shared_examples « support « spec - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 26655a71fec048e4fd65a004990bf59f2d68cc19 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# frozen_string_literal: true

# Set the particular setting as a key-value pair
# Setting method is different depending on klass and must be defined in the calling spec
def stub_email_setting(key_value_pairs)
  case setting_name
  when :incoming_email
    stub_incoming_email_setting(key_value_pairs)
  when :service_desk_email
    stub_service_desk_email_setting(key_value_pairs)
  end
end

RSpec.shared_examples_for 'enabled? method for email' do
  using RSpec::Parameterized::TableSyntax

  subject { described_class.enabled? }

  where(:value, :address, :result) do
    false | nil | false
    false | 'replies+%{key}@example.com' | false
    true  | nil | false
    true  | 'replies+%{key}@example.com' | true
  end

  with_them do
    before do
      stub_email_setting(enabled: value)
      stub_email_setting(address: address)
    end

    it { is_expected.to eq result }
  end
end

RSpec.shared_examples_for 'supports_wildcard? method for email' do
  subject { described_class.supports_wildcard? }

  before do
    stub_incoming_email_setting(address: value)
  end

  context 'when address contains the wildcard placeholder' do
    let(:value) { 'replies+%{key}@example.com' }

    it 'confirms that wildcard is supported' do
      expect(subject).to be_truthy
    end
  end

  context "when address doesn't contain the wildcard placeholder" do
    let(:value) { 'replies@example.com' }

    it 'returns that wildcard is not supported' do
      expect(subject).to be_falsey
    end
  end

  context 'when address is nil' do
    let(:value) { nil }

    it 'returns that wildcard is not supported' do
      expect(subject).to be_falsey
    end
  end
end

RSpec.shared_examples_for 'unsubscribe_address method for email' do
  before do
    stub_incoming_email_setting(address: 'replies+%{key}@example.com')
  end

  it 'returns the address with interpolated reply key and unsubscribe suffix' do
    expect(described_class.unsubscribe_address('key'))
      .to eq("replies+key#{Gitlab::Email::Common::UNSUBSCRIBE_SUFFIX}@example.com")
  end
end

RSpec.shared_examples_for 'key_from_fallback_message_id method for email' do
  it 'returns reply key' do
    expect(described_class.key_from_fallback_message_id('reply-key@localhost')).to eq('key')
  end
end

RSpec.shared_examples_for 'supports_issue_creation? method for email' do
  using RSpec::Parameterized::TableSyntax

  subject { described_class.supports_issue_creation? }

  where(:enabled_value, :supports_wildcard_value, :result) do
    false | false | false
    false | true  | false
    true  | false | false
    true  | true  | true
  end

  with_them do
    before do
      allow(described_class).to receive(:enabled?).and_return(enabled_value)
      allow(described_class).to receive(:supports_wildcard?).and_return(supports_wildcard_value)
    end

    it { is_expected.to eq result }
  end
end

RSpec.shared_examples_for 'reply_address method for email' do
  before do
    stub_incoming_email_setting(address: "replies+%{key}@example.com")
  end

  it "returns the address with an interpolated reply key" do
    expect(described_class.reply_address("key")).to eq("replies+key@example.com")
  end
end

RSpec.shared_examples_for 'scan_fallback_references method for email' do
  let(:references) do
    '<issue_1@localhost>' \
    ' <reply-59d8df8370b7e95c5a49fbf86aeb2c93@localhost>' \
    ',<exchange@microsoft.com>'
  end

  it 'returns reply key' do
    expect(described_class.scan_fallback_references(references))
      .to eq(%w[issue_1@localhost
                reply-59d8df8370b7e95c5a49fbf86aeb2c93@localhost
                exchange@microsoft.com])
  end
end

RSpec.shared_examples_for 'common email methods' do
  it_behaves_like 'enabled? method for email'
  it_behaves_like 'supports_wildcard? method for email'
  it_behaves_like 'key_from_fallback_message_id method for email'
  it_behaves_like 'supports_issue_creation? method for email'
  it_behaves_like 'reply_address method for email'
  it_behaves_like 'unsubscribe_address method for email'
  it_behaves_like 'scan_fallback_references method for email'
end