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