diff options
| author | Robert | 2017-07-23 22:56:12 +0200 | 
|---|---|---|
| committer | Robert | 2017-07-25 21:31:51 +0200 | 
| commit | fe46c7832fa1e0c6af450f0937aea3534c0f6b01 (patch) | |
| tree | 60670a6ac730a081c3627f25a44c0bd78ea90d3a /spec/services | |
| parent | 384a06676b8e0985f39fbc894a2d7dd458823529 (diff) | |
| download | chouette-core-fe46c7832fa1e0c6af450f0937aea3534c0f6b01.tar.bz2 | |
Refs: #3507;20h Specing and Implementing the ZipService
Diffstat (limited to 'spec/services')
| -rw-r--r-- | spec/services/file_service_spec.rb | 16 | ||||
| -rw-r--r-- | spec/services/zip_service/zip_entry_data_spec.rb | 35 | ||||
| -rw-r--r-- | spec/services/zip_service/zip_entry_dirs_spec.rb | 33 | ||||
| -rw-r--r-- | spec/services/zip_service/zip_output_streams_spec.rb | 17 | 
4 files changed, 101 insertions, 0 deletions
| diff --git a/spec/services/file_service_spec.rb b/spec/services/file_service_spec.rb new file mode 100644 index 000000000..90e164408 --- /dev/null +++ b/spec/services/file_service_spec.rb @@ -0,0 +1,16 @@ +RSpec.describe FileService do + +  it 'computes a unique filename' do +    expect( File ).to receive(:exists?).with('xxx/yyy_0').and_return( false ) + +    expect(described_class.unique_filename('xxx/yyy')).to eq('xxx/yyy_0') +  end + +  it 'handles duplicate names by means of a counter' do +    expect( File ).to receive(:exists?).with('xxx/yyy_0').and_return( true ) +    expect( File ).to receive(:exists?).with('xxx/yyy_1').and_return( true ) +    expect( File ).to receive(:exists?).with('xxx/yyy_2').and_return( false ) + +    expect(described_class.unique_filename('xxx/yyy')).to eq('xxx/yyy_2') +  end +end diff --git a/spec/services/zip_service/zip_entry_data_spec.rb b/spec/services/zip_service/zip_entry_data_spec.rb new file mode 100644 index 000000000..6bfaa8cc4 --- /dev/null +++ b/spec/services/zip_service/zip_entry_data_spec.rb @@ -0,0 +1,35 @@ +RSpec.describe ZipService do + +  subject{ described_class.new(read_fixture('multiref.zip')) } + +  let( :ref1_zipdata ){ read_fixture('ref1.zip') } +  let( :ref2_zipdata ){ read_fixture('ref2.zip') } + +  it 'can group all entries' do +    expect( subject.entry_groups.keys ).to eq(%w{ref1 ref2}) +  end + +  context 'creates correct zip data for each subdir' do +    it 'e.g. ref1' do +      ref1_stream = subject.entry_group_streams['ref1'] +      control_stream = Zip::InputStream.open( ref1_stream ) +      control_entries = described_class.entries(control_stream) +      expect( control_entries.map{ |e| [e.name, e.get_input_stream.read]}.force ).to eq([ +        ["multiref/ref1/", ""], +        ["multiref/ref1/datum-1", "multi-ref1-datum1\n"], +        ["multiref/ref1/datum-2", "multi-ref1-datum2\n"] +      ]) +    end +    it 'e.g. ref2' do +      ref2_stream = subject.entry_group_streams['ref2'] +      control_stream = Zip::InputStream.open( ref2_stream ) +      control_entries = described_class.entries(control_stream) +      expect( control_entries.map{ |e| [e.name, e.get_input_stream.read]}.force ).to eq([ +        ["multiref/ref2/", ""], +        ["multiref/ref2/datum-1", "multi-ref2-datum1\n"], +        ["multiref/ref2/datum-2", "multi-ref2-datum2\n"] +      ]) +    end +  end + +end diff --git a/spec/services/zip_service/zip_entry_dirs_spec.rb b/spec/services/zip_service/zip_entry_dirs_spec.rb new file mode 100644 index 000000000..cf927855f --- /dev/null +++ b/spec/services/zip_service/zip_entry_dirs_spec.rb @@ -0,0 +1,33 @@ +RSpec.describe ZipService do + +  let( :zip_service ){ described_class } + +  let( :zip_data ){ File.read zip_file } + +  shared_examples_for 'a correct zip entry reader' do +    it 'gets all entries of the zip file' do +      expect( zip_service.new(zip_data).entry_groups.keys ).to eq(expected) +    end +  end + +  context 'single entry' do +    let( :zip_file ){ fixtures_path 'multiref.zip' } +    let( :expected ){ %w{ref1 ref2} } + +    it_behaves_like 'a correct zip entry reader' +  end + +  context 'more entries' do +    let( :zip_file ){ fixtures_path 'singleref.zip' } +    let( :expected ){ %w{ref} } + +    it_behaves_like 'a correct zip entry reader' +  end +   +  context 'illegal file' do +    let( :zip_file ){ fixtures_path 'nozip.zip' } +    let( :expected ){ [] } + +    it_behaves_like 'a correct zip entry reader' +  end +end diff --git a/spec/services/zip_service/zip_output_streams_spec.rb b/spec/services/zip_service/zip_output_streams_spec.rb new file mode 100644 index 000000000..0b7a1e99b --- /dev/null +++ b/spec/services/zip_service/zip_output_streams_spec.rb @@ -0,0 +1,17 @@ +RSpec.describe ZipService do +   +  subject{ described_class.new(read_fixture('multiref.zip')) } + +   +  it 'can write itself to a file' do +    streams = subject.entry_group_streams +    streams.each do | name, stream | +      File.write("tmp/#{name}.zip", stream.string) +    end +    ref1_lines = %x(unzip -l tmp/ref1.zip).split("\n").grep(%r{multiref/ref}).map(&:strip).map(&:split).map(&:last) +    ref2_lines = %x(unzip -l tmp/ref2.zip).split("\n").grep(%r{multiref/ref}).map(&:strip).map(&:split).map(&:last) + +    expect( ref1_lines ).to eq %w(multiref/ref1/ multiref/ref1/datum-1 multiref/ref1/datum-2) +    expect( ref2_lines ).to eq %w(multiref/ref2/ multiref/ref2/datum-1 multiref/ref2/datum-2) +  end +end | 
