# encoding: utf-8
require 'test_helper'

class MaxmindTest < GeocoderTestCase

  def setup
    super
    Geocoder.configure(ip_lookup: :maxmind)
  end

  def test_maxmind_result_on_ip_address_search
    Geocoder.configure(maxmind: {service: :city_isp_org})
    result = Geocoder.search("74.200.247.59").first
    assert result.is_a?(Geocoder::Result::Maxmind)
  end

  def test_maxmind_result_knows_country_service_name
    Geocoder.configure(maxmind: {service: :country})
    assert_equal :country, Geocoder.search("24.24.24.21").first.service_name
  end

  def test_maxmind_result_knows_city_service_name
    Geocoder.configure(maxmind: {service: :city})
    assert_equal :city, Geocoder.search("24.24.24.22").first.service_name
  end

  def test_maxmind_result_knows_city_isp_org_service_name
    Geocoder.configure(maxmind: {service: :city_isp_org})
    assert_equal :city_isp_org, Geocoder.search("24.24.24.23").first.service_name
  end

  def test_maxmind_result_knows_omni_service_name
    Geocoder.configure(maxmind: {service: :omni})
    assert_equal :omni, Geocoder.search("24.24.24.24").first.service_name
  end

  def test_maxmind_special_result_components
    Geocoder.configure(maxmind: {service: :omni})
    result = Geocoder.search("24.24.24.24").first
    assert_equal "Road Runner", result.isp_name
    assert_equal "Cable/DSL", result.netspeed
    assert_equal "rr.com", result.domain
  end

  def test_maxmind_raises_exception_when_service_not_configured
    Geocoder.configure(maxmind: {service: nil})
    assert_raises Geocoder::ConfigurationError do
      Geocoder::Query.new("24.24.24.24").url
    end
  end

  def test_maxmind_works_when_loopback_address_on_omni
    Geocoder.configure(maxmind: {service: :omni})
    result = Geocoder.search("127.0.0.1").first
    assert_equal "", result.country_code
  end

  def test_maxmind_works_when_loopback_address_on_country
    Geocoder.configure(maxmind: {service: :country})
    result = Geocoder.search("127.0.0.1").first
    assert_equal "", result.country_code
  end

  def test_maxmind_works_when_private_address_on_omni
    Geocoder.configure(maxmind: {service: :omni})
    result = Geocoder.search("172.19.0.1").first
    assert_equal "", result.country_code
  end

  def test_maxmind_works_when_private_address_on_country
    Geocoder.configure(maxmind: {service: :country})
    result = Geocoder.search("172.19.0.1").first
    assert_equal "", result.country_code
  end
end
