summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorAndre Guedes <andrebsguedes@gmail.com>2016-12-16 01:24:05 -0200
committerAndre Guedes <andrebsguedes@gmail.com>2017-02-22 11:30:11 -0300
commite4fa80f3b67f1ef30c262cd4df28516ccff6336a (patch)
tree225b64223d018ca259fcfabd6b725918dfe4d126 /spec
parent246df2bd1151d39a04ef553064144eb75ee3e980 (diff)
downloadgitlab-ce-e4fa80f3b67f1ef30c262cd4df28516ccff6336a.tar.gz
Fixes broken and missing tests
Diffstat (limited to 'spec')
-rw-r--r--spec/factories/container_images.rb21
-rw-r--r--spec/features/container_registry_spec.rb32
-rw-r--r--spec/features/security/project/internal_access_spec.rb3
-rw-r--r--spec/features/security/project/private_access_spec.rb3
-rw-r--r--spec/features/security/project/public_access_spec.rb3
-rw-r--r--spec/lib/container_registry/blob_spec.rb15
-rw-r--r--spec/lib/container_registry/registry_spec.rb2
-rw-r--r--spec/lib/container_registry/repository_spec.rb65
-rw-r--r--spec/lib/container_registry/tag_spec.rb11
-rw-r--r--spec/lib/gitlab/import_export/all_models.yml3
-rw-r--r--spec/models/ci/build_spec.rb2
-rw-r--r--spec/models/container_image_spec.rb73
-rw-r--r--spec/models/namespace_spec.rb8
-rw-r--r--spec/models/project_spec.rb41
-rw-r--r--spec/services/projects/destroy_service_spec.rb15
-rw-r--r--spec/services/projects/transfer_service_spec.rb3
16 files changed, 177 insertions, 123 deletions
diff --git a/spec/factories/container_images.rb b/spec/factories/container_images.rb
new file mode 100644
index 00000000000..6141a519a75
--- /dev/null
+++ b/spec/factories/container_images.rb
@@ -0,0 +1,21 @@
+FactoryGirl.define do
+ factory :container_image do
+ name "test_container_image"
+ project
+
+ transient do
+ tags ['tag']
+ stubbed true
+ end
+
+ after(:build) do |image, evaluator|
+ if evaluator.stubbed
+ allow(Gitlab.config.registry).to receive(:enabled).and_return(true)
+ allow(image.client).to receive(:repository_tags).and_return({
+ name: image.name_with_namespace,
+ tags: evaluator.tags
+ })
+ end
+ end
+ end
+end
diff --git a/spec/features/container_registry_spec.rb b/spec/features/container_registry_spec.rb
index 203e55a36f2..862c9fbf6c0 100644
--- a/spec/features/container_registry_spec.rb
+++ b/spec/features/container_registry_spec.rb
@@ -2,15 +2,18 @@ require 'spec_helper'
describe "Container Registry" do
let(:project) { create(:empty_project) }
- let(:repository) { project.container_registry_repository }
+ let(:registry) { project.container_registry }
let(:tag_name) { 'latest' }
let(:tags) { [tag_name] }
+ let(:container_image) { create(:container_image) }
+ let(:image_name) { container_image.name }
before do
login_as(:user)
project.team << [@user, :developer]
- stub_container_registry_tags(*tags)
stub_container_registry_config(enabled: true)
+ stub_container_registry_tags(*tags)
+ project.container_images << container_image unless container_image.nil?
allow(Auth::ContainerRegistryAuthenticationService).to receive(:full_access_token).and_return('token')
end
@@ -19,15 +22,26 @@ describe "Container Registry" do
visit namespace_project_container_registry_index_path(project.namespace, project)
end
- context 'when no tags' do
- let(:tags) { [] }
+ context 'when no images' do
+ let(:container_image) { }
+
+ it { expect(page).to have_content('No container images in Container Registry for this project') }
+ end
- it { expect(page).to have_content('No images in Container Registry for this project') }
+ context 'when there are images' do
+ it { expect(page).to have_content(image_name) }
end
+ end
+
+ describe 'DELETE /:project/container_registry/:image_id' do
+ before do
+ visit namespace_project_container_registry_index_path(project.namespace, project)
+ end
+
+ it do
+ expect_any_instance_of(ContainerImage).to receive(:delete_tags).and_return(true)
- context 'when there are tags' do
- it { expect(page).to have_content(tag_name) }
- it { expect(page).to have_content('d7a513a66') }
+ click_on 'Remove image'
end
end
@@ -39,7 +53,7 @@ describe "Container Registry" do
it do
expect_any_instance_of(::ContainerRegistry::Tag).to receive(:delete).and_return(true)
- click_on 'Remove'
+ click_on 'Remove tag'
end
end
end
diff --git a/spec/features/security/project/internal_access_spec.rb b/spec/features/security/project/internal_access_spec.rb
index 24af062d763..4e7a2c0ecc0 100644
--- a/spec/features/security/project/internal_access_spec.rb
+++ b/spec/features/security/project/internal_access_spec.rb
@@ -429,9 +429,12 @@ describe "Internal Project Access", feature: true do
end
describe "GET /:project_path/container_registry" do
+ let(:container_image) { create(:container_image) }
+
before do
stub_container_registry_tags('latest')
stub_container_registry_config(enabled: true)
+ project.container_images << container_image
end
subject { namespace_project_container_registry_index_path(project.namespace, project) }
diff --git a/spec/features/security/project/private_access_spec.rb b/spec/features/security/project/private_access_spec.rb
index c511dcfa18e..c74cdc05593 100644
--- a/spec/features/security/project/private_access_spec.rb
+++ b/spec/features/security/project/private_access_spec.rb
@@ -418,9 +418,12 @@ describe "Private Project Access", feature: true do
end
describe "GET /:project_path/container_registry" do
+ let(:container_image) { create(:container_image) }
+
before do
stub_container_registry_tags('latest')
stub_container_registry_config(enabled: true)
+ project.container_images << container_image
end
subject { namespace_project_container_registry_index_path(project.namespace, project) }
diff --git a/spec/features/security/project/public_access_spec.rb b/spec/features/security/project/public_access_spec.rb
index d8cc012c27e..485ef335b78 100644
--- a/spec/features/security/project/public_access_spec.rb
+++ b/spec/features/security/project/public_access_spec.rb
@@ -429,9 +429,12 @@ describe "Public Project Access", feature: true do
end
describe "GET /:project_path/container_registry" do
+ let(:container_image) { create(:container_image) }
+
before do
stub_container_registry_tags('latest')
stub_container_registry_config(enabled: true)
+ project.container_images << container_image
end
subject { namespace_project_container_registry_index_path(project.namespace, project) }
diff --git a/spec/lib/container_registry/blob_spec.rb b/spec/lib/container_registry/blob_spec.rb
index bbacdc67ebd..f092449c4bd 100644
--- a/spec/lib/container_registry/blob_spec.rb
+++ b/spec/lib/container_registry/blob_spec.rb
@@ -9,12 +9,19 @@ describe ContainerRegistry::Blob do
'size' => 1000
}
end
- let(:token) { 'authorization-token' }
-
- let(:registry) { ContainerRegistry::Registry.new('http://example.com', token: token) }
- let(:repository) { registry.repository('group/test') }
+ let(:token) { 'token' }
+
+ let(:group) { create(:group, name: 'group') }
+ let(:project) { create(:project, path: 'test', group: group) }
+ let(:example_host) { 'example.com' }
+ let(:registry_url) { 'http://' + example_host }
+ let(:repository) { create(:container_image, name: '', project: project) }
let(:blob) { repository.blob(config) }
+ before do
+ stub_container_registry_config(enabled: true, api_url: registry_url, host_port: example_host)
+ end
+
it { expect(blob).to respond_to(:repository) }
it { expect(blob).to delegate_method(:registry).to(:repository) }
it { expect(blob).to delegate_method(:client).to(:repository) }
diff --git a/spec/lib/container_registry/registry_spec.rb b/spec/lib/container_registry/registry_spec.rb
index 4f3f8b24fc4..4d6eea94bf0 100644
--- a/spec/lib/container_registry/registry_spec.rb
+++ b/spec/lib/container_registry/registry_spec.rb
@@ -10,7 +10,7 @@ describe ContainerRegistry::Registry do
it { is_expected.to respond_to(:uri) }
it { is_expected.to respond_to(:path) }
- it { expect(subject.repository('test')).not_to be_nil }
+ it { expect(subject).not_to be_nil }
context '#path' do
subject { registry.path }
diff --git a/spec/lib/container_registry/repository_spec.rb b/spec/lib/container_registry/repository_spec.rb
deleted file mode 100644
index c364e759108..00000000000
--- a/spec/lib/container_registry/repository_spec.rb
+++ /dev/null
@@ -1,65 +0,0 @@
-require 'spec_helper'
-
-describe ContainerRegistry::Repository do
- let(:registry) { ContainerRegistry::Registry.new('http://example.com') }
- let(:repository) { registry.repository('group/test') }
-
- it { expect(repository).to respond_to(:registry) }
- it { expect(repository).to delegate_method(:client).to(:registry) }
- it { expect(repository.tag('test')).not_to be_nil }
-
- context '#path' do
- subject { repository.path }
-
- it { is_expected.to eq('example.com/group/test') }
- end
-
- context 'manifest processing' do
- before do
- stub_request(:get, 'http://example.com/v2/group/test/tags/list').
- with(headers: { 'Accept' => 'application/vnd.docker.distribution.manifest.v2+json' }).
- to_return(
- status: 200,
- body: JSON.dump(tags: ['test']),
- headers: { 'Content-Type' => 'application/json' })
- end
-
- context '#manifest' do
- subject { repository.manifest }
-
- it { is_expected.not_to be_nil }
- end
-
- context '#valid?' do
- subject { repository.valid? }
-
- it { is_expected.to be_truthy }
- end
-
- context '#tags' do
- subject { repository.tags }
-
- it { is_expected.not_to be_empty }
- end
- end
-
- context '#delete_tags' do
- let(:tag) { ContainerRegistry::Tag.new(repository, 'tag') }
-
- before { expect(repository).to receive(:tags).twice.and_return([tag]) }
-
- subject { repository.delete_tags }
-
- context 'succeeds' do
- before { expect(tag).to receive(:delete).and_return(true) }
-
- it { is_expected.to be_truthy }
- end
-
- context 'any fails' do
- before { expect(tag).to receive(:delete).and_return(false) }
-
- it { is_expected.to be_falsey }
- end
- end
-end
diff --git a/spec/lib/container_registry/tag_spec.rb b/spec/lib/container_registry/tag_spec.rb
index c5e31ae82b6..cdd0fe66bc3 100644
--- a/spec/lib/container_registry/tag_spec.rb
+++ b/spec/lib/container_registry/tag_spec.rb
@@ -1,11 +1,18 @@
require 'spec_helper'
describe ContainerRegistry::Tag do
- let(:registry) { ContainerRegistry::Registry.new('http://example.com') }
- let(:repository) { registry.repository('group/test') }
+ let(:group) { create(:group, name: 'group') }
+ let(:project) { create(:project, path: 'test', group: group) }
+ let(:example_host) { 'example.com' }
+ let(:registry_url) { 'http://' + example_host }
+ let(:repository) { create(:container_image, name: '', project: project) }
let(:tag) { repository.tag('tag') }
let(:headers) { { 'Accept' => 'application/vnd.docker.distribution.manifest.v2+json' } }
+ before do
+ stub_container_registry_config(enabled: true, api_url: registry_url, host_port: example_host)
+ end
+
it { expect(tag).to respond_to(:repository) }
it { expect(tag).to delegate_method(:registry).to(:repository) }
it { expect(tag).to delegate_method(:client).to(:repository) }
diff --git a/spec/lib/gitlab/import_export/all_models.yml b/spec/lib/gitlab/import_export/all_models.yml
index 06617f3b007..9c08f41fe82 100644
--- a/spec/lib/gitlab/import_export/all_models.yml
+++ b/spec/lib/gitlab/import_export/all_models.yml
@@ -114,6 +114,8 @@ merge_access_levels:
- protected_branch
push_access_levels:
- protected_branch
+container_images:
+- name
project:
- taggings
- base_tags
@@ -197,6 +199,7 @@ project:
- project_authorizations
- route
- statistics
+- container_images
award_emoji:
- awardable
- user
diff --git a/spec/models/ci/build_spec.rb b/spec/models/ci/build_spec.rb
index 2dfca8bcfce..83a2efb55b9 100644
--- a/spec/models/ci/build_spec.rb
+++ b/spec/models/ci/build_spec.rb
@@ -1397,7 +1397,7 @@ describe Ci::Build, :models do
{ key: 'CI_REGISTRY', value: 'registry.example.com', public: true }
end
let(:ci_registry_image) do
- { key: 'CI_REGISTRY_IMAGE', value: project.container_registry_repository_url, public: true }
+ { key: 'CI_REGISTRY_IMAGE', value: project.container_registry_url, public: true }
end
context 'and is disabled for project' do
diff --git a/spec/models/container_image_spec.rb b/spec/models/container_image_spec.rb
new file mode 100644
index 00000000000..e0bea737f59
--- /dev/null
+++ b/spec/models/container_image_spec.rb
@@ -0,0 +1,73 @@
+require 'spec_helper'
+
+describe ContainerImage do
+ let(:group) { create(:group, name: 'group') }
+ let(:project) { create(:project, path: 'test', group: group) }
+ let(:example_host) { 'example.com' }
+ let(:registry_url) { 'http://' + example_host }
+ let(:container_image) { create(:container_image, name: '', project: project, stubbed: false) }
+
+ before do
+ stub_container_registry_config(enabled: true, api_url: registry_url, host_port: example_host)
+ stub_request(:get, 'http://example.com/v2/group/test/tags/list').
+ with(headers: { 'Accept' => 'application/vnd.docker.distribution.manifest.v2+json' }).
+ to_return(
+ status: 200,
+ body: JSON.dump(tags: ['test']),
+ headers: { 'Content-Type' => 'application/json' })
+ end
+
+ it { expect(container_image).to respond_to(:project) }
+ it { expect(container_image).to delegate_method(:container_registry).to(:project) }
+ it { expect(container_image).to delegate_method(:client).to(:container_registry) }
+ it { expect(container_image.tag('test')).not_to be_nil }
+
+ context '#path' do
+ subject { container_image.path }
+
+ it { is_expected.to eq('example.com/group/test') }
+ end
+
+ context 'manifest processing' do
+ context '#manifest' do
+ subject { container_image.manifest }
+
+ it { is_expected.not_to be_nil }
+ end
+
+ context '#valid?' do
+ subject { container_image.valid? }
+
+ it { is_expected.to be_truthy }
+ end
+
+ context '#tags' do
+ subject { container_image.tags }
+
+ it { is_expected.not_to be_empty }
+ end
+ end
+
+ context '#delete_tags' do
+ let(:tag) { ContainerRegistry::Tag.new(container_image, 'tag') }
+
+ before do
+ expect(container_image).to receive(:tags).twice.and_return([tag])
+ expect(tag).to receive(:digest).and_return('sha256:4c8e63ca4cb663ce6c688cb06f1c3672a172b088dac5b6d7ad7d49cd620d85cf')
+ end
+
+ subject { container_image.delete_tags }
+
+ context 'succeeds' do
+ before { expect(container_image.client).to receive(:delete_repository_tag).and_return(true) }
+
+ it { is_expected.to be_truthy }
+ end
+
+ context 'any fails' do
+ before { expect(container_image.client).to receive(:delete_repository_tag).and_return(false) }
+
+ it { is_expected.to be_falsey }
+ end
+ end
+end
diff --git a/spec/models/namespace_spec.rb b/spec/models/namespace_spec.rb
index 35d932f1c64..aeb4eeb0b55 100644
--- a/spec/models/namespace_spec.rb
+++ b/spec/models/namespace_spec.rb
@@ -134,18 +134,20 @@ describe Namespace, models: true do
expect(@namespace.move_dir).to be_truthy
end
- context "when any project has container tags" do
+ context "when any project has container images" do
+ let(:container_image) { create(:container_image) }
+
before do
stub_container_registry_config(enabled: true)
stub_container_registry_tags('tag')
- create(:empty_project, namespace: @namespace)
+ create(:empty_project, namespace: @namespace, container_images: [container_image])
allow(@namespace).to receive(:path_was).and_return(@namespace.path)
allow(@namespace).to receive(:path).and_return('new_path')
end
- it { expect { @namespace.move_dir }.to raise_error('Namespace cannot be moved, because at least one project has tags in container registry') }
+ it { expect { @namespace.move_dir }.to raise_error('Namespace cannot be moved, because at least one project has images in container registry') }
end
end
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index b0087a9e15d..77f2ff3d17b 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -1173,10 +1173,13 @@ describe Project, models: true do
project.rename_repo
end
- context 'container registry with tags' do
+ context 'container registry with images' do
+ let(:container_image) { create(:container_image) }
+
before do
stub_container_registry_config(enabled: true)
stub_container_registry_tags('tag')
+ project.container_images << container_image
end
subject { project.rename_repo }
@@ -1383,20 +1386,20 @@ describe Project, models: true do
it { is_expected.to eq(project.path_with_namespace.downcase) }
end
- describe '#container_registry_repository' do
+ describe '#container_registry' do
let(:project) { create(:empty_project) }
before { stub_container_registry_config(enabled: true) }
- subject { project.container_registry_repository }
+ subject { project.container_registry }
it { is_expected.not_to be_nil }
end
- describe '#container_registry_repository_url' do
+ describe '#container_registry_url' do
let(:project) { create(:empty_project) }
- subject { project.container_registry_repository_url }
+ subject { project.container_registry_url }
before { stub_container_registry_config(**registry_settings) }
@@ -1422,34 +1425,6 @@ describe Project, models: true do
end
end
- describe '#has_container_registry_tags?' do
- let(:project) { create(:empty_project) }
-
- subject { project.has_container_registry_tags? }
-
- context 'for enabled registry' do
- before { stub_container_registry_config(enabled: true) }
-
- context 'with tags' do
- before { stub_container_registry_tags('test', 'test2') }
-
- it { is_expected.to be_truthy }
- end
-
- context 'when no tags' do
- before { stub_container_registry_tags }
-
- it { is_expected.to be_falsey }
- end
- end
-
- context 'for disabled registry' do
- before { stub_container_registry_config(enabled: false) }
-
- it { is_expected.to be_falsey }
- end
- end
-
describe '#latest_successful_builds_for' do
def create_pipeline(status = 'success')
create(:ci_pipeline, project: project,
diff --git a/spec/services/projects/destroy_service_spec.rb b/spec/services/projects/destroy_service_spec.rb
index 74bfba44dfd..270e630e70e 100644
--- a/spec/services/projects/destroy_service_spec.rb
+++ b/spec/services/projects/destroy_service_spec.rb
@@ -90,25 +90,30 @@ describe Projects::DestroyService, services: true do
end
context 'container registry' do
+ let(:container_image) { create(:container_image) }
+
before do
stub_container_registry_config(enabled: true)
stub_container_registry_tags('tag')
+ project.container_images << container_image
end
- context 'tags deletion succeeds' do
+ context 'images deletion succeeds' do
it do
- expect_any_instance_of(ContainerRegistry::Tag).to receive(:delete).and_return(true)
+ expect_any_instance_of(ContainerImage).to receive(:delete_tags).and_return(true)
destroy_project(project, user, {})
end
end
- context 'tags deletion fails' do
- before { expect_any_instance_of(ContainerRegistry::Tag).to receive(:delete).and_return(false) }
+ context 'images deletion fails' do
+ before do
+ expect_any_instance_of(ContainerImage).to receive(:delete_tags).and_return(false)
+ end
subject { destroy_project(project, user, {}) }
- it { expect{subject}.to raise_error(Projects::DestroyService::DestroyError) }
+ it { expect{subject}.to raise_error(ActiveRecord::RecordNotDestroyed) }
end
end
diff --git a/spec/services/projects/transfer_service_spec.rb b/spec/services/projects/transfer_service_spec.rb
index 5c6fbea8d0e..5e56226ff91 100644
--- a/spec/services/projects/transfer_service_spec.rb
+++ b/spec/services/projects/transfer_service_spec.rb
@@ -29,9 +29,12 @@ describe Projects::TransferService, services: true do
end
context 'disallow transfering of project with tags' do
+ let(:container_image) { create(:container_image) }
+
before do
stub_container_registry_config(enabled: true)
stub_container_registry_tags('tag')
+ project.container_images << container_image
end
subject { transfer_project(project, user, group) }