diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-07-20 12:26:25 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-07-20 12:26:25 +0000 |
commit | a09983ae35713f5a2bbb100981116d31ce99826e (patch) | |
tree | 2ee2af7bd104d57086db360a7e6d8c9d5d43667a /spec/models/packages/tag_spec.rb | |
parent | 18c5ab32b738c0b6ecb4d0df3994000482f34bd8 (diff) | |
download | gitlab-ce-a09983ae35713f5a2bbb100981116d31ce99826e.tar.gz |
Add latest changes from gitlab-org/gitlab@13-2-stable-ee
Diffstat (limited to 'spec/models/packages/tag_spec.rb')
-rw-r--r-- | spec/models/packages/tag_spec.rb | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/spec/models/packages/tag_spec.rb b/spec/models/packages/tag_spec.rb new file mode 100644 index 00000000000..18ec99c3d51 --- /dev/null +++ b/spec/models/packages/tag_spec.rb @@ -0,0 +1,62 @@ +# frozen_string_literal: true +require 'spec_helper' + +RSpec.describe Packages::Tag, type: :model do + let!(:project) { create(:project) } + let!(:package) { create(:npm_package, version: '1.0.2', project: project, updated_at: 3.days.ago) } + + describe 'relationships' do + it { is_expected.to belong_to(:package).inverse_of(:tags) } + end + + describe 'validations' do + subject { create(:packages_tag) } + + it { is_expected.to validate_presence_of(:package) } + it { is_expected.to validate_presence_of(:name) } + end + + describe '.for_packages' do + let(:package2) { create(:package, project: project, updated_at: 2.days.ago) } + let(:package3) { create(:package, project: project, updated_at: 1.day.ago) } + let!(:tag1) { create(:packages_tag, package: package) } + let!(:tag2) { create(:packages_tag, package: package2) } + let!(:tag3) { create(:packages_tag, package: package3) } + + subject { described_class.for_packages(project.packages) } + + it { is_expected.to match_array([tag1, tag2, tag3]) } + + context 'with too many tags' do + before do + stub_const('Packages::Tag::FOR_PACKAGES_TAGS_LIMIT', 2) + end + + it { is_expected.to match_array([tag2, tag3]) } + end + end + + describe '.with_name' do + let_it_be(:package) { create(:package) } + let_it_be(:tag1) { create(:packages_tag, package: package, name: 'tag1') } + let_it_be(:tag2) { create(:packages_tag, package: package, name: 'tag2') } + let_it_be(:tag3) { create(:packages_tag, package: package, name: 'tag3') } + let(:name) { 'tag1' } + + subject { described_class.with_name(name) } + + it { is_expected.to contain_exactly(tag1) } + + context 'with nil name' do + let(:name) { nil } + + it { is_expected.to eq([]) } + end + + context 'with multiple names' do + let(:name) { %w(tag1 tag3) } + + it { is_expected.to contain_exactly(tag1, tag3) } + end + end +end |