Files
danbooru/test/unit/ip_geolocation_test.rb
evazion ac12efb636 tests: fix test failures when running without API keys.
Fix the test suite failing when trying to run it in the default state
with no config file or API keys configured. Most source sites require
API keys or login credentials to be set in order to work. Skip these
tests when credentials aren't configured.
2021-09-22 04:33:36 -05:00

77 lines
2.6 KiB
Ruby

require 'test_helper'
class IpGeolocationTest < ActiveSupport::TestCase
setup do
skip "IP Registry credentials not configured" unless IpLookup.enabled?
end
context "IpGeolocation: " do
context "the create_or_update! method" do
should "create a new record if the IP record doesn't already exist" do
assert_difference("IpGeolocation.count", 1) do
IpGeolocation.create_or_update!("1.1.1.1")
end
end
should "update an existing record if the IP record already exists" do
@ip1 = IpGeolocation.create_or_update!("1.1.1.1")
@ip1.update(asn: -1)
@ip2 = IpGeolocation.create_or_update!("1.1.1.1")
assert_equal(1, IpGeolocation.count)
assert_equal(@ip1.id, @ip2.id)
assert_equal(13335, @ip1.reload.asn)
end
should "return nothing for an invalid IP" do
assert_nil(IpGeolocation.create_or_update!("0.0.0.0"))
end
should "return nothing for a local IP" do
assert_nil(IpGeolocation.create_or_update!("127.0.0.1"))
assert_nil(IpGeolocation.create_or_update!("10.0.0.1"))
assert_nil(IpGeolocation.create_or_update!("fe80::1"))
assert_nil(IpGeolocation.create_or_update!("::1"))
end
should "work for a residential IP" do
@ip = IpGeolocation.create_or_update!("2a01:0e35:2f22:e3d0::1")
assert_equal(28, @ip.network.prefix)
assert_equal(false, @ip.is_proxy?)
assert_equal(49, @ip.latitude.round(0))
assert_equal(2, @ip.longitude.round(0))
assert_equal("Free SAS", @ip.organization)
assert_equal("Europe/Paris", @ip.time_zone)
assert_equal("EU", @ip.continent)
assert_equal("FR", @ip.country)
assert_equal("FR-IDF", @ip.region)
#assert_equal("Argenteuil", @ip.city)
assert_nil(@ip.carrier)
end
should "work for a mobile IP" do
@ip = IpGeolocation.create_or_update!("37.173.153.166")
assert_equal("Free Mobile", @ip.carrier)
end
should "work for a proxy IP" do
@ip = IpGeolocation.create_or_update!("31.214.184.59")
assert_equal("Soluciones Corporativas IP SL", @ip.organization)
assert_equal(true, @ip.is_proxy?)
end
should "work for a cloud hosting IP" do
@ip = IpGeolocation.create_or_update!("157.230.244.215")
assert_equal("DigitalOcean LLC", @ip.organization)
assert_equal(true, @ip.is_proxy?)
end
should "work for a bogon IP" do
@ip = IpGeolocation.create_or_update!("103.10.192.0")
assert_equal(true, @ip.is_proxy?)
end
end
end
end