require "mysql2"
require "yaml"

module DataTests
  class DbQuery
    attr_reader :results

    def self.client
      return @client if @client
      credentials = YAML.load_file(DataTests.root.join("configs/db_properties.yml"))
      @client = Mysql2::Client.new(credentials)
    end

    def self.get_single_row(table, columns)
      where_string = []
      columns.each do |key, val|
        where_string << "#{key} = #{val}"
      end
      where_string = where_string.join " AND "

      query_string = "SELECT * FROM #{table} WHERE #{where_string}"
      query = new(query_string)
      query.expect_results
      query.expect_one_result
      query.results.first
    end

    def initialize(query)
      @results = self.class.client.query(query)
    end

    def expect_results
      fail "query returned no results" unless @results.count > 0
    end

    def expect_one_result
      fail "query returned more than one result" if @results.count > 1
    end
  end
end
