55 lines
1.4 KiB
Ruby
55 lines
1.4 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
require 'spec_helper'
|
||
|
|
||
|
RSpec.describe Packages::Rpm::RepositoryMetadata::BuildFilelistXmlService do
|
||
|
describe '#execute' do
|
||
|
subject { described_class.new(data).execute }
|
||
|
|
||
|
include_context 'with rpm package data'
|
||
|
|
||
|
let(:data) { xml_update_params }
|
||
|
let(:file_xpath) { "//package/file" }
|
||
|
|
||
|
it 'adds all file nodes' do
|
||
|
result = subject
|
||
|
|
||
|
expect(result.xpath(file_xpath).count).to eq(data[:files].count)
|
||
|
end
|
||
|
|
||
|
describe 'setting type attribute' do
|
||
|
context 'when all files are directories' do
|
||
|
let(:dirs) do
|
||
|
3.times.map { generate_directory } # rubocop:disable Performance/TimesMap
|
||
|
end
|
||
|
|
||
|
let(:files) do
|
||
|
5.times.map { FFaker::Filesystem.file_name(dirs.sample) } # rubocop:disable Performance/TimesMap
|
||
|
end
|
||
|
|
||
|
let(:data) do
|
||
|
{
|
||
|
directories: dirs.map { "#{_1}/" }, # Add trailing slash as in original package
|
||
|
files: dirs + files
|
||
|
}
|
||
|
end
|
||
|
|
||
|
it 'set dir type attribute for directories only' do
|
||
|
result = subject
|
||
|
|
||
|
result.xpath(file_xpath).each do |tag|
|
||
|
if dirs.include?(tag.content)
|
||
|
expect(tag.attributes['type']&.value).to eq('dir')
|
||
|
else
|
||
|
expect(tag.attributes['type']).to be_nil
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def generate_directory
|
||
|
FFaker::Lorem.words(3).join('/')
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|