application_setting_spec.rb 3.78 KB
Newer Older
1
2
3
require 'spec_helper'

describe ApplicationSetting, models: true do
Kamil Trzcinski's avatar
Kamil Trzcinski committed
4
5
6
  let(:setting) { ApplicationSetting.create_from_defaults }

  it { expect(setting).to be_valid }
7

Robert Speicher's avatar
Robert Speicher committed
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  describe 'validations' do
    let(:http)  { 'http://example.com' }
    let(:https) { 'https://example.com' }
    let(:ftp)   { 'ftp://example.com' }

    it { is_expected.to allow_value(nil).for(:home_page_url) }
    it { is_expected.to allow_value(http).for(:home_page_url) }
    it { is_expected.to allow_value(https).for(:home_page_url) }
    it { is_expected.not_to allow_value(ftp).for(:home_page_url) }

    it { is_expected.to allow_value(nil).for(:after_sign_out_path) }
    it { is_expected.to allow_value(http).for(:after_sign_out_path) }
    it { is_expected.to allow_value(https).for(:after_sign_out_path) }
    it { is_expected.not_to allow_value(ftp).for(:after_sign_out_path) }
22

23
24
25
26
27
28
29
30
    describe 'disabled_oauth_sign_in_sources validations' do
      before do
        allow(Devise).to receive(:omniauth_providers).and_return([:github])
      end

      it { is_expected.to allow_value(['github']).for(:disabled_oauth_sign_in_sources) }
      it { is_expected.not_to allow_value(['test']).for(:disabled_oauth_sign_in_sources) }
    end
31

32
33
34
35
36
37
38
    it { is_expected.to validate_presence_of(:max_attachment_size) }

    it do
      is_expected.to validate_numericality_of(:max_attachment_size)
        .only_integer
        .is_greater_than(0)
    end
39
40
41
42

    it_behaves_like 'an object with email-formated attributes', :admin_notification_email do
      subject { setting }
    end
43
44
45
46
47
48
49
50
51
52

    context 'repository storages inclussion' do
      before do
        storages = { 'custom' => 'tmp/tests/custom_repositories' }
        allow(Gitlab.config.repositories).to receive(:storages).and_return(storages)
      end

      it { is_expected.to allow_value('custom').for(:repository_storage) }
      it { is_expected.not_to allow_value('alternative').for(:repository_storage) }
    end
Robert Speicher's avatar
Robert Speicher committed
53
54
  end

55
56
  context 'restricted signup domains' do
    it 'set single domain' do
57
58
      setting.domain_whitelist_raw = 'example.com'
      expect(setting.domain_whitelist).to eq(['example.com'])
59
60
61
    end

    it 'set multiple domains with spaces' do
62
63
      setting.domain_whitelist_raw = 'example.com *.example.com'
      expect(setting.domain_whitelist).to eq(['example.com', '*.example.com'])
64
65
66
    end

    it 'set multiple domains with newlines and a space' do
67
68
      setting.domain_whitelist_raw = "example.com\n *.example.com"
      expect(setting.domain_whitelist).to eq(['example.com', '*.example.com'])
69
70
71
    end

    it 'set multiple domains with commas' do
72
73
      setting.domain_whitelist_raw = "example.com, *.example.com"
      expect(setting.domain_whitelist).to eq(['example.com', '*.example.com'])
74
75
    end
  end
76
77
78
79

  context 'blacklisted signup domains' do
    it 'set single domain' do
      setting.domain_blacklist_raw = 'example.com'
80
      expect(setting.domain_blacklist).to contain_exactly('example.com')
81
82
83
84
    end

    it 'set multiple domains with spaces' do
      setting.domain_blacklist_raw = 'example.com *.example.com'
85
      expect(setting.domain_blacklist).to contain_exactly('example.com', '*.example.com')
86
87
88
89
    end

    it 'set multiple domains with newlines and a space' do
      setting.domain_blacklist_raw = "example.com\n *.example.com"
90
      expect(setting.domain_blacklist).to contain_exactly('example.com', '*.example.com')
91
92
93
94
    end

    it 'set multiple domains with commas' do
      setting.domain_blacklist_raw = "example.com, *.example.com"
95
      expect(setting.domain_blacklist).to contain_exactly('example.com', '*.example.com')
96
97
98
99
    end

    it 'set multiple domain with file' do
      setting.domain_blacklist_file = File.open(Rails.root.join('spec/fixtures/', 'blacklist.txt'))
100
      expect(setting.domain_blacklist).to contain_exactly('example.com', 'test.com', 'foo.bar')
101
102
    end
  end
103
end