summaryrefslogtreecommitdiff
path: root/spec/models/serverless/domain_spec.rb
blob: ba54e05b4e3ff5f7e1c819e2c8c85c061ae2feaf (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
# frozen_string_literal: true

require 'spec_helper'

describe ::Serverless::Domain do
  let(:function_name) { 'test-function' }
  let(:pages_domain_name) { 'serverless.gitlab.io' }
  let(:pages_domain) { create(:pages_domain, :instance_serverless, domain: pages_domain_name) }
  let!(:serverless_domain_cluster) { create(:serverless_domain_cluster, uuid: 'abcdef12345678', pages_domain: pages_domain) }
  let(:valid_cluster_uuid) { 'aba1cdef123456f278' }
  let(:invalid_cluster_uuid) { 'aba1cdef123456f178' }
  let!(:environment) { create(:environment, name: 'test') }

  let(:valid_uri) { "https://#{function_name}-#{valid_cluster_uuid}#{"%x" % environment.id}-#{environment.slug}.#{pages_domain_name}" }
  let(:valid_fqdn) { "#{function_name}-#{valid_cluster_uuid}#{"%x" % environment.id}-#{environment.slug}.#{pages_domain_name}" }
  let(:invalid_uri) { "https://#{function_name}-#{invalid_cluster_uuid}#{"%x" % environment.id}-#{environment.slug}.#{pages_domain_name}" }

  shared_examples 'a valid Domain' do
    describe '#uri' do
      it 'matches valid URI' do
        expect(subject.uri.to_s).to eq valid_uri
      end
    end

    describe '#function_name' do
      it 'returns function_name' do
        expect(subject.function_name).to eq function_name
      end
    end

    describe '#serverless_domain_cluster' do
      it 'returns serverless_domain_cluster' do
        expect(subject.serverless_domain_cluster).to eq serverless_domain_cluster
      end
    end

    describe '#environment' do
      it 'returns environment' do
        expect(subject.environment).to eq environment
      end
    end
  end

  describe '.new' do
    context 'with valid arguments' do
      subject do
        described_class.new(
          function_name: function_name,
          serverless_domain_cluster: serverless_domain_cluster,
          environment: environment
        )
      end

      it_behaves_like 'a valid Domain'
    end

    context 'with invalid arguments' do
      subject do
        described_class.new(
          function_name: function_name,
          environment: environment
        )
      end

      it { is_expected.not_to be_valid }
    end

    context 'with nil cluster argument' do
      subject do
        described_class.new(
          function_name: function_name,
          serverless_domain_cluster: nil,
          environment: environment
        )
      end

      it { is_expected.not_to be_valid }
    end
  end

  describe '.generate_uuid' do
    it 'has 14 characters' do
      expect(described_class.generate_uuid.length).to eq(described_class::UUID_LENGTH)
    end

    it 'consists of only hexadecimal characters' do
      expect(described_class.generate_uuid).to match(/\A\h+\z/)
    end

    it 'uses random characters' do
      uuid = 'abcd1234567890'

      expect(SecureRandom).to receive(:hex).with(described_class::UUID_LENGTH / 2).and_return(uuid)
      expect(described_class.generate_uuid).to eq(uuid)
    end
  end
end