inspec/test/unit/resources/csv_test.rb
Adam Leff 4f2b66302d Fix ObjectTraverser when accessing array values
When attempting to access array values via the `json` resource:

```
describe json('/tmp/test.json') do
      its(['array',0]) { should eq "zero" }
end
```

... the resulting data would be an array of the size of the original array
with all the values replaced with nils:

```
     expected: "zero"
          got: [nil, nil, nil]
```

This was due to a bug in the ObjectTraverser mixin that mapped array values
back through `extract_value` rather than properly handling the passed-in
key(s). This worked fine for the specific data format created by the `csv`
resource but did not work `json` or any other resource that subclassed the
`JsonConfig` resource.

This change fixes the logic when dealing with an array when it's encountered,
and fixes up the `csv` resource with its own `value` method.

This change also adds tests for ObjectTraverser.

Signed-off-by: Adam Leff <adam@leff.co>
2017-03-15 11:35:55 +01:00

39 lines
973 B
Ruby

# encoding: utf-8
# author: Christoph Hartmann
# author: Dominik Richter
require 'helper'
require 'inspec/resource'
describe 'Inspec::Resources::CSV' do
describe 'when loading a valid csv' do
let (:resource) { load_resource('csv', 'example.csv') }
let (:params) {
{}
}
it 'captures an array of params' do
_(resource.params).must_be_kind_of Array
end
it 'gets all value lines' do
_(resource.params.length).must_equal 4
end
it 'captures a hashmap of entries of a line' do
_(resource.params[0]).must_be_kind_of Hash
end
it 'gets params by header fields' do
_(resource.params[0]['name']).must_equal 'addressable'
end
it 'retrieves nil if a param is missing' do
_(resource.params[0]['missing']).must_be_nil
end
it 'returns an array of values by column name' do
_(resource.value(['name'])).must_equal([ 'addressable', 'ast', 'astrolabe', 'berkshelf' ])
end
end
end