spec/lib/release_tools/helm/version_mapping_spec.rb (122 lines of code) (raw):
# frozen_string_literal: true
require 'spec_helper'
describe ReleaseTools::Helm::VersionMapping do
describe '.parse' do
context 'when the table is missing' do
it 'raises a ParseError' do
expect { described_class.parse('foo') }
.to raise_error(described_class::ParseError)
end
end
context 'when the table header separator is missing' do
it 'raises a ParseError' do
expect { described_class.parse("#{described_class::HEADER}\n") }
.to raise_error(described_class::ParseError)
end
end
context 'when a row is missing a Helm version' do
it 'raises a ParseError' do
input = <<~MARKDOWN
#{described_class::HEADER}
#{described_class::DIVIDER}
| | 1.0.0 |
MARKDOWN
expect { described_class.parse(input) }
.to raise_error(described_class::ParseError)
end
end
context 'when a row is missing a GitLab version' do
it 'raises a ParseError' do
input = <<~MARKDOWN
#{described_class::HEADER}
#{described_class::DIVIDER}
| 1.0.0 | |
MARKDOWN
expect { described_class.parse(input) }
.to raise_error(described_class::ParseError)
end
end
context 'when the table is valid' do
it 'parses the table into a VersionMapping instance' do
input = <<~MARKDOWN
foo
#{described_class::HEADER}
#{described_class::DIVIDER}
| 1.0.0 | 2.0.0 |
bar
MARKDOWN
mapping = described_class.parse(input)
expect(mapping.start).to eq(2)
expect(mapping.stop).to eq(4)
expect(mapping.lines).to be_frozen
expect(mapping.lines).to eq(
[
'foo',
'',
described_class::HEADER,
described_class::DIVIDER,
'| 1.0.0 | 2.0.0 |',
'',
'bar'
]
)
expect(mapping.rows.length).to eq(1)
expect(mapping.rows[0].helm_version)
.to eq(ReleaseTools::Version.new('1.0.0'))
expect(mapping.rows[0].gitlab_version)
.to eq(ReleaseTools::Version.new('2.0.0'))
end
end
end
describe '#add' do
context 'when the Helm version has not yet been added' do
it 'adds a new row' do
mapping = described_class.new(lines: [], rows: [], start: 0, stop: 0)
mapping.add(
ReleaseTools::Version.new('1.0.0'),
ReleaseTools::Version.new('2.0.0')
)
expect(mapping.rows.length).to eq(1)
expect(mapping.rows[0].helm_version)
.to eq(ReleaseTools::Version.new('1.0.0'))
expect(mapping.rows[0].gitlab_version)
.to eq(ReleaseTools::Version.new('2.0.0'))
end
end
context 'when a Helm version has already been added' do
it 'updates the GitLab version' do
mapping = described_class.new(lines: [], rows: [], start: 0, stop: 0)
mapping.add(
ReleaseTools::Version.new('1.0.0'),
ReleaseTools::Version.new('2.0.0')
)
mapping.add(
ReleaseTools::Version.new('1.0.0'),
ReleaseTools::Version.new('5.0.0')
)
expect(mapping.rows.length).to eq(1)
expect(mapping.rows[0].gitlab_version)
.to eq(ReleaseTools::Version.new('5.0.0'))
end
end
end
describe '#to_s' do
it 'converts the mapping back to Markdown' do
input = <<~MARKDOWN
foo
#{described_class::HEADER}
#{described_class::DIVIDER}
| 1.0.0 | 2.0.0 |
bar
MARKDOWN
output = <<~MARKDOWN
foo
#{described_class::HEADER}
#{described_class::DIVIDER}
| 2.0.0 | 3.0.0 |
| 1.0.0 | 2.0.0 |
| 0.1.0 | 1.0.0 |
bar
MARKDOWN
mapping = described_class.parse(input)
mapping.add(
ReleaseTools::Version.new('0.1.0'),
ReleaseTools::Version.new('1.0.0')
)
mapping.add(
ReleaseTools::Version.new('2.0.0'),
ReleaseTools::Version.new('3.0.0')
)
expect(mapping.to_s).to eq(output)
end
end
end