summaryrefslogtreecommitdiff
path: root/spec/models/ci/resource_group_spec.rb
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-01-21 14:21:10 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-01-21 14:21:10 +0000
commitcb0d23c455b73486fd1015f8ca9479b5b7e3585d (patch)
treed7dc129a407fd74266d2dc561bebf24665197c2f /spec/models/ci/resource_group_spec.rb
parentc3e911be175c0aabfea1eb030f9e0ef23f5f3887 (diff)
downloadgitlab-ce-cb0d23c455b73486fd1015f8ca9479b5b7e3585d.tar.gz
Add latest changes from gitlab-org/gitlab@12-7-stable-ee
Diffstat (limited to 'spec/models/ci/resource_group_spec.rb')
-rw-r--r--spec/models/ci/resource_group_spec.rb88
1 files changed, 88 insertions, 0 deletions
diff --git a/spec/models/ci/resource_group_spec.rb b/spec/models/ci/resource_group_spec.rb
new file mode 100644
index 00000000000..ce8b03282bc
--- /dev/null
+++ b/spec/models/ci/resource_group_spec.rb
@@ -0,0 +1,88 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Ci::ResourceGroup do
+ describe 'validation' do
+ it 'valids when key includes allowed character' do
+ resource_group = build(:ci_resource_group, key: 'test')
+
+ expect(resource_group).to be_valid
+ end
+
+ it 'invalids when key includes invalid character' do
+ resource_group = build(:ci_resource_group, key: ':::')
+
+ expect(resource_group).not_to be_valid
+ end
+ end
+
+ describe '#ensure_resource' do
+ it 'creates one resource when resource group is created' do
+ resource_group = create(:ci_resource_group)
+
+ expect(resource_group.resources.count).to eq(1)
+ expect(resource_group.resources.all?(&:persisted?)).to eq(true)
+ end
+ end
+
+ describe '#assign_resource_to' do
+ subject { resource_group.assign_resource_to(build) }
+
+ let(:build) { create(:ci_build) }
+ let(:resource_group) { create(:ci_resource_group) }
+
+ it 'retains resource for the build' do
+ expect(resource_group.resources.first.build).to be_nil
+
+ is_expected.to eq(true)
+
+ expect(resource_group.resources.first.build).to eq(build)
+ end
+
+ context 'when there are no free resources' do
+ before do
+ resource_group.assign_resource_to(create(:ci_build))
+ end
+
+ it 'fails to retain resource' do
+ is_expected.to eq(false)
+ end
+ end
+
+ context 'when the build has already retained a resource' do
+ let!(:another_resource) { create(:ci_resource, resource_group: resource_group, build: build) }
+
+ it 'fails to retain resource' do
+ expect { subject }.to raise_error(ActiveRecord::RecordNotUnique)
+ end
+ end
+ end
+
+ describe '#release_resource_from' do
+ subject { resource_group.release_resource_from(build) }
+
+ let(:build) { create(:ci_build) }
+ let(:resource_group) { create(:ci_resource_group) }
+
+ context 'when the build has already retained a resource' do
+ before do
+ resource_group.assign_resource_to(build)
+ end
+
+ it 'releases resource from the build' do
+ expect(resource_group.resources.first.build).to eq(build)
+
+ is_expected.to eq(true)
+
+ expect(resource_group.resources.first.build).to be_nil
+ end
+ end
+
+ context 'when the build has already released a resource' do
+ it 'fails to release resource' do
+ is_expected.to eq(false)
+ end
+ end
+ end
+end