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:
Diffstat (limited to 'spec/models/release_spec.rb')
-rw-r--r--spec/models/release_spec.rb68
1 files changed, 68 insertions, 0 deletions
diff --git a/spec/models/release_spec.rb b/spec/models/release_spec.rb
index 164cef95cb6..bff9f73e44a 100644
--- a/spec/models/release_spec.rb
+++ b/spec/models/release_spec.rb
@@ -39,6 +39,24 @@ RSpec.describe Release, feature_category: :release_orchestration do
end
end
+ describe 'scopes' do
+ let_it_be(:another_project) { create(:project) }
+ let_it_be(:release) { create(:release, project: project, author: user, tag: 'v1') }
+ let_it_be(:another_release) { create(:release, project: another_project, tag: 'v2') }
+
+ describe '.for_projects' do
+ it 'returns releases for the given projects' do
+ expect(described_class.for_projects([project])).to eq([release])
+ end
+ end
+
+ describe '.by_tag' do
+ it 'returns releases with the given tag' do
+ expect(described_class.by_tag(release.tag)).to eq([release])
+ end
+ end
+ end
+
context 'when description of a release is longer than the limit' do
let(:description) { 'a' * (Gitlab::Database::MAX_TEXT_SIZE_LIMIT + 1) }
let(:release) { build(:release, project: project, description: description) }
@@ -86,6 +104,56 @@ RSpec.describe Release, feature_category: :release_orchestration do
end
end
+ describe '#update_catalog_resource' do
+ let_it_be(:project) { create(:project) }
+ let_it_be_with_refind(:release) { create(:release, project: project, author: user) }
+
+ context 'when the project is a catalog resource' do
+ before_all do
+ create(:ci_catalog_resource, project: project)
+ end
+
+ context 'when released_at is updated' do
+ it 'calls update_catalog_resource' do
+ expect(release).to receive(:update_catalog_resource).once
+
+ release.update!(released_at: release.released_at + 1.day)
+ end
+ end
+
+ context 'when the release is destroyed' do
+ it 'calls update_catalog_resource' do
+ expect(release).to receive(:update_catalog_resource).once
+
+ release.destroy!
+ end
+ end
+ end
+
+ context 'when the project is not a catalog resource' do
+ it 'does not call update_catalog_resource' do
+ expect(release).not_to receive(:update_catalog_resource)
+
+ release.update!(released_at: release.released_at + 1.day)
+ release.destroy!
+ end
+ end
+ end
+
+ describe 'tagged' do
+ # We only test for empty string since there's a not null constraint at the database level
+ it 'does not return the tagless release' do
+ empty_string_tag = create(:release, tag: 'v99.0.0')
+ empty_string_tag.update_column(:tag, '')
+
+ expect(described_class.tagged).not_to include(empty_string_tag)
+ end
+
+ it 'does return the tagged releases' do
+ expect(described_class.tagged).to include(release)
+ end
+ end
+
describe 'latest releases' do
let_it_be(:yesterday) { Time.zone.now - 1.day }
let_it_be(:tomorrow) { Time.zone.now + 1.day }