mirror of
https://github.com/inspec/inspec
synced 2025-02-16 22:18:38 +00:00
Add tests for lazy_instance
Signed-off-by: Clinton Wolfe <clintoncwolfe@gmail.com>
This commit is contained in:
parent
07545a8058
commit
db1b5abaa3
2 changed files with 49 additions and 10 deletions
|
@ -13,6 +13,8 @@ end
|
|||
# lazy_2 populates with a constant symbol but encounters a collision
|
||||
# lazy_3 increments on each call
|
||||
# lazy_4 throws an exception on call
|
||||
# lazy_5 increments on each call via a lazy_instance hook set with a lambda
|
||||
# lazy_6 increments on each call via a lazy_instance hook set with a Symbol ref to an instance method
|
||||
|
||||
control '2370_where_block' do
|
||||
desc 'When we call where as a block, lazy columns should load if referenced'
|
||||
|
@ -24,14 +26,26 @@ control '2370_where_block' do
|
|||
describe lazy_loader(fresh_data.call).where { lazy_3 == 1 } do
|
||||
its('count') { should cmp 1 }
|
||||
its('lazy_3s.first') { should cmp 1 }
|
||||
its('resource.lazy_3_call_count') { should == 3 }
|
||||
its('resource.lazy_3_call_count') { should == 3 }
|
||||
end
|
||||
|
||||
describe lazy_loader(fresh_data.call).where { lazy_5 == 1 } do
|
||||
its('count') { should cmp 1 }
|
||||
its('lazy_5s.first') { should cmp 1 }
|
||||
its('resource.lazy_5_call_count') { should == 3 }
|
||||
end
|
||||
|
||||
describe lazy_loader(fresh_data.call).where { lazy_6 == 1 } do
|
||||
its('count') { should cmp 1 }
|
||||
its('lazy_6s.first') { should cmp 1 }
|
||||
its('resource.lazy_6_call_count') { should == 3 }
|
||||
end
|
||||
end
|
||||
|
||||
control '2370_where_block_only_referenced' do
|
||||
desc 'When we call where as a block, lazy columns should not load unless referenced'
|
||||
describe lazy_loader(fresh_data.call).where { color == :red } do
|
||||
[ :lazy_1, :lazy_2, :lazy_3, :lazy_4 ].each do |lazy_field|
|
||||
[ :lazy_1, :lazy_2, :lazy_3, :lazy_4, :lazy_5, :lazy_6 ].each do |lazy_field|
|
||||
its('raw_data.first.keys') { should_not include lazy_field }
|
||||
end
|
||||
end
|
||||
|
@ -47,14 +61,26 @@ control '2370_where_method' do
|
|||
describe lazy_loader(fresh_data.call).where(lazy_3: 1) do
|
||||
its('count') { should cmp 1 }
|
||||
its('lazy_3s.first') { should cmp 1 }
|
||||
its('resource.lazy_3_call_count') { should == 3 }
|
||||
its('resource.lazy_3_call_count') { should == 3 }
|
||||
end
|
||||
|
||||
describe lazy_loader(fresh_data.call).where(lazy_5: 1) do
|
||||
its('count') { should cmp 1 }
|
||||
its('lazy_5s.first') { should cmp 1 }
|
||||
its('resource.lazy_5_call_count') { should == 3 }
|
||||
end
|
||||
|
||||
describe lazy_loader(fresh_data.call).where(lazy_6: 1) do
|
||||
its('count') { should cmp 1 }
|
||||
its('lazy_6s.first') { should cmp 1 }
|
||||
its('resource.lazy_6_call_count') { should == 3 }
|
||||
end
|
||||
end
|
||||
|
||||
control '2370_where_method_only_referenced' do
|
||||
desc 'When we call where as a method, lazy columns should not load unless referenced'
|
||||
describe lazy_loader(fresh_data.call).where(color: :red) do
|
||||
[ :lazy_1, :lazy_2, :lazy_3, :lazy_4 ].each do |lazy_field|
|
||||
[ :lazy_1, :lazy_2, :lazy_3, :lazy_4, :lazy_5, :lazy_6 ].each do |lazy_field|
|
||||
its('params.first.keys') { should_not include lazy_field }
|
||||
end
|
||||
end
|
||||
|
@ -72,7 +98,7 @@ end
|
|||
control '2370_no_side_populate' do
|
||||
desc 'When we trigger a populate on one column, it should not trigger a populate on another column.'
|
||||
describe lazy_loader(fresh_data.call).where( lazy_1: :lazy_1_loaded ) do
|
||||
[ :lazy_2, :lazy_3, :lazy_4 ].each do |lazy_field|
|
||||
[ :lazy_2, :lazy_3, :lazy_4, :lazy_5, :lazy_6 ].each do |lazy_field|
|
||||
its('params.first.keys') { should_not include lazy_field }
|
||||
end
|
||||
end
|
||||
|
@ -114,6 +140,8 @@ control '2370_no_rows' do
|
|||
desc 'When the data has no rows, the lazy populator should not get called'
|
||||
describe lazy_loader([]).where { lazy_3 } do
|
||||
its('resource.lazy_3_call_count') { should be_zero }
|
||||
its('resource.lazy_5_call_count') { should be_zero }
|
||||
its('resource.lazy_6_call_count') { should be_zero }
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -3,22 +3,33 @@ class LazyLoader < Inspec.resource(1)
|
|||
|
||||
attr_reader :plain_data
|
||||
attr_accessor :lazy_3_call_count
|
||||
attr_accessor :lazy_5_call_count
|
||||
attr_accessor :lazy_6_call_count
|
||||
|
||||
def initialize(provided_data)
|
||||
@plain_data = provided_data
|
||||
@lazy_3_call_count = 0
|
||||
@lazy_5_call_count = 0
|
||||
@lazy_6_call_count = 0
|
||||
end
|
||||
|
||||
filter_table_generator = FilterTable.create
|
||||
filter_table_generator.add_accessor(:where)
|
||||
filter_table_generator.add_accessor(:where)
|
||||
filter_table_generator.add_accessor(:entries)
|
||||
filter_table_generator.add(:exists?) { |table| !table.entries.empty? }
|
||||
filter_table_generator.add(:count) { |table| table.params.count }
|
||||
filter_table_generator.add(:exists?) { |table| !table.entries.empty? }
|
||||
filter_table_generator.add(:count) { |table| table.params.count }
|
||||
filter_table_generator.add(:ids, field: :id)
|
||||
filter_table_generator.add(:colors, field: :color)
|
||||
filter_table_generator.add(:lazy_1s, field: :lazy_1, lazy: ->(r,c,t) { r[:lazy_1] = :lazy_1_loaded } )
|
||||
filter_table_generator.add(:lazy_2s, field: :lazy_2, lazy: ->(r,c,t) { r[:lazy_2] =:lazy_2_loaded } )
|
||||
filter_table_generator.add(:lazy_3s, field: :lazy_3, lazy: ->(r,c,t) { r[:lazy_3] = t.resource.lazy_3_call_count += 1 } )
|
||||
filter_table_generator.add(:lazy_4s, field: :lazy_4, lazy: ->(r,c,t) { 1 / 0 } )
|
||||
filter_table_generator.add(:lazy_4s, field: :lazy_4, lazy: ->(r,c,t) { 1 / 0 } )
|
||||
filter_table_generator.add(:lazy_5s, field: :lazy_5, lazy_instance: ->(r,c,i) { r[:lazy_5] = i.lazy_5_call_count += 1 } )
|
||||
filter_table_generator.add(:lazy_6s, field: :lazy_6, lazy_instance: :increment_lazy_6 )
|
||||
filter_table_generator.connect(self, :plain_data)
|
||||
end
|
||||
|
||||
def increment_lazy_6(row, crit, table)
|
||||
# BUG: self here is different every time this is called, and appears not to be initialized
|
||||
row[:lazy_6] = (lazy_6_call_count += 1)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Reference in a new issue