# test/support/stubs.rb
#
# Lightweight stubs for DB and Http so that lib/geocode.rb can be loaded in
# unit tests without a real database connection or network access.
#
# Usage — require this file BEFORE requiring any lib that depends on DB or Http:
#
#   require_relative "support/stubs"
#   require_relative "../../lib/geocode"

# Stub DB module — pure validation logic is implemented here so that
# validate_table_name! can be tested directly.
module DB
  SAFE_TABLE_NAME_RE = /\Ada_[a-z0-9_]+\z/

  def self.validate_table_name!(name)
    unless name.to_s.match?(SAFE_TABLE_NAME_RE)
      raise ArgumentError, "Unsafe table name: #{name.inspect} — must match #{SAFE_TABLE_NAME_RE}"
    end
    name
  end

  def self.client
    raise NotImplementedError, "DB.client is not available in unit tests"
  end
end

# Stub Http module — no network calls in unit tests
module Http
  def self.get(*)
    raise NotImplementedError, "Http.get is not available in unit tests"
  end
end

# Prevent require_relative inside lib files from loading the real db.rb / http.rb,
# which would overwrite the stubs above and pull in the mysql2 gem.
# Use File.dirname so expand_path treats the base as a directory, not a file.
_test_support_dir = File.dirname(File.expand_path(__FILE__))
$LOADED_FEATURES << File.expand_path("../../lib/db.rb",   _test_support_dir)
$LOADED_FEATURES << File.expand_path("../../lib/http.rb",  _test_support_dir)
