admin_settings_spec.rb 11 KB
Newer Older
1
require 'spec_helper'
2

3
feature 'Admin updates settings' do
4
  include StubENV
5 6 7
  include TermsHelper

  let(:admin) { create(:admin) }
8 9 10

  before do
    stub_env('IN_MEMORY_APPLICATION_SETTINGS', 'false')
11
    sign_in(admin)
12 13 14
    visit admin_application_settings_path
  end

15
  scenario 'Change visibility settings' do
16 17 18 19
    page.within('.as-visibility-access') do
      choose "application_setting_default_project_visibility_20"
      click_button 'Save changes'
    end
20 21 22 23

    expect(page).to have_content "Application settings saved successfully"
  end

24
  scenario 'Uncheck all restricted visibility levels' do
25 26 27 28 29 30
    page.within('.as-visibility-access') do
      find('#application_setting_visibility_level_0').set(false)
      find('#application_setting_visibility_level_10').set(false)
      find('#application_setting_visibility_level_20').set(false)
      click_button 'Save changes'
    end
31 32 33 34 35 36 37

    expect(page).to have_content "Application settings saved successfully"
    expect(find('#application_setting_visibility_level_0')).not_to be_checked
    expect(find('#application_setting_visibility_level_10')).not_to be_checked
    expect(find('#application_setting_visibility_level_20')).not_to be_checked
  end

38 39 40
  describe 'LDAP settings' do
    context 'with LDAP enabled' do
      scenario 'Change allow group owners to manage ldap' do
41
        allow(Gitlab::Auth::LDAP::Config).to receive(:enabled?).and_return(true)
42 43
        visit admin_application_settings_path

44 45 46 47
        page.within('.as-visibility-access') do
          find('#application_setting_allow_group_owners_to_manage_ldap').set(false)
          click_button 'Save'
        end
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62

        expect(page).to have_content('Application settings saved successfully')
        expect(find('#application_setting_allow_group_owners_to_manage_ldap')).not_to be_checked
      end
    end

    context 'with LDAP disabled' do
      scenario 'Does not show option to allow group owners to manage ldap' do
        visit admin_application_settings_path

        expect(page).not_to have_css('#application_setting_allow_group_owners_to_manage_ldap')
      end
    end
  end

63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
  scenario 'Modify import sources' do
    expect(Gitlab::CurrentSettings.import_sources).not_to be_empty

    page.within('.as-visibility-access') do
      Gitlab::ImportSources.options.map do |name, _|
        uncheck name
      end

      click_button 'Save changes'
    end

    expect(page).to have_content "Application settings saved successfully"
    expect(Gitlab::CurrentSettings.import_sources).to be_empty

    page.within('.as-visibility-access') do
      check "Repo by URL"
      click_button 'Save changes'
    end

    expect(page).to have_content "Application settings saved successfully"
    expect(Gitlab::CurrentSettings.import_sources).to eq(['git'])
  end

86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
  scenario 'Change Visibility and Access Controls' do
    page.within('.as-visibility-access') do
      uncheck 'Project export enabled'
      click_button 'Save changes'
    end

    expect(Gitlab::CurrentSettings.project_export_enabled).to be_falsey
    expect(page).to have_content "Application settings saved successfully"
  end

  scenario 'Change Account and Limit Settings' do
    page.within('.as-account-limit') do
      uncheck 'Gravatar enabled'
      click_button 'Save changes'
    end
101

102
    expect(Gitlab::CurrentSettings.gravatar_enabled).to be_falsey
103 104 105 106 107 108 109 110 111
    expect(page).to have_content "Application settings saved successfully"
  end

  scenario 'Change Sign-in restrictions' do
    page.within('.as-signin') do
      fill_in 'Home page URL', with: 'https://about.gitlab.com/'
      click_button 'Save changes'
    end

112
    expect(Gitlab::CurrentSettings.home_page_url).to eq "https://about.gitlab.com/"
113 114 115
    expect(page).to have_content "Application settings saved successfully"
  end

116
  scenario 'Terms of Service' do
117 118 119 120
    # Already have the admin accept terms, so they don't need to accept in this spec.
    _existing_terms = create(:term)
    accept_terms(admin)

121
    page.within('.as-terms') do
122
      check 'Require all users to accept Terms of Service and Privacy Policy when they access GitLab.'
123 124 125 126 127 128 129 130 131
      fill_in 'Terms of Service Agreement', with: 'Be nice!'
      click_button 'Save changes'
    end

    expect(Gitlab::CurrentSettings.enforce_terms).to be(true)
    expect(Gitlab::CurrentSettings.terms).to eq 'Be nice!'
    expect(page).to have_content 'Application settings saved successfully'
  end

132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
  scenario 'Modify oauth providers' do
    expect(Gitlab::CurrentSettings.disabled_oauth_sign_in_sources).to be_empty

    page.within('.as-signin') do
      uncheck 'Google'
      click_button 'Save changes'
    end

    expect(page).to have_content "Application settings saved successfully"
    expect(Gitlab::CurrentSettings.disabled_oauth_sign_in_sources).to include('google_oauth2')

    page.within('.as-signin') do
      check "Google"
      click_button 'Save changes'
    end

    expect(page).to have_content "Application settings saved successfully"
    expect(Gitlab::CurrentSettings.disabled_oauth_sign_in_sources).not_to include('google_oauth2')
  end

152 153 154 155 156 157 158 159
  scenario 'Change Help page' do
    page.within('.as-help-page') do
      fill_in 'Help page text', with: 'Example text'
      check 'Hide marketing-related entries from help'
      fill_in 'Support page URL', with: 'http://example.com/help'
      click_button 'Save changes'
    end

160 161 162
    expect(Gitlab::CurrentSettings.help_page_text).to eq "Example text"
    expect(Gitlab::CurrentSettings.help_page_hide_commercial_content).to be_truthy
    expect(Gitlab::CurrentSettings.help_page_support_url).to eq "http://example.com/help"
163 164 165 166 167 168 169 170 171 172 173 174
    expect(page).to have_content "Application settings saved successfully"
  end

  scenario 'Change Pages settings' do
    page.within('.as-pages') do
      fill_in 'Maximum size of pages (MB)', with: 15
      check 'Require users to prove ownership of custom domains'
      click_button 'Save changes'
    end

    expect(Gitlab::CurrentSettings.max_pages_size).to eq 15
    expect(Gitlab::CurrentSettings.pages_domain_verification_enabled?).to be_truthy
Robert Speicher's avatar
Robert Speicher committed
175
    expect(page).to have_content "Application settings saved successfully"
176
  end
177

178 179
  scenario 'Change CI/CD settings' do
    page.within('.as-ci-cd') do
180
      check 'Enabled Auto DevOps for projects by default'
181 182 183
      fill_in 'Auto devops domain', with: 'domain.com'
      click_button 'Save changes'
    end
184

185 186
    expect(Gitlab::CurrentSettings.auto_devops_enabled?).to be true
    expect(Gitlab::CurrentSettings.auto_devops_domain).to eq('domain.com')
187 188 189
    expect(page).to have_content "Application settings saved successfully"
  end

190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205
  scenario 'Change Influx settings' do
    page.within('.as-influx') do
      check 'Enable InfluxDB Metrics'
      click_button 'Save changes'
    end

    expect(Gitlab::CurrentSettings.metrics_enabled?).to be true
    expect(page).to have_content "Application settings saved successfully"
  end

  scenario 'Change Prometheus settings' do
    page.within('.as-prometheus') do
      check 'Enable Prometheus Metrics'
      click_button 'Save changes'
    end

206
    expect(Gitlab::CurrentSettings.prometheus_metrics_enabled?).to be true
207 208 209
    expect(page).to have_content "Application settings saved successfully"
  end

210 211 212
  scenario 'Change Performance bar settings' do
    group = create(:group)

213
    page.within('.as-performance-bar') do
214 215 216 217 218 219 220 221 222
      check 'Enable the Performance Bar'
      fill_in 'Allowed group', with: group.path
      click_on 'Save changes'
    end

    expect(page).to have_content "Application settings saved successfully"
    expect(find_field('Enable the Performance Bar')).to be_checked
    expect(find_field('Allowed group').value).to eq group.path

223
    page.within('.as-performance-bar') do
224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256
      uncheck 'Enable the Performance Bar'
      click_on 'Save changes'
    end

    expect(page).to have_content 'Application settings saved successfully'
    expect(find_field('Enable the Performance Bar')).not_to be_checked
    expect(find_field('Allowed group').value).to be_nil
  end

  scenario 'Change Background jobs settings' do
    page.within('.as-background') do
      fill_in 'Throttling Factor', with: 1
      click_button 'Save changes'
    end

    expect(Gitlab::CurrentSettings.sidekiq_throttling_factor).to eq(1)
    expect(page).to have_content "Application settings saved successfully"
  end

  scenario 'Change Spam settings' do
    page.within('.as-spam') do
      check 'Enable reCAPTCHA'
      fill_in 'reCAPTCHA Site Key', with: 'key'
      fill_in 'reCAPTCHA Private Key', with: 'key'
      fill_in 'IPs per user', with: 15
      click_button 'Save changes'
    end

    expect(page).to have_content "Application settings saved successfully"
    expect(Gitlab::CurrentSettings.recaptcha_enabled).to be true
    expect(Gitlab::CurrentSettings.unique_ips_limit_per_user).to eq(15)
  end

257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276
  scenario 'Configure web terminal' do
    page.within('.as-terminal') do
      fill_in 'Max session time', with: 15
      click_button 'Save changes'
    end

    expect(page).to have_content "Application settings saved successfully"
    expect(Gitlab::CurrentSettings.terminal_max_session_time).to eq(15)
  end

  scenario 'Enable outbound requests' do
    page.within('.as-outbound') do
      check 'Allow requests to the local network from hooks and services'
      click_button 'Save changes'
    end

    expect(page).to have_content "Application settings saved successfully"
    expect(Gitlab::CurrentSettings.allow_local_requests_from_hooks_and_services).to be true
  end

Kamil Trzcinski's avatar
Kamil Trzcinski committed
277
  scenario 'Change Slack Notifications Service template settings' do
278
    first(:link, 'Service Templates').click
Kamil Trzcinski's avatar
Kamil Trzcinski committed
279
    click_link 'Slack notifications'
280 281
    fill_in 'Webhook', with: 'http://localhost'
    fill_in 'Username', with: 'test_user'
282
    fill_in 'service_push_channel', with: '#test_channel'
283
    page.check('Notify only broken pipelines')
284
    page.check('Notify only default branch')
285

286 287 288
    check_all_events
    click_on 'Save'

289
    expect(page).to have_content 'Application settings saved successfully'
290

Kamil Trzcinski's avatar
Kamil Trzcinski committed
291
    click_link 'Slack notifications'
292

293
    page.all('input[type=checkbox]').each do |checkbox|
294
      expect(checkbox).to be_checked
295
    end
296 297
    expect(find_field('Webhook').value).to eq 'http://localhost'
    expect(find_field('Username').value).to eq 'test_user'
298
    expect(find('#service_push_channel').value).to eq '#test_channel'
299
  end
300

301
  scenario 'Change Keys settings' do
302 303 304 305 306 307 308
    page.within('.as-visibility-access') do
      select 'Are forbidden', from: 'RSA SSH keys'
      select 'Are allowed', from: 'DSA SSH keys'
      select 'Must be at least 384 bits', from: 'ECDSA SSH keys'
      select 'Are forbidden', from: 'ED25519 SSH keys'
      click_on 'Save changes'
    end
309 310 311 312 313 314 315 316 317 318

    forbidden = ApplicationSetting::FORBIDDEN_KEY_VALUE.to_s

    expect(page).to have_content 'Application settings saved successfully'
    expect(find_field('RSA SSH keys').value).to eq(forbidden)
    expect(find_field('DSA SSH keys').value).to eq('0')
    expect(find_field('ECDSA SSH keys').value).to eq('384')
    expect(find_field('ED25519 SSH keys').value).to eq(forbidden)
  end

319 320 321 322 323 324 325 326 327
  def check_all_events
    page.check('Active')
    page.check('Push')
    page.check('Tag push')
    page.check('Note')
    page.check('Issue')
    page.check('Merge request')
    page.check('Pipeline')
  end
328
end