Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-03-23 16:37:17 +0300
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-03-23 16:37:17 +0300
commitf451173a191474be681d208eceb6a0148ba2c0d0 (patch)
treef72134816e48c14b0ca0e6a56817090cd031b2ef /spec/models/container_repository_spec.rb
parentea16ea5bfcb78f66c6bb37e470d387bf1ac26c9f (diff)
Fix specs for container repository model class
Diffstat (limited to 'spec/models/container_repository_spec.rb')
-rw-r--r--spec/models/container_repository_spec.rb96
1 files changed, 96 insertions, 0 deletions
diff --git a/spec/models/container_repository_spec.rb b/spec/models/container_repository_spec.rb
new file mode 100644
index 00000000000..3997c4ca682
--- /dev/null
+++ b/spec/models/container_repository_spec.rb
@@ -0,0 +1,96 @@
+require 'spec_helper'
+
+describe ContainerRepository do
+ let(:group) { create(:group, name: 'group') }
+ let(:project) { create(:project, path: 'test', group: group) }
+
+ let(:container_repository) do
+ create(:container_repository, name: 'my_image', project: project)
+ end
+
+ before do
+ stub_container_registry_config(enabled: true,
+ api_url: 'http://registry.gitlab',
+ host_port: 'registry.gitlab')
+
+ stub_request(:get, 'http://registry.gitlab/v2/group/test/my_image/tags/list')
+ .with(headers: {
+ 'Accept' => 'application/vnd.docker.distribution.manifest.v2+json' })
+ .to_return(
+ status: 200,
+ body: JSON.dump(tags: ['test_tag']),
+ headers: { 'Content-Type' => 'application/json' })
+ end
+
+ describe 'associations' do
+ it 'belongs to the project' do
+ expect(container_repository).to belong_to(:project)
+ end
+ end
+
+ describe '#tag' do
+ it 'has a test tag' do
+ expect(container_repository.tag('test')).not_to be_nil
+ end
+ end
+
+ describe '#path' do
+ it 'returns a full path to the repository' do
+ expect(container_repository.path).to eq('group/test/my_image')
+ end
+ end
+
+ describe '#manifest' do
+ subject { container_repository.manifest }
+
+ it { is_expected.not_to be_nil }
+ end
+
+ describe '#valid?' do
+ subject { container_repository.valid? }
+
+ it { is_expected.to be_truthy }
+ end
+
+ describe '#tags' do
+ subject { container_repository.tags }
+
+ it { is_expected.not_to be_empty }
+ end
+
+ # TODO, improve these specs
+ #
+ describe '#delete_tags' do
+ let(:tag) { ContainerRegistry::Tag.new(container_repository, 'tag') }
+
+ before do
+ allow(container_repository).to receive(:tags).twice.and_return([tag])
+ allow(tag).to receive(:digest)
+ .and_return('sha256:4c8e63ca4cb663ce6c688cb06f1c3672a172b088dac5b6d7ad7d49cd620d85cf')
+ end
+
+ context 'when action succeeds' do
+ before do
+ allow(container_repository.client)
+ .to receive(:delete_repository_tag)
+ .and_return(true)
+ end
+
+ it 'returns status that indicates success' do
+ expect(container_repository.delete_tags).to be_truthy
+ end
+ end
+
+ context 'when action fails' do
+ before do
+ allow(container_repository.client)
+ .to receive(:delete_repository_tag)
+ .and_return(false)
+ end
+
+ it 'returns status that indicates failure' do
+ expect(container_repository.delete_tags).to be_falsey
+ end
+ end
+ end
+end