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
|