UNPKG

wix-style-react

Version:
259 lines (219 loc) • 8.96 kB
/*eslint camelcase: off*/ import { google2address, trySetStreetNumberIfNotReceived } from './google2address'; describe('google 2 address', function () { var deepClone = function deepClone(obj) { return JSON.parse(JSON.stringify(obj)); }; var aComponent = function aComponent(long_name, short_name) { for (var _len = arguments.length, types = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { types[_key - 2] = arguments[_key]; } return { long_name: long_name, short_name: short_name, types: types }; }; var aGeometry = function aGeometry(lng, lat) { return { location: { lat: function lat() { return lng; }, lng: function lng() { return lat; } } }; }; var aGoogleResponse = function aGoogleResponse(_ref) { var components = _ref.components, formatted = _ref.formatted, geometry = _ref.geometry, types = _ref.types, adr_address = _ref.adr_address; return { geometry: geometry || aGeometry(1, 2), address_components: components || [], formatted_address: formatted || '', types: types || [], adr_address: adr_address }; }; it('should set state according to administrative_area_level_1', function () { var someState = 'some-state'; var component = aComponent(null, someState, 'administrative_area_level_1'); expect(google2address(aGoogleResponse({ components: [component] })).state).toEqual(someState); }); it('should set the subpremise', function () { var aptNumber = '16'; var component = aComponent(aptNumber, null, 'subpremise'); expect(google2address(aGoogleResponse({ components: [component] })).subpremise).toEqual(aptNumber); }); describe('city', function () { var someLocality = 'some-locality'; var someSublocality = 'some-sublocality'; var somePostalTown = 'some-postal_town'; var localityComponent = aComponent(someLocality, null, 'locality'); var subLocalityComponent = aComponent(someSublocality, null, 'sublocality'); var postalTownComponent = aComponent(somePostalTown, null, 'postal_town'); it('should be according to locality, ignore sublocality and postal_town', function () { var components = [localityComponent, subLocalityComponent, postalTownComponent]; expect(google2address(aGoogleResponse({ components: components })).city).toEqual(someLocality); }); it('should be according to sublocality if locality is missing, ignore postal_town', function () { var components = [subLocalityComponent, postalTownComponent]; expect(google2address(aGoogleResponse({ components: components })).city).toEqual(someSublocality); }); it('should be according to postal_town if locality and sublocality are missing', function () { expect(google2address(aGoogleResponse({ components: [postalTownComponent] })).city).toEqual(somePostalTown); }); }); it('should set street according to route', function () { var someStreet = 'some-street'; var component = aComponent(someStreet, null, 'route'); expect(google2address(aGoogleResponse({ components: [component] })).street).toEqual(someStreet); }); it('should set country according to country - long name', function () { var someCountry = 'some-country'; var component = aComponent(someCountry, null, 'country'); expect(google2address(aGoogleResponse({ components: [component] })).country).toEqual(someCountry); }); it('should set country code according to country - short name', function () { var someCountryCode = 'some-country-code'; var component = aComponent(null, someCountryCode, 'country'); expect(google2address(aGoogleResponse({ components: [component] })).countryCode).toEqual(someCountryCode); }); it('should set postal code according to postal_code', function () { var somePostalCode = 'some-postal-code'; var component = aComponent(somePostalCode, null, 'postal_code'); expect(google2address(aGoogleResponse({ components: [component] })).postalCode).toEqual(somePostalCode); }); it('should set street number according to street_number', function () { var someStreetNumber = 'some-street-number'; var component = aComponent(someStreetNumber, null, 'street_number'); expect(google2address(aGoogleResponse({ components: [component] })).number).toEqual(someStreetNumber); }); it('should set formatted according to formatted_address', function () { var someFormattedAddress = 'some-formatted-address'; expect(google2address(aGoogleResponse({ formatted: someFormattedAddress })).formatted).toEqual(someFormattedAddress); }); it('should set latLng according to geometry when they are functions', function () { var someGeometry = aGeometry(100, 22); expect(google2address(aGoogleResponse({ geometry: someGeometry })).latLng).toEqual({ lng: 22, lat: 100 }); }); it('should be able to accept lagLng as numbers', function () { var geometry = { location: { lat: 777, lng: 666 } }; expect(google2address(aGoogleResponse({ geometry: geometry })).latLng).toEqual({ lng: 666, lat: 777 }); }); it('should set approximate if street_address is not in types', function () { expect(google2address(aGoogleResponse({ types: ['street_address'] })).approximate).toBe(false); expect(google2address(aGoogleResponse({ types: ['anything else'] })).approximate).toBe(true); }); it('should set approximate if premise is not in types', function () { expect(google2address(aGoogleResponse({ types: ['premise'] })).approximate).toBe(false); expect(google2address(aGoogleResponse({ types: ['anything else'] })).approximate).toBe(true); }); it('should omit any undefined field', function () { expect(google2address(aGoogleResponse({}))).toEqual({ approximate: true, latLng: { lat: 1, lng: 2 }, formatted: '' }); }); it('should extract the formatted street address if available', function () { var address = '<span class="street-address">Ha-Namal St 40</span>, <span class="locality">Tel Aviv</span>, <span class="country-name">Israel</span>'; expect(google2address(aGoogleResponse({ adr_address: address })).formattedStreetAddress).toEqual('Ha-Namal St 40'); }); it('should complete street addres with user input (5-202) in case google api doesnt return it', function () { var resultFromGoogle = { address_components: [{ long_name: 'Chemin West Hill', short_name: 'Chemin West Hill', types: ['route'] }] }; var userInput = '5-202 Chemin'; var actual = trySetStreetNumberIfNotReceived(resultFromGoogle, userInput); var expected = { address_components: [{ long_name: '5-202', short_name: '5-202', types: ['street_number'] }, { long_name: 'Chemin West Hill', short_name: 'Chemin West Hill', types: ['route'] }] }; expect(actual).toEqual(expected); }); it('should complete street addres with user input (5/202) in case google api doesnt return it', function () { var resultFromGoogle = { address_components: [{ long_name: 'Chemin West Hill', short_name: 'Chemin West Hill', types: ['route'] }] }; var userInput = '5/202 Chemin'; var actual = trySetStreetNumberIfNotReceived(resultFromGoogle, userInput); var expected = { address_components: [{ long_name: '5/202', short_name: '5/202', types: ['street_number'] }, { long_name: 'Chemin West Hill', short_name: 'Chemin West Hill', types: ['route'] }] }; expect(actual).toEqual(expected); }); it('should complete street addres with user input (5 202) in case google api doesnt return it', function () { var resultFromGoogle = { address_components: [{ long_name: 'Chemin West Hill', short_name: 'Chemin West Hill', types: ['route'] }] }; var userInput = '5 202 Chemin'; var actual = trySetStreetNumberIfNotReceived(resultFromGoogle, userInput); var expected = { address_components: [{ long_name: '5 202', short_name: '5 202', types: ['street_number'] }, { long_name: 'Chemin West Hill', short_name: 'Chemin West Hill', types: ['route'] }] }; expect(actual).toEqual(expected); }); it('should not complete street address in case it has been returned from google api', function () { var given = { address_components: [{ long_name: '5-202', short_name: '5-202', types: ['street_number'] }] }; var expected = deepClone(given); expect(trySetStreetNumberIfNotReceived(given, '77777 Chemin')).toEqual(expected); }); });