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 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
|
require 'spec_helper'
require 'semantic_puppet/dependency/module_release'
describe SemanticPuppet::Dependency::ModuleRelease do
def source
@source ||= SemanticPuppet::Dependency::Source.new
end
def make_release(name, version, deps = {})
source.create_release(name, version, deps)
end
let(:no_dependencies) do
make_release('module', '1.2.3')
end
let(:one_dependency) do
make_release('module', '1.2.3', 'foo' => '1.0.0')
end
let(:three_dependencies) do
dependencies = { 'foo' => '1.0.0', 'bar' => '2.0.0', 'baz' => '3.0.0' }
make_release('module', '1.2.3', dependencies)
end
describe '#dependency_names' do
it "lists the names of all the release's dependencies" do
expect(no_dependencies.dependency_names).to match_array %w[]
expect(one_dependency.dependency_names).to match_array %w[foo]
expect(three_dependencies.dependency_names).to match_array %w[foo bar baz]
end
end
describe '#to_s' do
let(:name) { 'foobarbaz' }
let(:version) { '1.2.3' }
subject { make_release(name, version).to_s }
it { should =~ /#{name}/ }
it { should =~ /#{version}/ }
end
describe '#<<' do
it 'marks matching dependencies as satisfied' do
one_dependency << make_release('foo', '1.0.0')
expect(one_dependency).to be_satisfied
end
it 'does not mark mis-matching dependency names as satisfied' do
one_dependency << make_release('WAT', '1.0.0')
expect(one_dependency).to_not be_satisfied
end
it 'does not mark mis-matching dependency versions as satisfied' do
one_dependency << make_release('foo', '0.0.1')
expect(one_dependency).to_not be_satisfied
end
end
describe '#<=>' do
it 'considers releases with greater version numbers greater' do
expect(make_release('foo', '1.0.0')).to be > make_release('foo', '0.1.0')
end
it 'considers releases with lesser version numbers lesser' do
expect(make_release('foo', '0.1.0')).to be < make_release('foo', '1.0.0')
end
it 'orders releases with different names lexographically' do
expect(make_release('bar', '1.0.0')).to be < make_release('foo', '1.0.0')
end
it 'orders releases by name first' do
expect(make_release('bar', '2.0.0')).to be < make_release('foo', '1.0.0')
end
end
describe '#==' do
it 'considers two equal releases to be equal' do
expect(make_release('foo', '1.0.0')).to eql(make_release('foo', '1.0.0'))
end
it 'considers two releases with different names to be different' do
expect(make_release('foo', '1.0.0')).not_to eql(make_release('bar', '1.0.0'))
end
it 'considers two releases with different versions to be different' do
expect(make_release('foo', '1.0.0')).not_to eql(make_release('foo', '1.0.1'))
end
it 'can compare a release with something that is not a release' do
expect { make_release('foo', '1.0.0') == 5 }.not_to raise_error
end
it 'considers a release different from something that is not a release' do
expect(make_release('foo', '1.0.0') == 5).to be false
end
end
describe '#satisfied?' do
it 'returns true when there are no dependencies to satisfy' do
expect(no_dependencies).to be_satisfied
end
it 'returns false when no dependencies have been satisified' do
expect(one_dependency).to_not be_satisfied
end
it 'returns false when not all dependencies have been satisified' do
releases = %w[ 0.9.0 1.0.0 1.0.1 ].map { |ver| make_release('foo', ver) }
three_dependencies << releases
expect(three_dependencies).to_not be_satisfied
end
it 'returns false when not all dependency versions have been satisified' do
releases = %w[ 0.9.0 1.0.1 ].map { |ver| make_release('foo', ver) }
one_dependency << releases
expect(one_dependency).to_not be_satisfied
end
it 'returns true when all dependencies have been satisified' do
releases = %w[ 0.9.0 1.0.0 1.0.1 ].map { |ver| make_release('foo', ver) }
one_dependency << releases
expect(one_dependency).to be_satisfied
end
end
describe '#satisfies_dependency?' do
it 'returns false when there are no dependencies to satisfy' do
release = make_release('foo', '1.0.0')
expect(no_dependencies.satisfies_dependency?(release)).to_not be true
end
it 'returns false when the release does not match the dependency name' do
release = make_release('bar', '1.0.0')
expect(one_dependency.satisfies_dependency?(release)).to_not be true
end
it 'returns false when the release does not match the dependency version' do
release = make_release('foo', '4.0.0')
expect(one_dependency.satisfies_dependency?(release)).to_not be true
end
it 'returns true when the release matches the dependency' do
release = make_release('foo', '1.0.0')
expect(one_dependency.satisfies_dependency?(release)).to be true
end
end
end
|