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

version_spec.rb « resources « catalog « ci « models « spec - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 7114d2b67093fa150e4e6a209d7fedc0c11ac14a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe Ci::Catalog::Resources::Version, type: :model, feature_category: :pipeline_composition do
  include_context 'when there are catalog resources with versions'

  it { is_expected.to belong_to(:release) }
  it { is_expected.to belong_to(:catalog_resource).class_name('Ci::Catalog::Resource') }
  it { is_expected.to belong_to(:project) }
  it { is_expected.to have_many(:components).class_name('Ci::Catalog::Resources::Component') }

  it { is_expected.to delegate_method(:name).to(:release) }
  it { is_expected.to delegate_method(:description).to(:release) }
  it { is_expected.to delegate_method(:tag).to(:release) }
  it { is_expected.to delegate_method(:sha).to(:release) }
  it { is_expected.to delegate_method(:released_at).to(:release) }
  it { is_expected.to delegate_method(:author_id).to(:release) }

  describe 'validations' do
    it { is_expected.to validate_presence_of(:release) }
    it { is_expected.to validate_presence_of(:catalog_resource) }
    it { is_expected.to validate_presence_of(:project) }
  end

  describe '.for_catalog resources' do
    it 'returns versions for the given catalog resources' do
      versions = described_class.for_catalog_resources([resource1, resource2])

      expect(versions).to match_array([v1_0, v1_1, v2_0, v2_1])
    end
  end

  describe '.order_by_created_at_asc' do
    it 'returns versions ordered by created_at ascending' do
      versions = described_class.order_by_created_at_asc

      expect(versions).to eq([v2_1, v2_0, v1_1, v1_0])
    end
  end

  describe '.order_by_created_at_desc' do
    it 'returns versions ordered by created_at descending' do
      versions = described_class.order_by_created_at_desc

      expect(versions).to eq([v1_0, v1_1, v2_0, v2_1])
    end
  end

  describe '.order_by_released_at_asc' do
    it 'returns versions ordered by released_at ascending' do
      versions = described_class.order_by_released_at_asc

      expect(versions).to eq([v1_0, v1_1, v2_0, v2_1])
    end
  end

  describe '.order_by_released_at_desc' do
    it 'returns versions ordered by released_at descending' do
      versions = described_class.order_by_released_at_desc

      expect(versions).to eq([v2_1, v2_0, v1_1, v1_0])
    end
  end

  describe '.latest' do
    subject { described_class.latest }

    it 'returns the latest version by released date' do
      is_expected.to eq(v2_1)
    end

    context 'when there are no versions' do
      it 'returns nil' do
        resource1.versions.delete_all(:delete_all)
        resource2.versions.delete_all(:delete_all)

        is_expected.to be_nil
      end
    end
  end

  describe '.latest_for_catalog resources' do
    subject { described_class.latest_for_catalog_resources([resource1, resource2]) }

    it 'returns the latest version for each catalog resource' do
      is_expected.to match_array([v1_1, v2_1])
    end

    context 'when one catalog resource does not have versions' do
      it 'returns the latest version of only the catalog resource with versions' do
        resource1.versions.delete_all(:delete_all)

        is_expected.to match_array([v2_1])
      end
    end

    context 'when no catalog resource has versions' do
      it 'returns empty response' do
        resource1.versions.delete_all(:delete_all)
        resource2.versions.delete_all(:delete_all)

        is_expected.to be_empty
      end
    end
  end
end