diff options
Diffstat (limited to 'spec/services')
| -rw-r--r-- | spec/services/zip_service/regression_4273_spec.rb | 59 | ||||
| -rw-r--r-- | spec/services/zip_service_spec.rb | 68 | 
2 files changed, 68 insertions, 59 deletions
| diff --git a/spec/services/zip_service/regression_4273_spec.rb b/spec/services/zip_service/regression_4273_spec.rb deleted file mode 100644 index 4fe0f6539..000000000 --- a/spec/services/zip_service/regression_4273_spec.rb +++ /dev/null @@ -1,59 +0,0 @@ -RSpec.describe ZipService do -  describe 'Regression Issue # 4273 https://projects.af83.io/issues/4273' do -    let( :zip_service ){ described_class } -    let( :unzipper ){ zip_service.new(zip_data) } -    let( :zip_data ){ File.read zip_file } - -    context 'real test data' do -      let( :subdir_names ){ %w<OFFRE_TRANSDEV_20170301122517 OFFRE_TRANSDEV_20170301122519>  } -      let( :expected_chksums ){ -        checksum_trees( subdir_names.map{ |sn| subdir_file(sn, prefix: 'source_') } ) -      } - -      let( :zip_file ){ fixtures_path 'OFFRE_TRANSDEV_2017030112251.zip' } -      # -      # Remove potential test artefacts -      before do -        subdir_names.each do | subdir_name | -          File.unlink( subdir_file subdir_name, suffix: '.zip' ) rescue nil -          Dir.unlink( subdir_file subdir_name ) rescue nil -        end -      end - -      it "yields the correct content" do -        subdir_contents = {} -        # Write ZipService Streams to files and inflate them to file system -        unzipper.subdirs.each do | subdir | -          File.open(subdir_file( subdir.name, suffix: '.zip' ), 'wb'){ |f| f.write subdir.stream.string } -          unzip_subdir subdir -        end -        # Represent the inflated file_system as a checksum tree -        actual_checksums =  -          checksum_trees( subdir_names.map{ |sn| subdir_file(sn, prefix: 'target/') } ) -        expect( actual_checksums ).to eq( expected_chksums ) -      end - -    end - -  end - -  def checksum_trees *dirs -    dirs.flatten.inject({},&method(:checksum_tree)) -  end -  def checksum_tree repr, dir -    Dir.glob("#{dir}/**/*").each do |file| -      if !File.directory?(file) -        repr.merge!( File.basename(file) => %x{cksum #{file}}.split.first ){ |_, ov, nv| Array(ov) << nv } -      end -    end -    repr -  end - -  def subdir_file( subdir, prefix: 'target_', suffix: '' ) -    fixtures_path("#{prefix}#{subdir}#{suffix}") -  end - -  def unzip_subdir subdir -    %x{unzip -oqq #{subdir_file subdir.name, suffix: '.zip'} -d #{fixture_path}/target} -  end -end diff --git a/spec/services/zip_service_spec.rb b/spec/services/zip_service_spec.rb new file mode 100644 index 000000000..98cb9026d --- /dev/null +++ b/spec/services/zip_service_spec.rb @@ -0,0 +1,68 @@ +RSpec.describe ZipService do + +  let( :zip_service ){ described_class } +  let( :unzipper ){ zip_service.new(zip_data) } +  let( :zip_data ){ File.read zip_file } + + +  context 'correct test data' do +    before do +      subdir_names.each do | subdir_name | +        File.unlink( subdir_file subdir_name, suffix: '.zip' ) rescue nil +        Dir.unlink( subdir_file subdir_name ) rescue nil +      end +    end +    let( :subdir_names ){ %w<OFFRE_TRANSDEV_20170301122517 OFFRE_TRANSDEV_20170301122519>  } +    let( :expected_chksums ){ +      checksum_trees( subdir_names.map{ |sn| subdir_file(sn, prefix: 'source_') } ) +    } + +    let( :zip_file ){ fixtures_path 'OFFRE_TRANSDEV_2017030112251.zip' } +    # +    # Remove potential test artefacts + +    it 'yields the correct content' do +      # Write ZipService Streams to files and inflate them to file system +      unzipper.subdirs.each do | subdir | +        expect( subdir.spurious ).to be_empty +        File.open(subdir_file( subdir.name, suffix: '.zip' ), 'wb'){ |f| f.write subdir.stream.string } +        unzip_subdir subdir +      end +      # Represent the inflated file_system as a checksum tree +      actual_checksums =  +        checksum_trees( subdir_names.map{ |sn| subdir_file(sn, prefix: 'target/') } ) +      expect( actual_checksums ).to eq( expected_chksums ) +    end + +  end + +  context 'test data with spurious directories' do  +    let( :zip_file ){ fixtures_path 'OFFRE_WITH_EXTRA.zip' } + +    it 'returns the extra dir in the spurious field of the entry' do +      expect( unzipper.subdirs.first.spurious ).to eq(%w{EXTRA}) +    end +  end + + +  def checksum_trees *dirs +    dirs.flatten.inject({},&method(:checksum_tree)) +  end +  def checksum_tree repr, dir +    Dir.glob("#{dir}/**/*").each do |file| +      if !File.directory?(file) +        repr.merge!( File.basename(file) => %x{cksum #{file}}.split.first ){ |_, ov, nv| Array(ov) << nv } +      end +    end +    repr +  end + +  def subdir_file( subdir, prefix: 'target_', suffix: '' ) +    fixtures_path("#{prefix}#{subdir}#{suffix}") +  end + +  def unzip_subdir subdir +    %x{unzip -oqq #{subdir_file subdir.name, suffix: '.zip'} -d #{fixture_path}/target} +  end +end + | 
