blob: 848e333d88b3cb053b6acde40671f30bd8926134 (
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
# Shared context for all integrations
#
# The following let binding should be defined:
# - `integration`: Integration name. See `Integration.available_integration_names`.
RSpec.shared_context 'with integration' do
include JiraIntegrationHelpers
let(:dashed_integration) { integration.dasherize }
let(:integration_method) { Project.integration_association_name(integration) }
let(:integration_klass) { Integration.integration_name_to_model(integration) }
let(:integration_instance) { integration_klass.new }
# Build a list of all attributes that an integration supports.
let(:integration_attrs_list) do
integration_fields + integration_events + custom_attributes.fetch(integration.to_sym, [])
end
# Attributes defined as fields.
let(:integration_fields) do
integration_instance.fields.map { |field| field[:name].to_sym }
end
# Attributes for configurable event triggers.
let(:integration_events) do
integration_instance.configurable_events
.map { |event| IntegrationsHelper.integration_event_field_name(event).to_sym }
end
# Other special cases, this list might be incomplete.
#
# Some of these won't be needed anymore after we've converted them to use the field DSL
# in https://gitlab.com/gitlab-org/gitlab/-/issues/354899.
#
# Others like `comment_on_event_disabled` are actual columns on `integrations`, maybe we should migrate
# these to fields as well.
let(:custom_attributes) do
{
jira: %i[
comment_on_event_enabled jira_issue_transition_automatic jira_issue_transition_id project_key
issues_enabled vulnerabilities_enabled vulnerabilities_issuetype
]
}
end
let(:integration_attrs) do
integration_attrs_list.inject({}) do |hash, k|
if k =~ /^(token*|.*_token|.*_key)/ && !integration.in?(%w[apple_app_store google_play])
hash.merge!(k => 'secrettoken')
elsif integration == 'confluence' && k == :confluence_url
hash.merge!(k => 'https://example.atlassian.net/wiki')
elsif integration == 'datadog' && k == :datadog_site
hash.merge!(k => 'datadoghq.com')
elsif integration == 'datadog' && k == :datadog_tags
hash.merge!(k => 'key:value')
elsif integration == 'packagist' && k == :server
hash.merge!(k => 'https://packagist.example.com')
elsif /^(.*_url|url|webhook)/.match?(k)
hash.merge!(k => "http://example.com")
elsif integration_klass.method_defined?("#{k}?")
hash.merge!(k => true)
elsif integration == 'irker' && k == :recipients
hash.merge!(k => 'irc://irc.network.net:666/#channel')
elsif integration == 'irker' && k == :server_port
hash.merge!(k => 1234)
elsif integration == 'jira' && k == :jira_issue_transition_id
hash.merge!(k => '1,2,3')
elsif integration == 'jira' && k == :jira_issue_transition_automatic # rubocop:disable Lint/DuplicateBranch
hash.merge!(k => true)
elsif integration == 'jira' && k == :jira_auth_type # rubocop:disable Lint/DuplicateBranch
hash.merge!(k => 0)
elsif integration == 'emails_on_push' && k == :recipients
hash.merge!(k => 'foo@bar.com')
elsif (integration == 'slack' || integration == 'mattermost') && k == :labels_to_be_notified_behavior
hash.merge!(k => "match_any")
elsif integration == 'campfire' && k == :room
hash.merge!(k => '1234')
elsif integration == 'apple_app_store' && k == :app_store_issuer_id
hash.merge!(k => 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee')
elsif integration == 'apple_app_store' && k == :app_store_private_key
hash.merge!(k => File.read('spec/fixtures/ssl_key.pem'))
elsif integration == 'apple_app_store' && k == :app_store_key_id
hash.merge!(k => 'ABC1')
elsif integration == 'apple_app_store' && k == :app_store_private_key_file_name
hash.merge!(k => 'ssl_key.pem')
elsif integration == 'apple_app_store' && k == :app_store_protected_refs # rubocop:disable Lint/DuplicateBranch
hash.merge!(k => true)
elsif integration == 'google_play' && k == :package_name
hash.merge!(k => 'com.gitlab.foo.bar')
elsif integration == 'google_play' && k == :service_account_key
hash.merge!(k => File.read('spec/fixtures/service_account.json'))
elsif integration == 'google_play' && k == :service_account_key_file_name
hash.merge!(k => 'service_account.json')
elsif integration == 'google_play' && k == :google_play_protected_refs # rubocop:disable Lint/DuplicateBranch
hash.merge!(k => true)
else
hash.merge!(k => "someword")
end
end
end
let(:licensed_features) do
{
'github' => :github_integration
}
end
before do
enable_license_for_integration(integration)
stub_jira_integration_test if integration == 'jira'
end
def initialize_integration(integration, attrs = {})
record = project.find_or_initialize_integration(integration)
record.reset_updated_properties if integration == 'datadog'
record.attributes = attrs
record.properties = integration_attrs
record.save!
record
end
private
def enable_license_for_integration(integration)
return unless respond_to?(:stub_licensed_features)
licensed_feature = licensed_features[integration]
return unless licensed_feature
stub_licensed_features(licensed_feature => true)
project.clear_memoization(:disabled_integrations)
end
end
RSpec.shared_context 'with integration activation' do
def click_active_checkbox
find('label', text: 'Active').click
end
end
|