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

apple_app_store_spec.rb « integrations « models « spec - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: f3346acae0a8591e0349348a89fb199cc8b85fab (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
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe Integrations::AppleAppStore, feature_category: :mobile_devops do
  describe 'Validations' do
    context 'when active' do
      before do
        subject.active = true
      end

      it { is_expected.to validate_presence_of :app_store_issuer_id }
      it { is_expected.to validate_presence_of :app_store_key_id }
      it { is_expected.to validate_presence_of :app_store_private_key }
      it { is_expected.to validate_presence_of :app_store_private_key_file_name }
      it { is_expected.to allow_value(true).for(:app_store_protected_refs) }
      it { is_expected.to allow_value(false).for(:app_store_protected_refs) }
      it { is_expected.not_to allow_value(nil).for(:app_store_protected_refs) }
      it { is_expected.to allow_value('aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee').for(:app_store_issuer_id) }
      it { is_expected.not_to allow_value('abcde').for(:app_store_issuer_id) }
      it { is_expected.to allow_value(File.read('spec/fixtures/ssl_key.pem')).for(:app_store_private_key) }
      it { is_expected.not_to allow_value("foo").for(:app_store_private_key) }
      it { is_expected.to allow_value('ABCD1EF12G').for(:app_store_key_id) }
      it { is_expected.not_to allow_value('ABC').for(:app_store_key_id) }
      it { is_expected.not_to allow_value('abc1').for(:app_store_key_id) }
      it { is_expected.not_to allow_value('-A0-').for(:app_store_key_id) }
    end
  end

  context 'when integration is enabled' do
    let(:apple_app_store_integration) { build(:apple_app_store_integration) }

    describe '#fields' do
      it 'returns custom fields' do
        expect(apple_app_store_integration.fields.pluck(:name)).to match_array(%w[app_store_issuer_id app_store_key_id
          app_store_private_key app_store_private_key_file_name app_store_protected_refs])
      end
    end

    describe '#test' do
      it 'returns true for a successful request' do
        allow(AppStoreConnect::Client).to receive_message_chain(:new, :apps).and_return({})
        expect(apple_app_store_integration.test[:success]).to be true
      end

      it 'returns false for an invalid request' do
        allow(AppStoreConnect::Client).to receive_message_chain(:new, :apps)
          .and_return({ errors: [title: "error title"] })
        expect(apple_app_store_integration.test[:success]).to be false
      end
    end

    describe '#help' do
      it 'renders prompt information' do
        expect(apple_app_store_integration.help).not_to be_empty
      end
    end

    describe '.to_param' do
      it 'returns the name of the integration' do
        expect(described_class.to_param).to eq('apple_app_store')
      end
    end

    describe '#ci_variables' do
      let(:apple_app_store_integration) { build_stubbed(:apple_app_store_integration) }

      let(:ci_vars) do
        [
          {
            key: 'APP_STORE_CONNECT_API_KEY_ISSUER_ID',
            value: apple_app_store_integration.app_store_issuer_id,
            masked: true,
            public: false
          },
          {
            key: 'APP_STORE_CONNECT_API_KEY_KEY',
            value: Base64.encode64(apple_app_store_integration.app_store_private_key),
            masked: true,
            public: false
          },
          {
            key: 'APP_STORE_CONNECT_API_KEY_KEY_ID',
            value: apple_app_store_integration.app_store_key_id,
            masked: true,
            public: false
          },
          {
            key: 'APP_STORE_CONNECT_API_KEY_IS_KEY_CONTENT_BASE64',
            value: described_class::IS_KEY_CONTENT_BASE64,
            masked: false,
            public: false
          }
        ]
      end

      it 'returns the vars for protected branch' do
        expect(apple_app_store_integration.ci_variables(protected_ref: true)).to match_array(ci_vars)
      end

      it 'doesn\'t return the vars for unprotected branch' do
        expect(apple_app_store_integration.ci_variables(protected_ref: false)).to be_empty
      end
    end

    describe '#initialize_properties' do
      context 'when app_store_protected_refs is nil' do
        let(:apple_app_store_integration) { described_class.new(app_store_protected_refs: nil) }

        it 'sets app_store_protected_refs to true' do
          expect(apple_app_store_integration.app_store_protected_refs).to be(true)
        end
      end

      context 'when app_store_protected_refs is false' do
        let(:apple_app_store_integration) { build(:apple_app_store_integration, app_store_protected_refs: false) }

        it 'sets app_store_protected_refs to false' do
          expect(apple_app_store_integration.app_store_protected_refs).to be(false)
        end
      end
    end
  end

  context 'when integration is disabled' do
    let(:apple_app_store_integration) { build_stubbed(:apple_app_store_integration, active: false) }

    describe '#ci_variables' do
      it 'returns an empty array' do
        expect(apple_app_store_integration.ci_variables(protected_ref: true)).to be_empty
      end
    end
  end
end