2020-02-20 10:08:44 -05:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
require 'spec_helper'
|
|
|
|
|
2020-06-24 02:09:01 -04:00
|
|
|
RSpec.describe ::Serverless::Domain do
|
2020-02-20 10:08:44 -05:00
|
|
|
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
|