From 60cdd2bcc894cf9cce4892570bf6a146dc45e536 Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon <grzesiek.bizon@gmail.com> Date: Fri, 31 Mar 2017 12:27:05 +0200 Subject: [PATCH] Add specs for container repository factory method --- app/models/container_repository.rb | 2 +- ...ntainer_registry_authentication_service.rb | 2 +- spec/models/container_repository_spec.rb | 51 ++++++++++++++++--- 3 files changed, 45 insertions(+), 10 deletions(-) diff --git a/app/models/container_repository.rb b/app/models/container_repository.rb index 052d93c3bdc..e27369c10d6 100644 --- a/app/models/container_repository.rb +++ b/app/models/container_repository.rb @@ -58,7 +58,7 @@ class ContainerRepository < ActiveRecord::Base end end - def self.create_from_path(path) + def self.create_from_path!(path) self.create(project: path.repository_project, name: path.repository_name) end diff --git a/app/services/auth/container_registry_authentication_service.rb b/app/services/auth/container_registry_authentication_service.rb index dcb728b6151..d58ff589be1 100644 --- a/app/services/auth/container_registry_authentication_service.rb +++ b/app/services/auth/container_registry_authentication_service.rb @@ -94,7 +94,7 @@ module Auth return if path.has_repository? return unless actions.include?('push') - ContainerRepository.create_from_path(path) + ContainerRepository.create_from_path!(path) end def can_access?(requested_project, requested_action) diff --git a/spec/models/container_repository_spec.rb b/spec/models/container_repository_spec.rb index 92dccf76d71..884eac43719 100644 --- a/spec/models/container_repository_spec.rb +++ b/spec/models/container_repository_spec.rb @@ -85,28 +85,63 @@ describe ContainerRepository do end end - describe '#from_repository_path' do + describe '.create_from_path!' do + let(:repository) do + described_class.create_from_path!(ContainerRegistry::Path.new(path)) + end + + let(:repository_path) { ContainerRegistry::Path.new(path) } + context 'when received multi-level repository path' do - let(:repository) do - described_class.from_repository_path('group/test/some/image/name') - end + let(:path) { project.full_path + '/some/image' } - pending 'fabricates object within a correct project' do + it 'fabricates repository assigned to a correct project' do expect(repository.project).to eq project end - pending 'it fabricates project with a correct name' do - expect(repository.name).to eq 'some/image/name' + it 'fabricates repository with a correct name' do + expect(repository.name).to eq 'some/image' end end - context 'when path contains too many nodes' do + context 'when path is too long' do + let(:path) do + project.full_path + '/a/b/c/d/e/f/g/h/i/j/k/l/n/o/p/s/t/u/x/y/z' + end + + it 'does not create repository and raises error' do + expect { repository }.to raise_error( + ContainerRegistry::Path::InvalidRegistryPathError) + end end context 'when received multi-level repository with nested groups' do + let(:group) { create(:group, :nested, name: 'nested') } + let(:path) { project.full_path + '/some/image' } + + it 'fabricates repository assigned to a correct project' do + expect(repository.project).to eq project + end + + it 'fabricates repository with a correct name' do + expect(repository.name).to eq 'some/image' + end + + it 'has path including a nested group' do + expect(repository.path).to include 'nested/test/some/image' + end end context 'when received root repository path' do + let(:path) { project.full_path } + + it 'fabricates repository assigned to a correct project' do + expect(repository.project).to eq project + end + + it 'fabricates repository with an empty name' do + expect(repository.name).to be_empty + end end end end -- GitLab