BigW Consortium Gitlab

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

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

Kamil Trzcinski committed
6
  it { expect(setting).to be_valid }
7

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
53 54
  end

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

61
    it 'sets 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
    end

66
    it 'sets 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
    end

71
    it 'sets 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

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

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

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

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

98
    it 'sets multiple domains with semicolon' do
99 100 101 102
      setting.domain_blacklist_raw = "example.com; *.example.com"
      expect(setting.domain_blacklist).to contain_exactly('example.com', '*.example.com')
    end

103
    it 'sets multiple domains with mixture of everything' do
104 105 106 107
      setting.domain_blacklist_raw = "example.com; *.example.com\n test.com\sblock.com   yes.com"
      expect(setting.domain_blacklist).to contain_exactly('example.com', '*.example.com', 'test.com', 'block.com', 'yes.com')
    end

108
    it 'sets multiple domain with file' do
109
      setting.domain_blacklist_file = File.open(Rails.root.join('spec/fixtures/', 'domain_blacklist.txt'))
110
      expect(setting.domain_blacklist).to contain_exactly('example.com', 'test.com', 'foo.bar')
111 112
    end
  end
113
end