class Dbtap::SetEq
Tests to see if two sets of results are equal
Sets is a bit of a misnomer in that if a query returns duplicate rows, those rows are NOT deduplicated.
The order in which either query returns the results is ignored when testing for equality.
Attributes
actual[RW]
Public Class Methods
new(actual, expected, name = nil)
click to toggle source
actual
- The query being tested expected
- The set of results expected. Should be another query. name
- (optional) the name of the test
# File lib/dbtap/testers/set_eq.rb, line 18 def initialize(actual, expected, name = nil) @name = name @actual = actual @expected = expected end
Public Instance Methods
errors()
click to toggle source
# File lib/dbtap/testers/set_eq.rb, line 28 def errors drop_csv output = [] unless missing.empty? output << "Missing #{missing.count}/#{expected_count} Records:" output << ' ' + missing.first.inspect end unless extras.empty? output << "Extra #{extras.count} over #{expected_count} Records:" output << ' ' + extras.first.inspect end end
ok?()
click to toggle source
# File lib/dbtap/testers/set_eq.rb, line 24 def ok? missing.empty? && extras.empty? end
Private Instance Methods
drop_csv()
click to toggle source
# File lib/dbtap/testers/set_eq.rb, line 55 def drop_csv rows = actual.all CSV.open('/tmp/actual.csv', 'w') do |csv| unless rows.empty? csv << rows.first.keys end rows.each do |row| csv << row.values end end end
expected_count()
click to toggle source
# File lib/dbtap/testers/set_eq.rb, line 51 def expected_count @expected_count = expected.count end
extras()
click to toggle source
# File lib/dbtap/testers/set_eq.rb, line 47 def extras @extras ||= actual.except(expected).all end
missing()
click to toggle source
# File lib/dbtap/testers/set_eq.rb, line 43 def missing @missing ||= expected.except(actual).all end