Skip to content
Snippets Groups Projects
configuration_test.rb 3.36 KiB
Newer Older
  • Learn to ignore specific revisions
  • # encoding: utf-8
    require 'test_helper'
    
    class ConfigurationTest < Test::Unit::TestCase
    
      def setup
        Geocoder::Configuration.set_defaults
      end
    
    
      def test_exception_raised_on_bad_lookup_config
        Geocoder::Configuration.lookup = :stoopid
        assert_raises Geocoder::ConfigurationError do
          Geocoder.search "something dumb"
        end
      end
    
      # --- class method configuration ---
      def test_configurated_by_class_method
        Geocoder::Configuration.units = :mi
        distance = Geocoder::Calculations.distance_between([0,0], [0,1]).round
        assert_not_equal 111, distance
    
    
        Geocoder::Configuration.units = :km
        distance = Geocoder::Calculations.distance_between([0,0], [0,1]).round
    
        assert_not_equal 69, distance
    
        Geocoder::Configuration.distances = :spherical
    
        angle = Geocoder::Calculations.bearing_between([50,-85], [40.750354, -73.993371]).round
        assert_equal     136, angle
        assert_not_equal 130, angle
    
    
        Geocoder::Configuration.distances = :linear
    
        angle = Geocoder::Calculations.bearing_between([50,-85], [40.750354, -73.993371]).round
        assert_not_equal 136, angle
        assert_equal     130, angle
    
      # --- Geocoder#configure distances configuration ---
    
      def test_geocoder_configuration
    
        Geocoder.configure do |config|
    
          config.distances = :linear
    
    
        assert_equal Geocoder::Configuration.units, :mi
        distance = Geocoder::Calculations.distance_between([0,0], [0,1]).round
        assert_not_equal 111, distance
    
        assert_equal Geocoder::Configuration.distances, :linear
    
        angle = Geocoder::Calculations.bearing_between([50,-85], [40.750354, -73.993371]).round
        assert_not_equal 136, angle
        assert_equal     130, angle
    
        # Direct
        Geocoder.configure.units  = :km
    
        Geocoder.configure.distances = :spherical
    
    
        assert_equal Geocoder::Configuration.units, :km
        distance = Geocoder::Calculations.distance_between([0,0], [0,1]).round
    
        assert_not_equal 69, distance
    
        assert_equal Geocoder::Configuration.distances, :spherical
    
        angle = Geocoder::Calculations.bearing_between([50,-85], [40.750354, -73.993371]).round
        assert_equal     136, angle
        assert_not_equal 130, angle
      end
    
      # Geocoder per-model configuration
      def test_model_configuration
        Landmark.reverse_geocoded_by :latitude, :longitude, :method => :spherical, :units => :km
    
        assert_equal :km,        Landmark.geocoder_options[:units]
    
        assert_equal :spherical, Landmark.geocoder_options[:method]
    
    
        v = Landmark.new(*landmark_params(:msg))
        v.latitude  = 0
        v.longitude = 0
        assert_equal 111, v.distance_to([0,1]).round
        v.latitude  = 40.750354
        v.longitude = -73.993371
        assert_equal 136, v.bearing_from([50,-85]).round
    
    
      def test_configuration_chain
        v = Landmark.new(*landmark_params(:msg))
        v.latitude  = 0
        v.longitude = 0
    
        # method option > global configuration
        Geocoder.configure.units  = :km
        assert_equal 69, v.distance_to([0,1], :mi).round
    
        # per-model configuration > global configuration
        Landmark.reverse_geocoded_by :latitude, :longitude, :method => :spherical, :units => :mi
        assert_equal 69, v.distance_to([0,1]).round
    
        # method option > per-model configuration
        assert_equal 111, v.distance_to([0,1], :km).round
      end