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

integrations_shared_context.rb « integrations « features « shared_contexts « support « spec - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 21d9dccbb8d6a67c1afb2fc288179b35f86693d9 (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
# 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 k =~ /^(.*_url|url|webhook)/
        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')
      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