Browse Source

Maintenance: Port Service::GeoLocation minitest to RSpec

Florian Liebe 2 years ago
parent
commit
9126a2d725

+ 0 - 2
.gitlab/ci/integration/other.yml

@@ -12,8 +12,6 @@
     - bundle exec rails test test/integration/email_postmaster_to_sender.rb
     - echo "Clearbit test..."
     - bundle exec rails test test/integration/clearbit_test.rb
-    - echo "Geo tests..."
-    - bundle exec rails test test/integration/geo_location_test.rb
     - echo "Slack test..."
     - bundle exec rails test test/integration/slack_test.rb
     - echo "UserAgent tests..."

+ 122 - 0
spec/lib/service/geo_location_spec.rb

@@ -0,0 +1,122 @@
+# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
+
+require 'rails_helper'
+
+RSpec.describe Service::GeoLocation, type: :integration do
+  describe '#geocode' do
+    subject(:lookup_result) { described_class.geocode(address) }
+
+    context 'when checking simple results' do
+      let(:expected_result) { [ latitude, longitude ] }
+      let(:request_url) { "http://maps.googleapis.com/maps/api/geocode/json?address=#{CGI.escape(address)}&sensor=true" }
+      let(:response_payload) do
+        {
+          'results' => [
+            {
+              'geometry' => {
+                'location' => {
+                  'lat' => latitude,
+                  'lng' => longitude,
+                },
+              },
+            },
+          ],
+        }
+      end
+
+      before do
+        stub_request(:get, request_url).to_return(status: 200, body: response_payload.to_json, headers: {})
+      end
+
+      context 'with German addresses' do
+        let(:address) { 'Marienstrasse 13, 10117 Berlin' }
+        let(:latitude) { 52.5219143 }
+        let(:longitude) { 13.3832647 }
+
+        it { is_expected.to eq(expected_result) }
+
+        context 'without separator between street and zipcode + city' do
+          let(:address) { 'Marienstrasse 13 10117 Berlin' }
+
+          it { is_expected.to eq(expected_result) }
+        end
+
+        context 'when address field in user preferences is filled' do
+          let(:user) { create(:user, address: address) }
+
+          it 'stores correct values for latitude + longitude' do
+            expect(user.preferences).to include({ 'lat' => latitude, 'lng' => longitude })
+          end
+        end
+
+        context 'when street, city and zip fields in user preferences are filled' do
+          let(:address) { 'Marienstrasse 13, 10117, Berlin' }
+          let(:address_parts) { address.split(%r{\.?\s+}, 4) }
+          let(:street) { "#{address_parts.first} #{address_parts[1].chop}" }
+          let(:zip) { address_parts[2].chop }
+          let(:city) { address_parts.last }
+
+          let(:user) { create(:user, street: street, zip: zip, city: city) }
+
+          it 'stores correct values for latitude + longitude' do
+            expect(user.preferences).to include({ 'lat' => latitude, 'lng' => longitude })
+          end
+        end
+      end
+
+      context 'with Swiss addresses' do
+        let(:address) { 'Martinsbruggstrasse 35, 9016 St. Gallen' }
+        let(:latitude) { 47.4366557 }
+        let(:longitude) { 9.4098904 }
+
+        it { is_expected.to eq(expected_result) }
+
+        context 'without separator between street and zipcode + city' do
+          let(:address) { 'Martinsbruggstrasse 35 9016 St. Gallen' }
+
+          it { is_expected.to eq(expected_result) }
+        end
+      end
+    end
+  end
+
+  describe '#reverse_geocode' do
+    subject(:lookup_result) { described_class.reverse_geocode(latitude, longitude) }
+
+    context 'when checking simple results' do
+      let(:expected_result) { address }
+      let(:request_url) { "http://maps.googleapis.com/maps/api/geocode/json?latlng=#{latitude},#{longitude}&sensor=true" }
+      let(:response_payload) do
+        {
+          'results' => [
+            {
+              'address_components' => [
+                'long_name' => address,
+              ],
+            },
+          ],
+        }
+      end
+
+      before do
+        stub_request(:get, request_url).to_return(status: 200, body: response_payload.to_json, headers: {})
+      end
+
+      context 'with German addresses' do
+        let(:address) { 'Marienstrasse 13, 10117 Berlin' }
+        let(:latitude) { 52.5219143 }
+        let(:longitude) { 13.3832647 }
+
+        it { is_expected.to eq(expected_result) }
+      end
+
+      context 'with Swiss addresses' do
+        let(:address) { 'Martinsbruggstrasse 35, 9016 St. Gallen' }
+        let(:latitude) { 47.4366557 }
+        let(:longitude) { 9.4098904 }
+
+        it { is_expected.to eq(expected_result) }
+      end
+    end
+  end
+end

+ 0 - 153
test/integration/geo_location_test.rb

@@ -1,153 +0,0 @@
-# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
-
-require 'integration_test_helper'
-require 'webmock/minitest'
-
-class GeoLocationTest < ActiveSupport::TestCase
-
-  setup do
-    @mock = true
-    # WebMock.allow_net_connect!
-  end
-
-  # check
-  test 'check simple results' do
-
-    if @mock
-      stub_request(:get, 'http://maps.googleapis.com/maps/api/geocode/json?address=Marienstrasse%2013,%2010117%20Berlin&sensor=true')
-        .to_return(status: 200, body: '{"results":[{"geometry":{"location":{"lat": 52.5219143, "lng": 13.3832647}}}]}', headers: {})
-    end
-
-    result = Service::GeoLocation.geocode('Marienstrasse 13, 10117 Berlin')
-    assert(result)
-    assert_equal(52.5219143, result[0])
-    assert_equal(13.3832647, result[1])
-
-    if @mock
-      stub_request(:get, 'http://maps.googleapis.com/maps/api/geocode/json?address=Marienstrasse%2013%2010117%20Berlin&sensor=true')
-        .to_return(status: 200, body: '{"results":[{"geometry":{"location":{"lat": 52.5219143, "lng": 13.3832647}}}]}', headers: {})
-    end
-
-    result = Service::GeoLocation.geocode('Marienstrasse 13 10117 Berlin')
-    assert(result)
-    assert_equal(52.5219143, result[0])
-    assert_equal(13.3832647, result[1])
-
-    if @mock
-      stub_request(:get, 'http://maps.googleapis.com/maps/api/geocode/json?address=Martinsbruggstrasse%2035,%209016%20St.%20Gallen&sensor=true')
-        .to_return(status: 200, body: '{"results":[{"geometry":{"location":{"lat": 47.4366557, "lng": 9.4098904}}}]}', headers: {})
-    end
-
-    result = Service::GeoLocation.geocode('Martinsbruggstrasse 35, 9016 St. Gallen')
-    assert(result)
-    assert_equal(47.4366557, result[0])
-    assert_equal(9.4098904, result[1])
-
-    if @mock
-      stub_request(:get, 'http://maps.googleapis.com/maps/api/geocode/json?address=Martinsbruggstrasse%2035%209016%20St.%20Gallen&sensor=true')
-        .to_return(status: 200, body: '{"results":[{"geometry":{"location":{"lat": 47.4366557, "lng": 9.4098904}}}]}', headers: {})
-    end
-
-    result = Service::GeoLocation.geocode('Martinsbruggstrasse 35 9016 St. Gallen')
-    assert(result)
-    assert_equal(47.4366557, result[0])
-    assert_equal(9.4098904, result[1])
-
-  end
-
-  test 'check user results' do
-
-    if @mock
-      stub_request(:get, 'http://maps.googleapis.com/maps/api/geocode/json?address=Marienstrasse%2013%2010117%20Berlin&sensor=true')
-        .to_return(status: 200, body: '{"results":[{"geometry":{"location":{"lat": 52.5219143, "lng": 13.3832647}}}]}', headers: {})
-    end
-
-    user1 = User.create(
-      login:         'some_geo_login1',
-      firstname:     'First',
-      lastname:      'Last',
-      email:         'some_geo_login1@example.com',
-      password:      'test',
-      address:       'Marienstrasse 13 10117 Berlin',
-      active:        false,
-      updated_by_id: 1,
-      created_by_id: 1
-    )
-    assert(user1.preferences)
-    assert(user1.preferences['lat'])
-    assert(user1.preferences['lng'])
-    assert_equal(52.5219143, user1.preferences['lat'])
-    assert_equal(13.3832647, user1.preferences['lng'])
-
-    if @mock
-      stub_request(:get, 'http://maps.googleapis.com/maps/api/geocode/json?address=Marienstrasse%2013,%2010117,%20Berlin&sensor=true')
-        .to_return(status: 200, body: '{"results":[{"geometry":{"location":{"lat": 52.5219143, "lng": 13.3832647}}}]}', headers: {})
-    end
-
-    user2 = User.create(
-      login:         'some_geo_login2',
-      firstname:     'First',
-      lastname:      'Last',
-      email:         'some_geo_login2@example.com',
-      password:      'test',
-      street:        'Marienstrasse 13',
-      city:          'Berlin',
-      zip:           '10117',
-      active:        false,
-      updated_by_id: 1,
-      created_by_id: 1
-    )
-    assert(user2.preferences)
-    assert(user2.preferences['lat'])
-    assert(user2.preferences['lng'])
-    assert_equal(52.5219143, user2.preferences['lat'])
-    assert_equal(13.3832647, user2.preferences['lng'])
-
-    if @mock
-      stub_request(:get, 'http://maps.googleapis.com/maps/api/geocode/json?address=Martinsbruggstrasse%2035,%209016%20St.%20Gallen&sensor=true')
-        .to_return(status: 200, body: '{"results":[{"geometry":{"location":{"lat": 47.4366557, "lng": 9.4098904}}}]}', headers: {})
-    end
-
-    user3 = User.create(
-      login:         'some_geo_login3',
-      firstname:     'First',
-      lastname:      'Last',
-      email:         'some_geo_login3@example.com',
-      password:      'test',
-      address:       'Martinsbruggstrasse 35, 9016 St. Gallen',
-      active:        false,
-      updated_by_id: 1,
-      created_by_id: 1
-    )
-    assert(user3.preferences)
-    assert(user3.preferences['lat'])
-    assert(user3.preferences['lng'])
-    assert_equal(47.4366557, user3.preferences['lat'])
-    assert_equal(9.4098904, user3.preferences['lng'])
-
-    if @mock
-      stub_request(:get, 'http://maps.googleapis.com/maps/api/geocode/json?address=Martinsbruggstrasse%2035,%209016,%20St.%20Gallen&sensor=true')
-        .to_return(status: 200, body: '{"results":[{"geometry":{"location":{"lat": 47.4366557, "lng": 9.4098904}}}]}', headers: {})
-    end
-
-    user4 = User.create(
-      login:         'some_geo_login4',
-      firstname:     'First',
-      lastname:      'Last',
-      email:         'some_geo_login4@example.com',
-      password:      'test',
-      street:        'Martinsbruggstrasse 35',
-      city:          'St. Gallen',
-      zip:           '9016',
-      active:        false,
-      updated_by_id: 1,
-      created_by_id: 1
-    )
-    assert(user4.preferences)
-    assert(user4.preferences['lat'])
-    assert(user4.preferences['lng'])
-    assert_equal(47.4366557, user4.preferences['lat'])
-    assert_equal(9.4098904, user4.preferences['lng'])
-
-  end
-end