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

describe ApplicationSetting, models: true do
K
Kamil Trzcinski 已提交
4
  let(:setting) { ApplicationSetting.create_from_defaults }
5

K
Kamil Trzcinski 已提交
6
  it { expect(setting).to be_valid }
7

R
Robert Speicher 已提交
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
R
Robert Speicher 已提交
53 54
  end

K
Kamil Trzcinski 已提交
55
  context 'restricted signup domains' do
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
    it 'set single domain' do
      setting.restricted_signup_domains_raw = 'example.com'
      expect(setting.restricted_signup_domains).to eq(['example.com'])
    end

    it 'set multiple domains with spaces' do
      setting.restricted_signup_domains_raw = 'example.com *.example.com'
      expect(setting.restricted_signup_domains).to eq(['example.com', '*.example.com'])
    end

    it 'set multiple domains with newlines and a space' do
      setting.restricted_signup_domains_raw = "example.com\n *.example.com"
      expect(setting.restricted_signup_domains).to eq(['example.com', '*.example.com'])
    end

    it 'set multiple domains with commas' do
      setting.restricted_signup_domains_raw = "example.com, *.example.com"
      expect(setting.restricted_signup_domains).to eq(['example.com', '*.example.com'])
    end
  end
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

  context 'blacklisted signup domains' do
    it 'set single domain' do
      setting.domain_blacklist_raw = 'example.com'
      expect(setting.domain_blacklist).to eq(['example.com'])
    end

    it 'set multiple domains with spaces' do
      setting.domain_blacklist_raw = 'example.com *.example.com'
      expect(setting.domain_blacklist).to eq(['example.com', '*.example.com'])
    end

    it 'set multiple domains with newlines and a space' do
      setting.domain_blacklist_raw = "example.com\n *.example.com"
      expect(setting.domain_blacklist).to eq(['example.com', '*.example.com'])
    end

    it 'set multiple domains with commas' do
      setting.domain_blacklist_raw = "example.com, *.example.com"
      expect(setting.domain_blacklist).to eq(['example.com', '*.example.com'])
    end

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