diff --git a/.github/workflows/percy.yml b/.github/workflows/percy.yml index ae53907d2..c5e878b72 100644 --- a/.github/workflows/percy.yml +++ b/.github/workflows/percy.yml @@ -10,7 +10,6 @@ on: jobs: run-pixel-tests: runs-on: ubuntu-latest - steps: - uses: actions/checkout@v2 with: @@ -25,25 +24,37 @@ jobs: - name: Download OTP2 config file run: curl $PERCY_OTP2_CONFIG_URL --output /tmp/otp2config.yml env: - PERCY_OTP2_CONFIG_URL: ${{ secrets.PERCY_MOCKOTP2_CONFIG_URL_METRO_MODE_SELECTOR }} + PERCY_OTP2_CONFIG_URL: ${{ secrets.PERCY_MOCK_OTP2_GEOCODER_CONFIG }} - name: Build OTP-RR # Artifacts are shared between desktop and mobile tests (but not call-taker). run: yarn build env: YAML_CONFIG: /tmp/otp2config.yml JS_CONFIG: ./percy/har-mock-config.js - - name: Take Percy Snapshots (Desktop) + - name: Take Percy Snapshots (Desktop + Mobile) run: npx percy exec -- npx jest percy/percy.test.js --force-exit env: PERCY_TOKEN: ${{ secrets.PERCY_TOKEN_OTP2 }} - OTP_RR_UI_MODE: desktop - - name: Take Percy Snapshots (Mobile) - run: npx percy exec -- npx jest percy/percy.test.js --force-exit + OTP_RR_UI_MODE: normal + run-pixel-tests-calltaker: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + # This allows us to work with the repository during the lint step + fetch-depth: 2 + - name: Use Node.js 16.x + uses: actions/setup-node@v1 + with: + node-version: 16.x + - name: Install npm packages using cache + uses: bahmutov/npm-install@v1 + - name: Download OTP2 config file + run: curl $PERCY_OTP2_CONFIG_URL --output /tmp/otp2config.yml env: - PERCY_TOKEN: ${{ secrets.PERCY_TOKEN_OTP2 }} - OTP_RR_UI_MODE: mobile - # Calltaker has a separate config file, so another build should be produced. + PERCY_OTP2_CONFIG_URL: ${{ secrets.PERCY_MOCK_OTP2_GEOCODER_CONFIG }} - name: Build OTP-RR Calltaker + # Calltaker has a separate config file, so another build should be produced. run: yarn build env: YAML_CONFIG: /tmp/otp2config.yml @@ -51,5 +62,6 @@ jobs: - name: Take Percy Snapshots (Calltaker) run: npx percy exec -- npx jest percy/percy.test.js --force-exit env: - PERCY_TOKEN: ${{ secrets.PERCY_TOKEN_OTP2 }} + # Calltaker has a separate key because the calltaker-specific snapshots are different. + PERCY_TOKEN: ${{ secrets.PERCY_TOKEN_CALL_TAKER_OTP2 }} OTP_RR_UI_MODE: calltaker diff --git a/lib/components/narrative/default/default-itinerary.js b/lib/components/narrative/default/default-itinerary.js index f7f98e49c..bfbf25518 100644 --- a/lib/components/narrative/default/default-itinerary.js +++ b/lib/components/narrative/default/default-itinerary.js @@ -20,8 +20,8 @@ import { getAccessibilityScoreForItinerary, itineraryHasAccessibilityScores } from '../../../util/accessibility-routing' +import { getFare, getTotalFare } from '../../../util/state' import { getFirstLegStartTime } from '../../../util/itinerary' -import { getTotalFare } from '../../../util/state' import { Icon, StyledIconWrapperTextAlign } from '../../util/styledIcon' import { localizeGradationMap } from '../utils' import FieldTripGroupSize from '../../admin/field-trip-itinerary-group-size' @@ -121,7 +121,7 @@ const ITINERARY_ATTRIBUTES = [ id: 'cost', order: 2, render: (itinerary, options, defaultFareType) => { - const fare = getTotalFare(itinerary, options.configCosts, defaultFareType) + const fare = getFare(itinerary, defaultFareType) const currency = getItineraryCost( itinerary.legs, defaultFareType.mediumId, @@ -142,11 +142,11 @@ const ITINERARY_ATTRIBUTES = [ return ( ) } diff --git a/lib/util/state.js b/lib/util/state.js index 1d2f35f15..c25b0b615 100644 --- a/lib/util/state.js +++ b/lib/util/state.js @@ -99,8 +99,10 @@ export function getTotalFare( let drivingCost = 0 let hasBikeshare = false let transitFareNotProvided = false + let rideHailTrip = false itinerary.legs.forEach((leg) => { - if (leg.mode === 'CAR') { + rideHailTrip = rideHailTrip || leg?.rideHailingEstimate + if (leg.mode === 'CAR' && !rideHailTrip) { // Convert meters to miles and multiple by cost per mile. drivingCost += leg.distance * 0.000621371 * costs.drivingCentsPerMile } @@ -121,7 +123,7 @@ export function getTotalFare( if (transitFareNotProvided) return null const bikeshareCost = hasBikeshare ? costs.bikeshareTripCostCents : 0 // If some leg uses driving, add parking cost to the total. - if (drivingCost > 0) drivingCost += costs.carParkingCostCents + if (drivingCost > 0 && !rideHailTrip) drivingCost += costs.carParkingCostCents return bikeshareCost + drivingCost + transitFare + maxTNCFare * 100 } diff --git a/percy/geocoder-mock-calltaker.har b/percy/geocoder-mock-calltaker.har new file mode 100644 index 000000000..895bf6a9b --- /dev/null +++ b/percy/geocoder-mock-calltaker.har @@ -0,0 +1,782 @@ +{ + "log": { + "version": "1.2", + "creator": { + "name": "WebInspector", + "version": "537.36" + }, + "pages": [], + "entries": [ + { + "request": { + "method": "GET", + "url": "http://localhost:9977/autocomplete?text=a&layers=address%2Cvenue%2Cstreet%2Cintersection&focus.point.lat=33.749&focus.point.lon=-84.388&boundary.rect.min_lat=32.066&boundary.rect.min_lon=-86.0856&boundary.rect.max_lat=35.7251&boundary.rect.max_lon=-81.9499", + "httpVersion": "http/2.0", + "queryString": [ + { + "name": "text", + "value": "a" + }, + { + "name": "layers", + "value": "address%2Cvenue%2Cstreet%2Cintersection" + }, + { + "name": "focus.point.lat", + "value": "33.749" + }, + { + "name": "focus.point.lon", + "value": "-84.388" + }, + { + "name": "boundary.rect.min_lat", + "value": "32.066" + }, + { + "name": "boundary.rect.min_lon", + "value": "-86.0856" + }, + { + "name": "boundary.rect.max_lat", + "value": "35.7251" + }, + { + "name": "boundary.rect.max_lon", + "value": "-81.9499" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "", + "httpVersion": "http/2.0", + "content": { + "size": 11710, + "mimeType": "application/json", + "text": "{\"features\":[]}" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": -1, + "_transferSize": 12109, + "_error": null + }, + "startedDateTime": "2023-09-08T13:53:49.885Z", + "time": 449.04499999984364, + "timings": { + "blocked": 2.153000000224507, + "dns": 86.366, + "ssl": 73.93199999999999, + "connect": 192.28, + "send": 7.209000000000003, + "wait": 160.31799999995653, + "receive": 0.7189999996626284, + "_blocked_queueing": 1.352000000224507 + } + }, + { + "request": { + "method": "GET", + "url": "http://localhost:9977/autocomplete?text=ar&layers=address%2Cvenue%2Cstreet%2Cintersection&focus.point.lat=33.749&focus.point.lon=-84.388&boundary.rect.min_lat=32.066&boundary.rect.min_lon=-86.0856&boundary.rect.max_lat=35.7251&boundary.rect.max_lon=-81.9499", + "httpVersion": "http/2.0", + "queryString": [ + { + "name": "text", + "value": "ar" + }, + { + "name": "layers", + "value": "address%2Cvenue%2Cstreet%2Cintersection" + }, + { + "name": "focus.point.lat", + "value": "33.749" + }, + { + "name": "focus.point.lon", + "value": "-84.388" + }, + { + "name": "boundary.rect.min_lat", + "value": "32.066" + }, + { + "name": "boundary.rect.min_lon", + "value": "-86.0856" + }, + { + "name": "boundary.rect.max_lat", + "value": "35.7251" + }, + { + "name": "boundary.rect.max_lon", + "value": "-81.9499" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "", + "httpVersion": "http/2.0", + "content": { + "size": 0, + "mimeType": "application/json", + "text": "{\"features\":[]}" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": -1, + "_transferSize": 11081, + "_error": null + }, + "startedDateTime": "2023-09-08T13:53:49.902Z", + "time": 804.0409999994154, + "timings": { + "blocked": 181.69800000018896, + "dns": -1, + "ssl": -1, + "connect": -1, + "send": 3.2079999999999984, + "wait": 618.41899999967, + "receive": 0.7159999995565158, + "_blocked_queueing": 1.231000000188942 + } + }, + { + "request": { + "method": "GET", + "url": "http://localhost:9977/autocomplete?text=art&layers=address%2Cvenue%2Cstreet%2Cintersection&focus.point.lat=33.749&focus.point.lon=-84.388&boundary.rect.min_lat=32.066&boundary.rect.min_lon=-86.0856&boundary.rect.max_lat=35.7251&boundary.rect.max_lon=-81.9499", + "httpVersion": "http/2.0", + "queryString": [ + { + "name": "text", + "value": "art" + }, + { + "name": "layers", + "value": "address%2Cvenue%2Cstreet%2Cintersection" + }, + { + "name": "focus.point.lat", + "value": "33.749" + }, + { + "name": "focus.point.lon", + "value": "-84.388" + }, + { + "name": "boundary.rect.min_lat", + "value": "32.066" + }, + { + "name": "boundary.rect.min_lon", + "value": "-86.0856" + }, + { + "name": "boundary.rect.max_lat", + "value": "35.7251" + }, + { + "name": "boundary.rect.max_lon", + "value": "-81.9499" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "", + "httpVersion": "http/2.0", + "content": { + "size": 0, + "mimeType": "application/json", + "text": "{\"features\":[]}" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": -1, + "_transferSize": 11253, + "_error": null + }, + "startedDateTime": "2023-09-08T13:53:49.909Z", + "time": 1204.160999999658, + "timings": { + "blocked": 175.13099999983532, + "dns": -1, + "ssl": -1, + "connect": -1, + "send": 2.973000000000013, + "wait": 1025.2889999999427, + "receive": 0.7679999998799758, + "_blocked_queueing": 1.2809999998353305 + } + }, + { + "request": { + "method": "GET", + "url": "http://localhost:9977/autocomplete?text=arts&layers=address%2Cvenue%2Cstreet%2Cintersection&focus.point.lat=33.749&focus.point.lon=-84.388&boundary.rect.min_lat=32.066&boundary.rect.min_lon=-86.0856&boundary.rect.max_lat=35.7251&boundary.rect.max_lon=-81.9499", + "httpVersion": "http/2.0", + "queryString": [ + { + "name": "text", + "value": "arts" + }, + { + "name": "layers", + "value": "address%2Cvenue%2Cstreet%2Cintersection" + }, + { + "name": "focus.point.lat", + "value": "33.749" + }, + { + "name": "focus.point.lon", + "value": "-84.388" + }, + { + "name": "boundary.rect.min_lat", + "value": "32.066" + }, + { + "name": "boundary.rect.min_lon", + "value": "-86.0856" + }, + { + "name": "boundary.rect.max_lat", + "value": "35.7251" + }, + { + "name": "boundary.rect.max_lon", + "value": "-81.9499" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "", + "httpVersion": "http/2.0", + "content": { + "size": 0, + "mimeType": "application/json", + "text": "{\"features\":[]}" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": -1, + "_transferSize": 12769, + "_error": null + }, + "startedDateTime": "2023-09-08T13:53:49.917Z", + "time": 313.9339999997901, + "timings": { + "blocked": 167.4080000005329, + "dns": -1, + "ssl": -1, + "connect": -1, + "send": 2.7959999999999923, + "wait": 143.22000000031747, + "receive": 0.5099999989397475, + "_blocked_queueing": 1.4550000005328911 + } + }, + { + "request": { + "method": "GET", + "url": "http://localhost:9977/autocomplete?text=arts%20&layers=address%2Cvenue%2Cstreet%2Cintersection&focus.point.lat=33.749&focus.point.lon=-84.388&boundary.rect.min_lat=32.066&boundary.rect.min_lon=-86.0856&boundary.rect.max_lat=35.7251&boundary.rect.max_lon=-81.9499", + "httpVersion": "http/2.0", + "queryString": [ + { + "name": "text", + "value": "arts%20" + }, + { + "name": "layers", + "value": "address%2Cvenue%2Cstreet%2Cintersection" + }, + { + "name": "focus.point.lat", + "value": "33.749" + }, + { + "name": "focus.point.lon", + "value": "-84.388" + }, + { + "name": "boundary.rect.min_lat", + "value": "32.066" + }, + { + "name": "boundary.rect.min_lon", + "value": "-86.0856" + }, + { + "name": "boundary.rect.max_lat", + "value": "35.7251" + }, + { + "name": "boundary.rect.max_lon", + "value": "-81.9499" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "", + "httpVersion": "http/2.0", + "content": { + "size": 0, + "mimeType": "application/json", + "text": "{\"features\":[]}" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": -1, + "_transferSize": 12768, + "_error": null + }, + "startedDateTime": "2023-09-08T13:53:49.923Z", + "time": 1060.0050000002739, + "timings": { + "blocked": 161.1640000008461, + "dns": -1, + "ssl": -1, + "connect": -1, + "send": 2.658999999999992, + "wait": 895.6010000000988, + "receive": 0.5809999993289239, + "_blocked_queueing": 1.4210000008461066 + } + }, + { + "request": { + "method": "GET", + "url": "http://localhost:9977/autocomplete?text=arts%20c&layers=address%2Cvenue%2Cstreet%2Cintersection&focus.point.lat=33.749&focus.point.lon=-84.388&boundary.rect.min_lat=32.066&boundary.rect.min_lon=-86.0856&boundary.rect.max_lat=35.7251&boundary.rect.max_lon=-81.9499", + "httpVersion": "http/2.0", + "queryString": [ + { + "name": "text", + "value": "arts%20c" + }, + { + "name": "layers", + "value": "address%2Cvenue%2Cstreet%2Cintersection" + }, + { + "name": "focus.point.lat", + "value": "33.749" + }, + { + "name": "focus.point.lon", + "value": "-84.388" + }, + { + "name": "boundary.rect.min_lat", + "value": "32.066" + }, + { + "name": "boundary.rect.min_lon", + "value": "-86.0856" + }, + { + "name": "boundary.rect.max_lat", + "value": "35.7251" + }, + { + "name": "boundary.rect.max_lon", + "value": "-81.9499" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "", + "httpVersion": "http/2.0", + "content": { + "size": 0, + "mimeType": "application/json", + "text": "{\"features\":[]}" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": -1, + "_transferSize": 11016, + "_error": null + }, + "startedDateTime": "2023-09-08T13:53:49.932Z", + "time": 812.2540000003937, + "timings": { + "blocked": 152.40299999998243, + "dns": -1, + "ssl": -1, + "connect": -1, + "send": 2.4749999999999943, + "wait": 656.5110000004352, + "receive": 0.8649999999761349, + "_blocked_queueing": 1.6279999999824213 + } + }, + { + "request": { + "method": "GET", + "url": "http://localhost:9977/autocomplete?text=arts%20ce&layers=address%2Cvenue%2Cstreet%2Cintersection&focus.point.lat=33.749&focus.point.lon=-84.388&boundary.rect.min_lat=32.066&boundary.rect.min_lon=-86.0856&boundary.rect.max_lat=35.7251&boundary.rect.max_lon=-81.9499", + "httpVersion": "http/2.0", + "queryString": [ + { + "name": "text", + "value": "arts%20ce" + }, + { + "name": "layers", + "value": "address%2Cvenue%2Cstreet%2Cintersection" + }, + { + "name": "focus.point.lat", + "value": "33.749" + }, + { + "name": "focus.point.lon", + "value": "-84.388" + }, + { + "name": "boundary.rect.min_lat", + "value": "32.066" + }, + { + "name": "boundary.rect.min_lon", + "value": "-86.0856" + }, + { + "name": "boundary.rect.max_lat", + "value": "35.7251" + }, + { + "name": "boundary.rect.max_lon", + "value": "-81.9499" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "", + "httpVersion": "http/2.0", + "content": { + "size": 0, + "mimeType": "application/json", + "text": "{\"features\":[]}" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": -1, + "_transferSize": 11006, + "_error": null + }, + "startedDateTime": "2023-09-08T13:53:49.938Z", + "time": 1667.8229999997711, + "timings": { + "blocked": 147.01800000041595, + "dns": -1, + "ssl": -1, + "connect": -1, + "send": 1.9000000000000057, + "wait": 1517.6120000000049, + "receive": 1.292999999350286, + "_blocked_queueing": 1.006000000415952 + } + }, + { + "request": { + "method": "GET", + "url": "http://localhost:9977/autocomplete?text=arts%20cen&layers=address%2Cvenue%2Cstreet%2Cintersection&focus.point.lat=33.749&focus.point.lon=-84.388&boundary.rect.min_lat=32.066&boundary.rect.min_lon=-86.0856&boundary.rect.max_lat=35.7251&boundary.rect.max_lon=-81.9499", + "httpVersion": "http/2.0", + "queryString": [ + { + "name": "text", + "value": "arts%20cen" + }, + { + "name": "layers", + "value": "address%2Cvenue%2Cstreet%2Cintersection" + }, + { + "name": "focus.point.lat", + "value": "33.749" + }, + { + "name": "focus.point.lon", + "value": "-84.388" + }, + { + "name": "boundary.rect.min_lat", + "value": "32.066" + }, + { + "name": "boundary.rect.min_lon", + "value": "-86.0856" + }, + { + "name": "boundary.rect.max_lat", + "value": "35.7251" + }, + { + "name": "boundary.rect.max_lon", + "value": "-81.9499" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "", + "httpVersion": "http/2.0", + "content": { + "size": 0, + "mimeType": "application/json", + "text": "{\"features\":[]}" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": -1, + "_transferSize": 11011, + "_error": null + }, + "startedDateTime": "2023-09-08T13:53:49.950Z", + "time": 1307.301999999254, + "timings": { + "blocked": 134.52299999937532, + "dns": -1, + "ssl": -1, + "connect": -1, + "send": 2.140999999999991, + "wait": 1169.752000000069, + "receive": 0.8859999998094281, + "_blocked_queueing": 1.1479999993753154 + } + }, + { + "request": { + "method": "GET", + "url": "http://localhost:9977/autocomplete?text=arts%20cent&layers=address%2Cvenue%2Cstreet%2Cintersection&focus.point.lat=33.749&focus.point.lon=-84.388&boundary.rect.min_lat=32.066&boundary.rect.min_lon=-86.0856&boundary.rect.max_lat=35.7251&boundary.rect.max_lon=-81.9499", + "httpVersion": "http/2.0", + "queryString": [ + { + "name": "text", + "value": "arts%20cent" + }, + { + "name": "layers", + "value": "address%2Cvenue%2Cstreet%2Cintersection" + }, + { + "name": "focus.point.lat", + "value": "33.749" + }, + { + "name": "focus.point.lon", + "value": "-84.388" + }, + { + "name": "boundary.rect.min_lat", + "value": "32.066" + }, + { + "name": "boundary.rect.min_lon", + "value": "-86.0856" + }, + { + "name": "boundary.rect.max_lat", + "value": "35.7251" + }, + { + "name": "boundary.rect.max_lon", + "value": "-81.9499" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "", + "httpVersion": "http/2.0", + "content": { + "size": 0, + "mimeType": "application/json", + "text": "{\"features\":[]}" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": -1, + "_transferSize": 11016, + "_error": null + }, + "startedDateTime": "2023-09-08T13:53:49.958Z", + "time": 746.1700000003475, + "timings": { + "blocked": 126.27700000000658, + "dns": -1, + "ssl": -1, + "connect": -1, + "send": 2.3049999999999926, + "wait": 616.7630000002638, + "receive": 0.8250000000771252, + "_blocked_queueing": 0.9430000000065775 + } + }, + { + "request": { + "method": "GET", + "url": "http://localhost:9977/autocomplete?text=arts%20cente&layers=address%2Cvenue%2Cstreet%2Cintersection&focus.point.lat=33.749&focus.point.lon=-84.388&boundary.rect.min_lat=32.066&boundary.rect.min_lon=-86.0856&boundary.rect.max_lat=35.7251&boundary.rect.max_lon=-81.9499", + "httpVersion": "http/2.0", + "queryString": [ + { + "name": "text", + "value": "arts%20cente" + }, + { + "name": "layers", + "value": "address%2Cvenue%2Cstreet%2Cintersection" + }, + { + "name": "focus.point.lat", + "value": "33.749" + }, + { + "name": "focus.point.lon", + "value": "-84.388" + }, + { + "name": "boundary.rect.min_lat", + "value": "32.066" + }, + { + "name": "boundary.rect.min_lon", + "value": "-86.0856" + }, + { + "name": "boundary.rect.max_lat", + "value": "35.7251" + }, + { + "name": "boundary.rect.max_lon", + "value": "-81.9499" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "", + "httpVersion": "http/2.0", + "content": { + "size": 0, + "mimeType": "application/json", + "text": "{\"features\":[]}" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": -1, + "_transferSize": 11020, + "_error": null + }, + "startedDateTime": "2023-09-08T13:53:49.967Z", + "time": 1989.0759999998409, + "timings": { + "blocked": 117.72999999992608, + "dns": -1, + "ssl": -1, + "connect": -1, + "send": 2.0219999999999914, + "wait": 1868.6450000001512, + "receive": 0.6789999997636187, + "_blocked_queueing": 1.1549999999260763 + } + }, + { + "request": { + "method": "GET", + "url": "http://localhost:9977/autocomplete?text=arts%20center&layers=address%2Cvenue%2Cstreet%2Cintersection&focus.point.lat=33.749&focus.point.lon=-84.388&boundary.rect.min_lat=32.066&boundary.rect.min_lon=-86.0856&boundary.rect.max_lat=35.7251&boundary.rect.max_lon=-81.9499", + "httpVersion": "http/2.0", + "queryString": [ + { + "name": "text", + "value": "arts%20center" + }, + { + "name": "layers", + "value": "address%2Cvenue%2Cstreet%2Cintersection" + }, + { + "name": "focus.point.lat", + "value": "33.749" + }, + { + "name": "focus.point.lon", + "value": "-84.388" + }, + { + "name": "boundary.rect.min_lat", + "value": "32.066" + }, + { + "name": "boundary.rect.min_lon", + "value": "-86.0856" + }, + { + "name": "boundary.rect.max_lat", + "value": "35.7251" + }, + { + "name": "boundary.rect.max_lon", + "value": "-81.9499" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "", + "httpVersion": "http/2.0", + "content": { + "size": 12558, + "mimeType": "application/json", + "text": "{\"geocoding\":{\"version\":\"0.2\",\"attribution\":\"https://geocode.earth/guidelines\",\"query\":{\"text\":\"arts center\",\"parser\":\"pelias\",\"parsed_text\":{\"subject\":\"arts center\",\"street\":\"arts center\"},\"size\":10,\"layers\":[\"address\",\"venue\",\"street\",\"intersection\"],\"sources\":[\"openstreetmap\",\"openaddresses\",\"geonames\",\"whosonfirst\",\"uscensus\"],\"private\":false,\"focus.point.lat\":33.749,\"focus.point.lon\":-84.388,\"boundary.rect.min_lat\":32.066,\"boundary.rect.max_lat\":35.7251,\"boundary.rect.min_lon\":-86.0856,\"boundary.rect.max_lon\":-81.9499,\"lang\":{\"name\":\"English\",\"iso6391\":\"en\",\"iso6393\":\"eng\",\"via\":\"default\",\"defaulted\":true},\"querySize\":20},\"engine\":{\"name\":\"Pelias\",\"author\":\"Mapzen\",\"version\":\"1.0\"},\"timestamp\":1694180535585},\"type\":\"FeatureCollection\",\"features\":[{\"geometry\":{\"type\":\"Point\",\"coordinates\":[-84.387125,33.789283]},\"id\":\"MARTA:68900\",\"properties\":{\"layer\":\"stops\",\"source\":\"otp\",\"name\":\"Arts Center Station (901789)\",\"label\":\"Arts Center Station (901789)\"},\"type\":\"Feature\"},{\"geometry\":{\"type\":\"Point\",\"coordinates\":[-84.38712,33.789418]},\"id\":\"CobbLinc:717\",\"properties\":{\"layer\":\"stops\",\"source\":\"otp\",\"name\":\"Arts Center Station (920907)\",\"label\":\"Arts Center Station (920907)\"},\"type\":\"Feature\"},{\"geometry\":{\"type\":\"Point\",\"coordinates\":[-84.387272,33.788828]},\"id\":\"MARTA:112\",\"properties\":{\"layer\":\"stops\",\"source\":\"otp\",\"name\":\"Arts Center Station (906370)\",\"label\":\"Arts Center Station (906370)\"},\"type\":\"Feature\"},{\"geometry\":{\"type\":\"Point\",\"coordinates\":[-84.387414,33.789669]},\"id\":\"MARTA:111\",\"properties\":{\"layer\":\"stops\",\"source\":\"otp\",\"name\":\"Arts Center Station (906369)\",\"label\":\"Arts Center Station (906369)\"},\"type\":\"Feature\"},{\"geometry\":{\"type\":\"Point\",\"coordinates\":[-84.387692,33.789216]},\"id\":\"Xpress:239\",\"properties\":{\"layer\":\"stops\",\"source\":\"otp\",\"name\":\"Arts Center Station (400208)\",\"label\":\"Arts Center Station (400208)\"},\"type\":\"Feature\"},{\"geometry\":{\"type\":\"Point\",\"coordinates\":[-84.386904,33.789285]},\"id\":\"GwinnettCountyTransit:32\",\"properties\":{\"layer\":\"stops\",\"source\":\"otp\",\"name\":\"Arts Center MARTA Station (32)\",\"label\":\"Arts Center MARTA Station (32)\"},\"type\":\"Feature\"},{\"geometry\":{\"type\":\"Point\",\"coordinates\":[-84.386402,33.789213]},\"id\":\"MARTA:99973485\",\"properties\":{\"layer\":\"stops\",\"source\":\"otp\",\"name\":\"Arts Center Way at 15th St (Arts Center Stn - Upper Entrance) (213110)\",\"label\":\"Arts Center Way at 15th St (Arts Center Stn - Upper Entrance) (213110)\"},\"type\":\"Feature\"},{\"geometry\":{\"type\":\"Point\",\"coordinates\":[-84.38568,33.788298]},\"id\":\"MARTA:68056\",\"properties\":{\"layer\":\"stops\",\"source\":\"otp\",\"name\":\"15th St NE at Arts Center Way NE (902514)\",\"label\":\"15th St NE at Arts Center Way NE (902514)\"},\"type\":\"Feature\"},{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[-84.387325,33.789121]},\"properties\":{\"id\":\"node/4172450835\",\"gid\":\"openstreetmap:venue:node/4172450835\",\"layer\":\"venue\",\"source\":\"openstreetmap\",\"source_id\":\"node/4172450835\",\"country_code\":\"US\",\"name\":\"Arts Center\",\"distance\":4.467,\"accuracy\":\"point\",\"country\":\"United States\",\"country_gid\":\"whosonfirst:country:85633793\",\"country_a\":\"USA\",\"region\":\"Georgia\",\"region_gid\":\"whosonfirst:region:85688535\",\"region_a\":\"GA\",\"county\":\"Fulton County\",\"county_gid\":\"whosonfirst:county:102083603\",\"county_a\":\"FU\",\"locality\":\"Atlanta\",\"locality_gid\":\"whosonfirst:locality:85936429\",\"continent\":\"North America\",\"continent_gid\":\"whosonfirst:continent:102191575\",\"label\":\"Arts Center, Atlanta, GA, USA\",\"addendum\":{\"osm\":{\"wheelchair\":\"yes\",\"wikidata\":\"Q4801432\"}}}},{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[-84.385282,33.789341]},\"properties\":{\"id\":\"way/28961767\",\"gid\":\"openstreetmap:venue:way/28961767\",\"layer\":\"venue\",\"source\":\"openstreetmap\",\"source_id\":\"way/28961767\",\"country_code\":\"US\",\"name\":\"Woodruff Arts Center\",\"housenumber\":\"1314\",\"street\":\"Peachtree Street NE\",\"postalcode\":\"30309\",\"distance\":4.498,\"accuracy\":\"point\",\"country\":\"United States\",\"country_gid\":\"whosonfirst:country:85633793\",\"country_a\":\"USA\",\"region\":\"Georgia\",\"region_gid\":\"whosonfirst:region:85688535\",\"region_a\":\"GA\",\"county\":\"Fulton County\",\"county_gid\":\"whosonfirst:county:102083603\",\"county_a\":\"FU\",\"locality\":\"Atlanta\",\"locality_gid\":\"whosonfirst:locality:85936429\",\"continent\":\"North America\",\"continent_gid\":\"whosonfirst:continent:102191575\",\"label\":\"Woodruff Arts Center, Atlanta, GA, USA\",\"addendum\":{\"osm\":{\"wheelchair\":\"yes\",\"wikidata\":\"Q8033228\",\"website\":\"https://woodruffcenter.org/\"}}},\"bbox\":[-84.3859925,33.7885967,-84.3844398,33.7896945]},{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[-84.389529,33.756815]},\"properties\":{\"id\":\"way/252608898\",\"gid\":\"openstreetmap:venue:way/252608898\",\"layer\":\"venue\",\"source\":\"openstreetmap\",\"source_id\":\"way/252608898\",\"country_code\":\"US\",\"name\":\"Rialto Center for the Arts\",\"housenumber\":\"80\",\"street\":\"Forsyth Street NW\",\"postalcode\":\"30303\",\"distance\":0.881,\"accuracy\":\"point\",\"country\":\"United States\",\"country_gid\":\"whosonfirst:country:85633793\",\"country_a\":\"USA\",\"region\":\"Georgia\",\"region_gid\":\"whosonfirst:region:85688535\",\"region_a\":\"GA\",\"county\":\"Fulton County\",\"county_gid\":\"whosonfirst:county:102083603\",\"county_a\":\"FU\",\"locality\":\"Atlanta\",\"locality_gid\":\"whosonfirst:locality:85936429\",\"continent\":\"North America\",\"continent_gid\":\"whosonfirst:continent:102191575\",\"label\":\"Rialto Center for the Arts, Atlanta, GA, USA\",\"addendum\":{\"osm\":{\"wikidata\":\"Q7322136\",\"wikipedia\":\"en:Rialto Center for the Arts\",\"operator\":\"Georgia State University\",\"website\":\"https://rialto.gsu.edu/\",\"phone\":\"+1 404 413 9849\"}}},\"bbox\":[-84.3897872,33.7565707,-84.3892141,33.7570301]},{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[-84.388317,33.789408]},\"properties\":{\"id\":\"way/536720728\",\"gid\":\"openstreetmap:venue:way/536720728\",\"layer\":\"venue\",\"source\":\"openstreetmap\",\"source_id\":\"way/536720728\",\"country_code\":\"US\",\"name\":\"Arts Center Tower\",\"housenumber\":\"1270\",\"street\":\"West Peachtree Street NW\",\"distance\":4.498,\"accuracy\":\"point\",\"country\":\"United States\",\"country_gid\":\"whosonfirst:country:85633793\",\"country_a\":\"USA\",\"region\":\"Georgia\",\"region_gid\":\"whosonfirst:region:85688535\",\"region_a\":\"GA\",\"county\":\"Fulton County\",\"county_gid\":\"whosonfirst:county:102083603\",\"county_a\":\"FU\",\"locality\":\"Atlanta\",\"locality_gid\":\"whosonfirst:locality:85936429\",\"continent\":\"North America\",\"continent_gid\":\"whosonfirst:continent:102191575\",\"label\":\"Arts Center Tower, Atlanta, GA, USA\"},\"bbox\":[-84.3885134,33.7891714,-84.3879231,33.7895687]},{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[-84.389665,33.792892]},\"properties\":{\"id\":\"way/269541904\",\"gid\":\"openstreetmap:venue:way/269541904\",\"layer\":\"venue\",\"source\":\"openstreetmap\",\"source_id\":\"way/269541904\",\"country_code\":\"US\",\"name\":\"Center for Puppetry Arts\",\"housenumber\":\"1404\",\"street\":\"Spring Street NW\",\"postalcode\":\"30309\",\"distance\":4.888,\"accuracy\":\"point\",\"country\":\"United States\",\"country_gid\":\"whosonfirst:country:85633793\",\"country_a\":\"USA\",\"region\":\"Georgia\",\"region_gid\":\"whosonfirst:region:85688535\",\"region_a\":\"GA\",\"county\":\"Fulton County\",\"county_gid\":\"whosonfirst:county:102083603\",\"county_a\":\"FU\",\"locality\":\"Atlanta\",\"locality_gid\":\"whosonfirst:locality:85936429\",\"continent\":\"North America\",\"continent_gid\":\"whosonfirst:continent:102191575\",\"label\":\"Center for Puppetry Arts, Atlanta, GA, USA\",\"addendum\":{\"osm\":{\"wheelchair\":\"yes\",\"website\":\"https://puppet.org/\",\"phone\":\"+1 404 873 3391\",\"opening_hours\":\"Tu-Fr 09:00-17:00; Sa 10:00-17:00; Su 12:00-17:00\"}}},\"bbox\":[-84.3898377,33.7925985,-84.3893181,33.7932157]},{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[-84.386897,33.789283]},\"properties\":{\"id\":\"way/269637886\",\"gid\":\"openstreetmap:venue:way/269637886\",\"layer\":\"venue\",\"source\":\"openstreetmap\",\"source_id\":\"way/269637886\",\"country_code\":\"US\",\"name\":\"MARTA Arts Center Station\",\"distance\":4.485,\"accuracy\":\"point\",\"country\":\"United States\",\"country_gid\":\"whosonfirst:country:85633793\",\"country_a\":\"USA\",\"region\":\"Georgia\",\"region_gid\":\"whosonfirst:region:85688535\",\"region_a\":\"GA\",\"county\":\"Fulton County\",\"county_gid\":\"whosonfirst:county:102083603\",\"county_a\":\"FU\",\"locality\":\"Atlanta\",\"locality_gid\":\"whosonfirst:locality:85936429\",\"continent\":\"North America\",\"continent_gid\":\"whosonfirst:continent:102191575\",\"label\":\"MARTA Arts Center Station, Atlanta, GA, USA\"},\"bbox\":[-84.3872294,33.788859,-84.3867044,33.7898455]},{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[-84.416912,33.744017]},\"properties\":{\"id\":\"way/802755819\",\"gid\":\"openstreetmap:venue:way/802755819\",\"layer\":\"venue\",\"source\":\"openstreetmap\",\"source_id\":\"way/802755819\",\"country_code\":\"US\",\"name\":\"Ray Charles Proformance Arts Center\",\"distance\":2.733,\"accuracy\":\"point\",\"country\":\"United States\",\"country_gid\":\"whosonfirst:country:85633793\",\"country_a\":\"USA\",\"region\":\"Georgia\",\"region_gid\":\"whosonfirst:region:85688535\",\"region_a\":\"GA\",\"county\":\"Fulton County\",\"county_gid\":\"whosonfirst:county:102083603\",\"county_a\":\"FU\",\"locality\":\"Atlanta\",\"locality_gid\":\"whosonfirst:locality:85936429\",\"neighbourhood\":\"Harris Chiles\",\"neighbourhood_gid\":\"whosonfirst:neighbourhood:1108798423\",\"continent\":\"North America\",\"continent_gid\":\"whosonfirst:continent:102191575\",\"label\":\"Ray Charles Proformance Arts Center, Atlanta, GA, USA\"},\"bbox\":[-84.417336,33.7436268,-84.4164033,33.7442824]},{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[-84.345203,33.781772]},\"properties\":{\"id\":\"node/367912794\",\"gid\":\"openstreetmap:venue:node/367912794\",\"layer\":\"venue\",\"source\":\"openstreetmap\",\"source_id\":\"node/367912794\",\"country_code\":\"US\",\"name\":\"Callanwolde Fine Arts Center\",\"housenumber\":\"980\",\"street\":\"Briarcliff Road NE\",\"distance\":5.385,\"accuracy\":\"point\",\"country\":\"United States\",\"country_gid\":\"whosonfirst:country:85633793\",\"country_a\":\"USA\",\"region\":\"Georgia\",\"region_gid\":\"whosonfirst:region:85688535\",\"region_a\":\"GA\",\"county\":\"DeKalb County\",\"county_gid\":\"whosonfirst:county:102084539\",\"county_a\":\"DA\",\"locality\":\"Druid Hills\",\"locality_gid\":\"whosonfirst:locality:85937251\",\"continent\":\"North America\",\"continent_gid\":\"whosonfirst:continent:102191575\",\"label\":\"Callanwolde Fine Arts Center, Druid Hills, GA, USA\",\"addendum\":{\"osm\":{\"website\":\"https://www.callanwolde.org/\",\"phone\":\"+1-404-872-5338\",\"opening_hours\":\"Mo-Th 09:00-17:00; Fr-Sa 09:00-12:00\"}}}},{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[-84.399209,33.774791]},\"properties\":{\"id\":\"way/43332730\",\"gid\":\"openstreetmap:venue:way/43332730\",\"layer\":\"venue\",\"source\":\"openstreetmap\",\"source_id\":\"way/43332730\",\"country_code\":\"US\",\"name\":\"Robert H. Ferst Center for the Arts\",\"distance\":3.053,\"accuracy\":\"point\",\"country\":\"United States\",\"country_gid\":\"whosonfirst:country:85633793\",\"country_a\":\"USA\",\"region\":\"Georgia\",\"region_gid\":\"whosonfirst:region:85688535\",\"region_a\":\"GA\",\"county\":\"Fulton County\",\"county_gid\":\"whosonfirst:county:102083603\",\"county_a\":\"FU\",\"locality\":\"Atlanta\",\"locality_gid\":\"whosonfirst:locality:85936429\",\"neighbourhood\":\"Georgia Tech\",\"neighbourhood_gid\":\"whosonfirst:neighbourhood:1108798439\",\"continent\":\"North America\",\"continent_gid\":\"whosonfirst:continent:102191575\",\"label\":\"Robert H. Ferst Center for the Arts, Atlanta, GA, USA\",\"addendum\":{\"osm\":{\"wikidata\":\"Q5445560\"}}},\"bbox\":[-84.3994357,33.7747789,-84.3989903,33.7754228]},{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[-84.392316,33.750426]},\"properties\":{\"id\":\"node/3499486829\",\"gid\":\"openstreetmap:venue:node/3499486829\",\"layer\":\"venue\",\"source\":\"openstreetmap\",\"source_id\":\"node/3499486829\",\"country_code\":\"US\",\"name\":\"FUSE Arts Center (C4 Atlanta)\",\"housenumber\":\"132\",\"street\":\"Mitchell Street SW\",\"postalcode\":\"30303\",\"distance\":0.43,\"accuracy\":\"point\",\"country\":\"United States\",\"country_gid\":\"whosonfirst:country:85633793\",\"country_a\":\"USA\",\"region\":\"Georgia\",\"region_gid\":\"whosonfirst:region:85688535\",\"region_a\":\"GA\",\"county\":\"Fulton County\",\"county_gid\":\"whosonfirst:county:102083603\",\"county_a\":\"FU\",\"locality\":\"Atlanta\",\"locality_gid\":\"whosonfirst:locality:85936429\",\"continent\":\"North America\",\"continent_gid\":\"whosonfirst:continent:102191575\",\"label\":\"FUSE Arts Center (C4 Atlanta), Atlanta, GA, USA\",\"addendum\":{\"osm\":{\"website\":\"https://www.c4atlanta.org\",\"phone\":\"+1-404-969-2787\"}}}}],\"bbox\":[-84.417336,33.7436268,-84.345203,33.7932157],\"isomorphicMapzenSearchQuery\":{\"api_key\":\"ge-0624346c114543d5\",\"text\":\"arts center\",\"layers\":\"address,venue,street,intersection\",\"focus.point.lat\":33.749,\"focus.point.lon\":-84.388,\"boundary.rect.min_lat\":32.066,\"boundary.rect.min_lon\":-86.0856,\"boundary.rect.max_lat\":35.7251,\"boundary.rect.max_lon\":-81.9499}}" + }, + "redirectURL": "", + "headersSize": -1, + "bodySize": -1, + "_transferSize": 12959, + "_error": null + }, + "startedDateTime": "2023-09-08T13:53:49.974Z", + "time": 1773.866000000453, + "timings": { + "blocked": 111.16500000039605, + "dns": -1, + "ssl": -1, + "connect": -1, + "send": 1.6709999999999923, + "wait": 1659.9850000000804, + "receive": 1.044999999976426, + "_blocked_queueing": 1.194000000396045 + } + } + ] + } +} \ No newline at end of file diff --git a/percy/geocoder-mock-normal.har b/percy/geocoder-mock-normal.har new file mode 100644 index 000000000..e33efa664 --- /dev/null +++ b/percy/geocoder-mock-normal.har @@ -0,0 +1,1099 @@ +{ + "log": { + "version": "1.2", + "creator": { + "name": "WebInspector", + "version": "537.36" + }, + "pages": [], + "entries": [ + { + "request": { + "method": "GET", + "url": "http://localhost:9977/autocomplete?text=O&layers=address%2Cvenue%2Cstreet%2Cintersection&focus.point.lat=33.749&focus.point.lon=-84.388&boundary.rect.min_lat=32.066&boundary.rect.min_lon=-86.0856&boundary.rect.max_lat=35.7251&boundary.rect.max_lon=-81.9499", + "httpVersion": "http/2.0", + "queryString": [ + { + "name": "text", + "value": "O" + }, + { + "name": "layers", + "value": "address%2Cvenue%2Cstreet%2Cintersection" + }, + { + "name": "focus.point.lat", + "value": "33.749" + }, + { + "name": "focus.point.lon", + "value": "-84.388" + }, + { + "name": "boundary.rect.min_lat", + "value": "32.066" + }, + { + "name": "boundary.rect.min_lon", + "value": "-86.0856" + }, + { + "name": "boundary.rect.max_lat", + "value": "35.7251" + }, + { + "name": "boundary.rect.max_lon", + "value": "-81.9499" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "http/2.0", + "content": { + "size": 0, + "mimeType": "application/json", + "text": "{\"features\":[]}" + }, + "headersSize": -1, + "bodySize": -1, + "_transferSize": 12785, + "_error": null + }, + "startedDateTime": "2023-09-08T14:07:22.644Z", + "time": 2125.9739999999583, + "timings": { + "blocked": 15.940999999456107, + "dns": 73.76899999999999, + "ssl": 1088.1299999999999, + "connect": 1244.485, + "send": 4.813000000000102, + "wait": 786.1689999998994, + "receive": 0.7970000006025657, + "_blocked_queueing": 1.1159999994561076 + } + }, + { + "request": { + "method": "GET", + "url": "http://localhost:9977/autocomplete?text=Op&layers=address%2Cvenue%2Cstreet%2Cintersection&focus.point.lat=33.749&focus.point.lon=-84.388&boundary.rect.min_lat=32.066&boundary.rect.min_lon=-86.0856&boundary.rect.max_lat=35.7251&boundary.rect.max_lon=-81.9499", + "httpVersion": "http/2.0", + "queryString": [ + { + "name": "text", + "value": "Op" + }, + { + "name": "layers", + "value": "address%2Cvenue%2Cstreet%2Cintersection" + }, + { + "name": "focus.point.lat", + "value": "33.749" + }, + { + "name": "focus.point.lon", + "value": "-84.388" + }, + { + "name": "boundary.rect.min_lat", + "value": "32.066" + }, + { + "name": "boundary.rect.min_lon", + "value": "-86.0856" + }, + { + "name": "boundary.rect.max_lat", + "value": "35.7251" + }, + { + "name": "boundary.rect.max_lon", + "value": "-81.9499" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "", + "httpVersion": "http/2.0", + "content": { + "size": 0, + "mimeType": "application/json", + "text": "{\"features\":[]}" + }, + "headersSize": -1, + "bodySize": -1, + "_transferSize": 11262, + "_error": null + }, + "startedDateTime": "2023-09-08T14:07:22.656Z", + "time": 2307.477999999719, + "timings": { + "blocked": 1250.2649999995253, + "dns": -1, + "ssl": -1, + "connect": -1, + "send": 2.7480000000000473, + "wait": 1053.786999999859, + "receive": 0.6780000003345776, + "_blocked_queueing": 3.2949999995253165 + } + }, + { + "request": { + "method": "GET", + "url": "http://localhost:9977/autocomplete?text=Opu&layers=address%2Cvenue%2Cstreet%2Cintersection&focus.point.lat=33.749&focus.point.lon=-84.388&boundary.rect.min_lat=32.066&boundary.rect.min_lon=-86.0856&boundary.rect.max_lat=35.7251&boundary.rect.max_lon=-81.9499", + "httpVersion": "http/2.0", + "queryString": [ + { + "name": "text", + "value": "Opu" + }, + { + "name": "layers", + "value": "address%2Cvenue%2Cstreet%2Cintersection" + }, + { + "name": "focus.point.lat", + "value": "33.749" + }, + { + "name": "focus.point.lon", + "value": "-84.388" + }, + { + "name": "boundary.rect.min_lat", + "value": "32.066" + }, + { + "name": "boundary.rect.min_lon", + "value": "-86.0856" + }, + { + "name": "boundary.rect.max_lat", + "value": "35.7251" + }, + { + "name": "boundary.rect.max_lon", + "value": "-81.9499" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "", + "httpVersion": "http/2.0", + "content": { + "size": 0, + "mimeType": "application/json", + "text": "{\"features\":[]}" + }, + "headersSize": -1, + "bodySize": -1, + "_transferSize": 5615, + "_error": null + }, + "startedDateTime": "2023-09-08T14:07:22.663Z", + "time": 2034.0139999998428, + "timings": { + "blocked": 1243.6879999990954, + "dns": -1, + "ssl": -1, + "connect": -1, + "send": 2.394999999999982, + "wait": 787.3710000003423, + "receive": 0.5600000004051253, + "_blocked_queueing": 3.059999999095453 + } + }, + { + "request": { + "method": "GET", + "url": "http://localhost:9977/autocomplete?text=Opus&layers=address%2Cvenue%2Cstreet%2Cintersection&focus.point.lat=33.749&focus.point.lon=-84.388&boundary.rect.min_lat=32.066&boundary.rect.min_lon=-86.0856&boundary.rect.max_lat=35.7251&boundary.rect.max_lon=-81.9499", + "httpVersion": "http/2.0", + "queryString": [ + { + "name": "text", + "value": "Opus" + }, + { + "name": "layers", + "value": "address%2Cvenue%2Cstreet%2Cintersection" + }, + { + "name": "focus.point.lat", + "value": "33.749" + }, + { + "name": "focus.point.lon", + "value": "-84.388" + }, + { + "name": "boundary.rect.min_lat", + "value": "32.066" + }, + { + "name": "boundary.rect.min_lon", + "value": "-86.0856" + }, + { + "name": "boundary.rect.max_lat", + "value": "35.7251" + }, + { + "name": "boundary.rect.max_lon", + "value": "-81.9499" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "", + "httpVersion": "http/2.0", + "content": { + "size": 0, + "mimeType": "application/json", + "text": "{\"features\":[]}" + }, + "headersSize": -1, + "bodySize": -1, + "_transferSize": 5619, + "_error": null + }, + "startedDateTime": "2023-09-08T14:07:22.666Z", + "time": 1865.16599999959, + "timings": { + "blocked": 1240.8119999999617, + "dns": -1, + "ssl": -1, + "connect": -1, + "send": 2.0030000000001564, + "wait": 621.6149999996674, + "receive": 0.735999999960768, + "_blocked_queueing": 4.472999999961758 + } + }, + { + "request": { + "method": "GET", + "url": "http://localhost:9977/autocomplete?text=Opus%20&layers=address%2Cvenue%2Cstreet%2Cintersection&focus.point.lat=33.749&focus.point.lon=-84.388&boundary.rect.min_lat=32.066&boundary.rect.min_lon=-86.0856&boundary.rect.max_lat=35.7251&boundary.rect.max_lon=-81.9499", + "httpVersion": "http/2.0", + "queryString": [ + { + "name": "text", + "value": "Opus%20" + }, + { + "name": "layers", + "value": "address%2Cvenue%2Cstreet%2Cintersection" + }, + { + "name": "focus.point.lat", + "value": "33.749" + }, + { + "name": "focus.point.lon", + "value": "-84.388" + }, + { + "name": "boundary.rect.min_lat", + "value": "32.066" + }, + { + "name": "boundary.rect.min_lon", + "value": "-86.0856" + }, + { + "name": "boundary.rect.max_lat", + "value": "35.7251" + }, + { + "name": "boundary.rect.max_lon", + "value": "-81.9499" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "", + "httpVersion": "http/2.0", + "content": { + "size": 0, + "mimeType": "application/json", + "text": "{\"features\":[]}" + }, + "headersSize": -1, + "bodySize": -1, + "_transferSize": 5621, + "_error": null + }, + "startedDateTime": "2023-09-08T14:07:22.676Z", + "time": 2317.60100000065, + "timings": { + "blocked": 1231.086000000746, + "dns": -1, + "ssl": -1, + "connect": -1, + "send": 1.884999999999991, + "wait": 1083.7900000002057, + "receive": 0.8399999996981933, + "_blocked_queueing": 8.215000000745931 + } + }, + { + "request": { + "method": "GET", + "url": "http://localhost:9977/autocomplete?text=Opus%20M&layers=address%2Cvenue%2Cstreet%2Cintersection&focus.point.lat=33.749&focus.point.lon=-84.388&boundary.rect.min_lat=32.066&boundary.rect.min_lon=-86.0856&boundary.rect.max_lat=35.7251&boundary.rect.max_lon=-81.9499", + "httpVersion": "http/2.0", + "queryString": [ + { + "name": "text", + "value": "Opus%20M" + }, + { + "name": "layers", + "value": "address%2Cvenue%2Cstreet%2Cintersection" + }, + { + "name": "focus.point.lat", + "value": "33.749" + }, + { + "name": "focus.point.lon", + "value": "-84.388" + }, + { + "name": "boundary.rect.min_lat", + "value": "32.066" + }, + { + "name": "boundary.rect.min_lon", + "value": "-86.0856" + }, + { + "name": "boundary.rect.max_lat", + "value": "35.7251" + }, + { + "name": "boundary.rect.max_lon", + "value": "-81.9499" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "", + "httpVersion": "http/2.0", + "content": { + "size": 0, + "mimeType": "application/json", + "text": "{\"features\":[]}" + }, + "headersSize": -1, + "bodySize": -1, + "_transferSize": 3972, + "_error": null + }, + "startedDateTime": "2023-09-08T14:07:22.679Z", + "time": 1605.46499999964, + "timings": { + "blocked": 1227.7660000004744, + "dns": -1, + "ssl": -1, + "connect": -1, + "send": 2.2730000000001382, + "wait": 339.82599999991635, + "receive": 35.59999999924912, + "_blocked_queueing": 5.936000000474451 + } + }, + { + "request": { + "method": "GET", + "url": "http://localhost:9977/autocomplete?text=Opus%20Mu&layers=address%2Cvenue%2Cstreet%2Cintersection&focus.point.lat=33.749&focus.point.lon=-84.388&boundary.rect.min_lat=32.066&boundary.rect.min_lon=-86.0856&boundary.rect.max_lat=35.7251&boundary.rect.max_lon=-81.9499", + "httpVersion": "http/2.0", + "queryString": [ + { + "name": "text", + "value": "Opus%20Mu" + }, + { + "name": "layers", + "value": "address%2Cvenue%2Cstreet%2Cintersection" + }, + { + "name": "focus.point.lat", + "value": "33.749" + }, + { + "name": "focus.point.lon", + "value": "-84.388" + }, + { + "name": "boundary.rect.min_lat", + "value": "32.066" + }, + { + "name": "boundary.rect.min_lon", + "value": "-86.0856" + }, + { + "name": "boundary.rect.max_lat", + "value": "35.7251" + }, + { + "name": "boundary.rect.max_lon", + "value": "-81.9499" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "", + "httpVersion": "http/2.0", + "content": { + "size": 0, + "mimeType": "application/json", + "text": "{\"features\":[]}" + }, + "headersSize": -1, + "bodySize": -1, + "_transferSize": 2370, + "_error": null + }, + "startedDateTime": "2023-09-08T14:07:22.682Z", + "time": 1566.6149999997288, + "timings": { + "blocked": 1225.0449999998693, + "dns": -1, + "ssl": -1, + "connect": -1, + "send": 2.119999999999891, + "wait": 338.85400000000004, + "receive": 0.5959999998594867, + "_blocked_queueing": 3.5189999998692656 + } + }, + { + "request": { + "method": "GET", + "url": "http://localhost:9977/autocomplete?text=Opus%20Mus&layers=address%2Cvenue%2Cstreet%2Cintersection&focus.point.lat=33.749&focus.point.lon=-84.388&boundary.rect.min_lat=32.066&boundary.rect.min_lon=-86.0856&boundary.rect.max_lat=35.7251&boundary.rect.max_lon=-81.9499", + "httpVersion": "http/2.0", + "queryString": [ + { + "name": "text", + "value": "Opus%20Mus" + }, + { + "name": "layers", + "value": "address%2Cvenue%2Cstreet%2Cintersection" + }, + { + "name": "focus.point.lat", + "value": "33.749" + }, + { + "name": "focus.point.lon", + "value": "-84.388" + }, + { + "name": "boundary.rect.min_lat", + "value": "32.066" + }, + { + "name": "boundary.rect.min_lon", + "value": "-86.0856" + }, + { + "name": "boundary.rect.max_lat", + "value": "35.7251" + }, + { + "name": "boundary.rect.max_lon", + "value": "-81.9499" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "", + "httpVersion": "http/2.0", + "content": { + "size": 0, + "mimeType": "application/json", + "text": "{\"features\":[]}" + }, + "headersSize": -1, + "bodySize": -1, + "_transferSize": 2367, + "_error": null + }, + "startedDateTime": "2023-09-08T14:07:22.690Z", + "time": 2356.9259999994756, + "timings": { + "blocked": 1217.2119999999413, + "dns": -1, + "ssl": -1, + "connect": -1, + "send": 1.7999999999999545, + "wait": 1136.8809999999824, + "receive": 1.0329999995519756, + "_blocked_queueing": 4.3009999999412685 + } + }, + { + "request": { + "method": "GET", + "url": "http://localhost:9977/autocomplete?text=Opus%20Musi&layers=address%2Cvenue%2Cstreet%2Cintersection&focus.point.lat=33.749&focus.point.lon=-84.388&boundary.rect.min_lat=32.066&boundary.rect.min_lon=-86.0856&boundary.rect.max_lat=35.7251&boundary.rect.max_lon=-81.9499", + "httpVersion": "http/2.0", + "queryString": [ + { + "name": "text", + "value": "Opus%20Musi" + }, + { + "name": "layers", + "value": "address%2Cvenue%2Cstreet%2Cintersection" + }, + { + "name": "focus.point.lat", + "value": "33.749" + }, + { + "name": "focus.point.lon", + "value": "-84.388" + }, + { + "name": "boundary.rect.min_lat", + "value": "32.066" + }, + { + "name": "boundary.rect.min_lon", + "value": "-86.0856" + }, + { + "name": "boundary.rect.max_lat", + "value": "35.7251" + }, + { + "name": "boundary.rect.max_lon", + "value": "-81.9499" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "", + "httpVersion": "http/2.0", + "content": { + "size": 0, + "mimeType": "application/json", + "text": "{\"features\":[]}" + }, + "headersSize": -1, + "bodySize": -1, + "_transferSize": 2379, + "_error": null + }, + "startedDateTime": "2023-09-08T14:07:22.699Z", + "time": 2625.739999999496, + "timings": { + "blocked": 1208.077999999743, + "dns": -1, + "ssl": -1, + "connect": -1, + "send": 1.5919999999998709, + "wait": 1415.6090000001211, + "receive": 0.46099999963189475, + "_blocked_queueing": 3.523999999742955 + } + }, + { + "request": { + "method": "GET", + "url": "http://localhost:9977/autocomplete?text=Opus%20Music&layers=address%2Cvenue%2Cstreet%2Cintersection&focus.point.lat=33.749&focus.point.lon=-84.388&boundary.rect.min_lat=32.066&boundary.rect.min_lon=-86.0856&boundary.rect.max_lat=35.7251&boundary.rect.max_lon=-81.9499", + "httpVersion": "http/2.0", + "queryString": [ + { + "name": "text", + "value": "Opus%20Music" + }, + { + "name": "layers", + "value": "address%2Cvenue%2Cstreet%2Cintersection" + }, + { + "name": "focus.point.lat", + "value": "33.749" + }, + { + "name": "focus.point.lon", + "value": "-84.388" + }, + { + "name": "boundary.rect.min_lat", + "value": "32.066" + }, + { + "name": "boundary.rect.min_lon", + "value": "-86.0856" + }, + { + "name": "boundary.rect.max_lat", + "value": "35.7251" + }, + { + "name": "boundary.rect.max_lon", + "value": "-81.9499" + } + ], + "headersSize": -1, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "", + "httpVersion": "http/2.0", + "content": { + "size": 5231, + "mimeType": "application/json", + "text": "{\"geocoding\":{\"version\":\"0.2\",\"attribution\":\"https://geocode.earth/guidelines\",\"query\":{\"text\":\"Opus\",\"parser\":\"pelias\",\"parsed_text\":{\"subject\":\"Opus\"},\"size\":10,\"layers\":[\"address\",\"venue\",\"street\",\"intersection\"],\"sources\":[\"openstreetmap\",\"openaddresses\",\"geonames\",\"whosonfirst\",\"uscensus\"],\"private\":false,\"focus.point.lat\":33.749,\"focus.point.lon\":-84.388,\"boundary.rect.min_lat\":32.066,\"boundary.rect.max_lat\":35.7251,\"boundary.rect.min_lon\":-86.0856,\"boundary.rect.max_lon\":-81.9499,\"lang\":{\"name\":\"English\",\"iso6391\":\"en\",\"iso6393\":\"eng\",\"via\":\"default\",\"defaulted\":true},\"querySize\":20},\"engine\":{\"name\":\"Pelias\",\"author\":\"Mapzen\",\"version\":\"1.0\"},\"timestamp\":1694202052257},\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[-84.300178,33.77505]},\"properties\":{\"id\":\"node/556611976\",\"gid\":\"openstreetmap:venue:node/556611976\",\"layer\":\"venue\",\"source\":\"openstreetmap\",\"source_id\":\"node/556611976\",\"country_code\":\"US\",\"name\":\"Opus Music Store\",\"housenumber\":\"308D\",\"distance\":8.629,\"accuracy\":\"point\",\"country\":\"United States\",\"country_gid\":\"whosonfirst:country:85633793\",\"country_a\":\"USA\",\"region\":\"Georgia\",\"region_gid\":\"whosonfirst:region:85688535\",\"region_a\":\"GA\",\"county\":\"DeKalb County\",\"county_gid\":\"whosonfirst:county:102084539\",\"county_a\":\"DA\",\"locality\":\"Decatur\",\"locality_gid\":\"whosonfirst:locality:85936441\",\"continent\":\"North America\",\"continent_gid\":\"whosonfirst:continent:102191575\",\"label\":\"Opus Music Store, Decatur, GA, USA\",\"addendum\":{\"osm\":{\"website\":\"http://www.opusmusicstore.com/\",\"phone\":\"+1 404 370 0507\"}}}},{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[-84.385934,33.787145]},\"properties\":{\"id\":\"way/885660365\",\"gid\":\"openstreetmap:venue:way/885660365\",\"layer\":\"venue\",\"source\":\"openstreetmap\",\"source_id\":\"way/885660365\",\"country_code\":\"US\",\"name\":\"2 Opus Place (construction)\",\"distance\":4.251,\"accuracy\":\"point\",\"country\":\"United States\",\"country_gid\":\"whosonfirst:country:85633793\",\"country_a\":\"USA\",\"region\":\"Georgia\",\"region_gid\":\"whosonfirst:region:85688535\",\"region_a\":\"GA\",\"county\":\"Fulton County\",\"county_gid\":\"whosonfirst:county:102083603\",\"county_a\":\"FU\",\"locality\":\"Atlanta\",\"locality_gid\":\"whosonfirst:locality:85936429\",\"continent\":\"North America\",\"continent_gid\":\"whosonfirst:continent:102191575\",\"label\":\"2 Opus Place (construction), Atlanta, GA, USA\"},\"bbox\":[-84.3866911,33.7867611,-84.385266,33.7874624]},{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[-85.211688,35.00657]},\"properties\":{\"id\":\"way/51791114\",\"gid\":\"openstreetmap:venue:way/51791114\",\"layer\":\"venue\",\"source\":\"openstreetmap\",\"source_id\":\"way/51791114\",\"country_code\":\"US\",\"name\":\"Opus Inspection\",\"distance\":159.136,\"accuracy\":\"point\",\"country\":\"United States\",\"country_gid\":\"whosonfirst:country:85633793\",\"country_a\":\"USA\",\"region\":\"Tennessee\",\"region_gid\":\"whosonfirst:region:85688701\",\"region_a\":\"TN\",\"county\":\"Hamilton County\",\"county_gid\":\"whosonfirst:county:102087185\",\"county_a\":\"HL\",\"locality\":\"Chattanooga\",\"locality_gid\":\"whosonfirst:locality:101723043\",\"continent\":\"North America\",\"continent_gid\":\"whosonfirst:continent:102191575\",\"label\":\"Opus Inspection, Chattanooga, TN, USA\"},\"bbox\":[-85.2118453,35.0064715,-85.21153,35.0067042]},{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[-82.230045,33.55809]},\"properties\":{\"id\":\"w577848242-n5538625175-w577848271\",\"gid\":\"openstreetmap:intersection:w577848242-n5538625175-w577848271\",\"layer\":\"intersection\",\"source\":\"openstreetmap\",\"source_id\":\"w577848242-n5538625175-w577848271\",\"country_code\":\"US\",\"name\":\"Bent Creek Drive & Magnum Opus Way\",\"street\":\"Bent Creek Drive\",\"distance\":201.084,\"accuracy\":\"centroid\",\"country\":\"United States\",\"country_gid\":\"whosonfirst:country:85633793\",\"country_a\":\"USA\",\"region\":\"Georgia\",\"region_gid\":\"whosonfirst:region:85688535\",\"region_a\":\"GA\",\"county\":\"Columbia County\",\"county_gid\":\"whosonfirst:county:102082315\",\"county_a\":\"CI\",\"continent\":\"North America\",\"continent_gid\":\"whosonfirst:continent:102191575\",\"label\":\"Bent Creek Drive & Magnum Opus Way, Columbia County, GA, USA\"}},{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[-82.22882,33.559832]},\"properties\":{\"id\":\"polyline:18601022\",\"gid\":\"openstreetmap:street:polyline:18601022\",\"layer\":\"street\",\"source\":\"openstreetmap\",\"source_id\":\"polyline:18601022\",\"country_code\":\"US\",\"name\":\"Magnum Opus Way\",\"street\":\"Magnum Opus Way\",\"distance\":201.175,\"accuracy\":\"centroid\",\"country\":\"United States\",\"country_gid\":\"whosonfirst:country:85633793\",\"country_a\":\"USA\",\"region\":\"Georgia\",\"region_gid\":\"whosonfirst:region:85688535\",\"region_a\":\"GA\",\"county\":\"Columbia County\",\"county_gid\":\"whosonfirst:county:102082315\",\"county_a\":\"CI\",\"continent\":\"North America\",\"continent_gid\":\"whosonfirst:continent:102191575\",\"label\":\"Magnum Opus Way, Columbia County, GA, USA\"},\"bbox\":[-82.230045,33.55809,-82.227691,33.561696]}],\"bbox\":[-85.2118453,33.55809,-82.227691,35.0067042],\"isomorphicMapzenSearchQuery\":{\"api_key\":\"ge-0624346c114543d5\",\"text\":\"Opus\",\"layers\":\"address,venue,street,intersection\",\"focus.point.lat\":33.749,\"focus.point.lon\":-84.388,\"boundary.rect.min_lat\":32.066,\"boundary.rect.min_lon\":-86.0856,\"boundary.rect.max_lat\":35.7251,\"boundary.rect.max_lon\":-81.9499}}" + }, + "headersSize": -1, + "bodySize": -1, + "_transferSize": 2351, + "_error": null + }, + "startedDateTime": "2023-09-08T14:07:22.703Z", + "time": 2622.787999999673, + "timings": { + "blocked": 1203.8749999999998, + "dns": -1, + "ssl": -1, + "connect": -1, + "send": 1.731999999999971, + "wait": 1416.4810000000764, + "receive": 0.699999999596912, + "_blocked_queueing": 3.0169999999998254 + } + }, + + { + "request": { + "bodySize": 0, + "method": "GET", + "url": "http://localhost:9977/autocomplete?text=9&layers=address%2Cvenue%2Cstreet%2Cintersection&focus.point.lat=33.749&focus.point.lon=-84.388&boundary.rect.min_lat=32.066&boundary.rect.min_lon=-86.0856&boundary.rect.max_lat=35.7251&boundary.rect.max_lon=-81.9499", + "httpVersion": "HTTP/2", + "queryString": [ + { + "name": "text", + "value": "9" + }, + { + "name": "layers", + "value": "address,venue,street,intersection" + }, + { + "name": "focus.point.lat", + "value": "33.749" + }, + { + "name": "focus.point.lon", + "value": "-84.388" + }, + { + "name": "boundary.rect.min_lat", + "value": "32.066" + }, + { + "name": "boundary.rect.min_lon", + "value": "-86.0856" + }, + { + "name": "boundary.rect.max_lat", + "value": "35.7251" + }, + { + "name": "boundary.rect.max_lon", + "value": "-81.9499" + } + ], + "headersSize": 730 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/2", + "content": { + "mimeType": "application/json", + "size": 0, + "text": "{\"features\":[]}" + }, + "headersSize": 0, + "bodySize": 0 + }, + "cache": {}, + "timings": { + "blocked": 0, + "dns": 0, + "connect": 0, + "ssl": 0, + "send": 0, + "wait": 0, + "receive": 0 + }, + "time": 0 + }, + { + "request": { + "bodySize": 0, + "method": "GET", + "url": "http://localhost:9977/autocomplete?text=90&layers=address%2Cvenue%2Cstreet%2Cintersection&focus.point.lat=33.749&focus.point.lon=-84.388&boundary.rect.min_lat=32.066&boundary.rect.min_lon=-86.0856&boundary.rect.max_lat=35.7251&boundary.rect.max_lon=-81.9499", + "httpVersion": "HTTP/2", + "queryString": [ + { + "name": "text", + "value": "90" + }, + { + "name": "layers", + "value": "address,venue,street,intersection" + }, + { + "name": "focus.point.lat", + "value": "33.749" + }, + { + "name": "focus.point.lon", + "value": "-84.388" + }, + { + "name": "boundary.rect.min_lat", + "value": "32.066" + }, + { + "name": "boundary.rect.min_lon", + "value": "-86.0856" + }, + { + "name": "boundary.rect.max_lat", + "value": "35.7251" + }, + { + "name": "boundary.rect.max_lon", + "value": "-81.9499" + } + ], + "headersSize": 731 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/2", + "content": { + "mimeType": "application/json", + "size": 0, + "text": "{\"features\":[]}" + }, + "headersSize": 0, + "bodySize": 0 + }, + "cache": {}, + "timings": { + "blocked": 0, + "dns": 0, + "connect": 0, + "ssl": 0, + "send": 0, + "wait": 0, + "receive": 0 + }, + "time": 0 + }, + { + "request": { + "bodySize": 0, + "method": "GET", + "url": "http://localhost:9977/autocomplete?text=908&layers=address%2Cvenue%2Cstreet%2Cintersection&focus.point.lat=33.749&focus.point.lon=-84.388&boundary.rect.min_lat=32.066&boundary.rect.min_lon=-86.0856&boundary.rect.max_lat=35.7251&boundary.rect.max_lon=-81.9499", + "httpVersion": "HTTP/2", + "queryString": [ + { + "name": "text", + "value": "908" + }, + { + "name": "layers", + "value": "address,venue,street,intersection" + }, + { + "name": "focus.point.lat", + "value": "33.749" + }, + { + "name": "focus.point.lon", + "value": "-84.388" + }, + { + "name": "boundary.rect.min_lat", + "value": "32.066" + }, + { + "name": "boundary.rect.min_lon", + "value": "-86.0856" + }, + { + "name": "boundary.rect.max_lat", + "value": "35.7251" + }, + { + "name": "boundary.rect.max_lon", + "value": "-81.9499" + } + ], + "headersSize": 732 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/2", + "content": { + "mimeType": "application/json", + "size": 0, + "text": "{\"features\":[]}" + }, + "headersSize": 0, + "bodySize": 0 + }, + "cache": {}, + "timings": { + "blocked": 0, + "dns": 0, + "connect": 0, + "ssl": 0, + "send": 0, + "wait": 0, + "receive": 0 + }, + "time": 0 + }, + { + "request": { + "bodySize": 0, + "method": "GET", + "url": "http://localhost:9977/autocomplete?text=9089&layers=address%2Cvenue%2Cstreet%2Cintersection&focus.point.lat=33.749&focus.point.lon=-84.388&boundary.rect.min_lat=32.066&boundary.rect.min_lon=-86.0856&boundary.rect.max_lat=35.7251&boundary.rect.max_lon=-81.9499", + "httpVersion": "HTTP/2", + "queryString": [ + { + "name": "text", + "value": "9089" + }, + { + "name": "layers", + "value": "address,venue,street,intersection" + }, + { + "name": "focus.point.lat", + "value": "33.749" + }, + { + "name": "focus.point.lon", + "value": "-84.388" + }, + { + "name": "boundary.rect.min_lat", + "value": "32.066" + }, + { + "name": "boundary.rect.min_lon", + "value": "-86.0856" + }, + { + "name": "boundary.rect.max_lat", + "value": "35.7251" + }, + { + "name": "boundary.rect.max_lon", + "value": "-81.9499" + } + ], + "headersSize": 733 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/2", + "content": { + "mimeType": "application/json", + "size": 0, + "text": "{\"features\":[]}" + }, + "headersSize": 0, + "bodySize": 0 + }, + "cache": {}, + "timings": { + "blocked": 0, + "dns": 0, + "connect": 0, + "ssl": 0, + "send": 0, + "wait": 0, + "receive": 0 + }, + "time": 0 + }, + { + "request": { + "bodySize": 0, + "method": "GET", + "url": "http://localhost:9977/autocomplete?text=90898&layers=address%2Cvenue%2Cstreet%2Cintersection&focus.point.lat=33.749&focus.point.lon=-84.388&boundary.rect.min_lat=32.066&boundary.rect.min_lon=-86.0856&boundary.rect.max_lat=35.7251&boundary.rect.max_lon=-81.9499", + "httpVersion": "HTTP/2", + "queryString": [ + { + "name": "text", + "value": "90898" + }, + { + "name": "layers", + "value": "address,venue,street,intersection" + }, + { + "name": "focus.point.lat", + "value": "33.749" + }, + { + "name": "focus.point.lon", + "value": "-84.388" + }, + { + "name": "boundary.rect.min_lat", + "value": "32.066" + }, + { + "name": "boundary.rect.min_lon", + "value": "-86.0856" + }, + { + "name": "boundary.rect.max_lat", + "value": "35.7251" + }, + { + "name": "boundary.rect.max_lon", + "value": "-81.9499" + } + ], + "headersSize": 735 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/2", + "content": { + "mimeType": "application/json", + "size": 0, + "text": "{\"features\":[]}" + }, + "headersSize": 0, + "bodySize": 0 + }, + "cache": {}, + "timings": { + "blocked": 0, + "dns": 0, + "connect": 0, + "ssl": 0, + "send": 0, + "wait": 0, + "receive": 0 + }, + "time": 0 + }, + { + "request": { + "bodySize": 0, + "method": "GET", + "url": "http://localhost:9977/autocomplete?text=908981&layers=address%2Cvenue%2Cstreet%2Cintersection&focus.point.lat=33.749&focus.point.lon=-84.388&boundary.rect.min_lat=32.066&boundary.rect.min_lon=-86.0856&boundary.rect.max_lat=35.7251&boundary.rect.max_lon=-81.9499", + "httpVersion": "HTTP/2", + "queryString": [ + { + "name": "text", + "value": "908981" + }, + { + "name": "layers", + "value": "address,venue,street,intersection" + }, + { + "name": "focus.point.lat", + "value": "33.749" + }, + { + "name": "focus.point.lon", + "value": "-84.388" + }, + { + "name": "boundary.rect.min_lat", + "value": "32.066" + }, + { + "name": "boundary.rect.min_lon", + "value": "-86.0856" + }, + { + "name": "boundary.rect.max_lat", + "value": "35.7251" + }, + { + "name": "boundary.rect.max_lon", + "value": "-81.9499" + } + ], + "headersSize": 736 + }, + "response": { + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/2", + "content": { + "mimeType": "application/json", + "size": 12687, + "text": "{\"features\":[{\"geometry\":{\"type\":\"Point\",\"coordinates\":[-84.391397,33.753837]},\"id\":\"MARTA:797\",\"properties\":{\"layer\":\"stops\",\"source\":\"otp\",\"name\":\"Five Points Station (908981)\",\"label\":\"Five Points Station (908981)\"},\"type\":\"Feature\"}],\"type\":\"FeatureCollection\"}" + }, + "headersSize": 547, + "bodySize": 13234 + }, + "cache": {}, + "timings": { + "blocked": 0, + "dns": 0, + "connect": 0, + "ssl": 0, + "send": 0, + "wait": 199, + "receive": 0 + }, + "time": 199 + } + ] + } +} \ No newline at end of file diff --git a/percy/mock.har b/percy/mock.har index 64f8ee2a4..168b2f6c5 100644 --- a/percy/mock.har +++ b/percy/mock.har @@ -35,7 +35,6 @@ "_transferSize": 9618, "_error": null }, - "serverIPAddress": "23.22.4.67", "startedDateTime": "2023-08-09T14:44:09.561Z", "time": 221.89399999479065, "timings": { @@ -77,7 +76,6 @@ "_transferSize": 9618, "_error": null }, - "serverIPAddress": "23.22.4.67", "startedDateTime": "2023-08-09T14:44:09.561Z", "time": 221.89399999479065, "timings": { @@ -119,7 +117,6 @@ "_transferSize": 76937, "_error": null }, - "serverIPAddress": "35.173.73.127", "startedDateTime": "2023-08-03T20:49:50.033Z", "time": 590.6560000003083, "timings": { @@ -161,7 +158,6 @@ "_transferSize": 7340, "_error": null }, - "serverIPAddress": "35.173.73.127", "startedDateTime": "2023-08-03T20:49:50.036Z", "time": 257.49999999970896, "timings": { @@ -203,7 +199,6 @@ "_transferSize": 40856, "_error": null }, - "serverIPAddress": "52.20.220.65", "startedDateTime": "2023-08-04T20:40:31.694Z", "time": 82.74900000105845, "timings": { @@ -241,7 +236,6 @@ "_transferSize": 5438, "_error": null }, - "serverIPAddress": "3.222.122.125", "startedDateTime": "2023-08-04T20:59:03.536Z", "time": 54.81599999620812, "timings": { @@ -279,7 +273,6 @@ "_transferSize": 38256, "_error": null }, - "serverIPAddress": "3.222.122.125", "startedDateTime": "2023-08-04T20:59:03.536Z", "time": 60.42699999670731, "timings": { @@ -321,7 +314,6 @@ "_transferSize": 2433, "_error": null }, - "serverIPAddress": "34.195.110.47", "startedDateTime": "2023-08-04T21:29:23.087Z", "time": 66.22100000095088, "timings": { @@ -368,7 +360,6 @@ "_transferSize": 1604, "_error": null }, - "serverIPAddress": "34.195.110.47", "startedDateTime": "2023-08-04T21:29:23.171Z", "time": 51.44000000291271, "timings": { @@ -410,7 +401,6 @@ "_transferSize": 2002, "_error": null }, - "serverIPAddress": "34.195.110.47", "startedDateTime": "2023-08-04T21:29:23.176Z", "time": 58.54399999952875, "timings": { @@ -452,7 +442,6 @@ "_transferSize": 7459, "_error": null }, - "serverIPAddress": "34.195.110.47", "startedDateTime": "2023-08-04T21:29:23.177Z", "time": 57.214999993448146, "timings": { @@ -495,7 +484,6 @@ "_transferSize": 27049, "_error": null }, - "serverIPAddress": "34.238.57.75", "startedDateTime": "2023-08-07T19:09:16.223Z", "time": 66.91099999807193, "timings": { @@ -537,7 +525,6 @@ "_transferSize": 33935, "_error": null }, - "serverIPAddress": "44.207.110.234", "startedDateTime": "2023-08-07T19:49:43.900Z", "time": 168.25500000049942, "timings": { @@ -596,7 +583,6 @@ "_transferSize": 1191061, "_error": null }, - "serverIPAddress": "3.232.128.121", "startedDateTime": "2023-08-07T21:13:12.901Z", "time": 327.1550000026764, "timings": { @@ -638,7 +624,6 @@ "_transferSize": 25417, "_error": null }, - "serverIPAddress": "54.86.250.244", "startedDateTime": "2023-08-07T20:31:47.159Z", "time": 305.05600000105915, "timings": { @@ -680,7 +665,6 @@ "_transferSize": 1077, "_error": null }, - "serverIPAddress": "3.220.60.180", "startedDateTime": "2023-08-08T20:29:50.871Z", "time": 62.50199999703909, "timings": { @@ -722,7 +706,6 @@ "_transferSize": 1077, "_error": null }, - "serverIPAddress": "3.220.60.180", "startedDateTime": "2023-08-08T20:29:50.871Z", "time": 62.50199999703909, "timings": { @@ -764,7 +747,6 @@ "_transferSize": 1077, "_error": null }, - "serverIPAddress": "3.220.60.180", "startedDateTime": "2023-08-08T20:29:50.871Z", "time": 62.50199999703909, "timings": { @@ -806,7 +788,6 @@ "_transferSize": 1077, "_error": null }, - "serverIPAddress": "3.220.60.180", "startedDateTime": "2023-08-08T20:29:50.871Z", "time": 62.50199999703909, "timings": { @@ -848,7 +829,6 @@ "_transferSize": 31570, "_error": null }, - "serverIPAddress": "3.220.60.180", "startedDateTime": "2023-08-08T14:50:06.820Z", "time": 189.288999999917, "timings": { @@ -885,7 +865,6 @@ "_transferSize": 21813, "_error": null }, - "serverIPAddress": "3.220.60.180", "startedDateTime": "2023-08-08T14:50:06.819Z", "time": 185.85299999995186, "timings": { @@ -927,7 +906,6 @@ "_transferSize": 4511, "_error": null }, - "serverIPAddress": "3.220.60.180", "startedDateTime": "2023-08-08T14:50:07.079Z", "time": 57.98200000026554, "timings": { @@ -969,7 +947,6 @@ "_transferSize": 43200, "_error": null }, - "serverIPAddress": "3.220.60.180", "startedDateTime": "2023-08-08T14:50:07.080Z", "time": 65.15599999966071, "timings": { diff --git a/percy/percy.test.js b/percy/percy.test.js index 462419dcb..24bedcc0a 100644 --- a/percy/percy.test.js +++ b/percy/percy.test.js @@ -16,12 +16,17 @@ jest.setTimeout(600000) const PERCY_EXTRA_WAIT = 5000 const percySnapshotWithWait = async (page, name, enableJavaScript) => { await page.waitForTimeout(PERCY_EXTRA_WAIT) - await percySnapshot(page, `${name} [${OTP_RR_UI_MODE}]`, { enableJavaScript }) + await percySnapshot( + page, + `${name} [${OTP_RR_UI_MODE}${page.isMobile ? '/mobile' : ''}]`, + { enableJavaScript } + ) } let browser const serveAbortController = new AbortController() const harAbortController = new AbortController() +const geocoderAbortController = new AbortController() /** * Loads a path @@ -49,6 +54,20 @@ beforeAll(async () => { signal: harAbortController.signal }).stdout.pipe(process.stdout) + // Launch mock geocoder server + execa( + 'yarn', + [ + 'percy-har-express', + '-p', + '9977', + `percy/geocoder-mock-${OTP_RR_UI_MODE}.har` + ], + { + signal: geocoderAbortController.signal + } + ).stdout.pipe(process.stdout) + // Web security is disabled to allow requests to the mock OTP server browser = await puppeteer.launch({ args: ['--disable-web-security'] @@ -66,6 +85,7 @@ afterAll(async () => { try { serveAbortController.abort() harAbortController.abort() + geocoderAbortController.abort() await browser.close() } catch (error) { console.log(error) @@ -73,7 +93,7 @@ afterAll(async () => { console.log('Closed mock server and headless browser') }) -// Puppeteer can take a long time to load, espeically in some ci environments +// Puppeteer can take a long time to load, especially in some ci environments jest.setTimeout(600000) async function executeTest(page, isMobile, isCallTaker) { @@ -153,7 +173,8 @@ async function executeTest(page, isMobile, isCallTaker) { // Fill in new origin await page.hover('.from-form-control') await page.focus('.from-form-control') - await page.keyboard.type('Opus Music') + // FIXME: Characters are typed very fast, but each stroke still triggers a geocoder call. + await page.keyboard.type('Opus Music', { delay: 100 }) await page.waitForTimeout(2000) await page.keyboard.press('ArrowDown') await page.waitForTimeout(200) @@ -161,7 +182,8 @@ async function executeTest(page, isMobile, isCallTaker) { // Fill in new destination await page.focus('.to-form-control') - await page.keyboard.type('908981') + // FIXME: Characters are typed very fast, but each stroke still triggers a geocoder call. + await page.keyboard.type('908981', { delay: 100 }) await page.waitForTimeout(2000) await page.keyboard.press('ArrowDown') await page.waitForTimeout(200) @@ -196,7 +218,8 @@ async function executeTest(page, isMobile, isCallTaker) { ) await page.waitForSelector('.intermediate-place-0-form-control') await page.focus('.intermediate-place-0-form-control') - await page.keyboard.type('arts center') + // FIXME: Characters are typed very fast, but each stroke still triggers a geocoder call. + await page.keyboard.type('arts center', { delay: 100 }) await page.waitForTimeout(2000) await page.keyboard.press('ArrowDown') await page.waitForTimeout(200) @@ -357,9 +380,52 @@ async function executeTest(page, isMobile, isCallTaker) { } } -if (OTP_RR_UI_MODE === 'mobile') { +test('OTP-RR Desktop', async () => { + const page = await loadPath('/') + await page.setViewport({ + height: 1080, + width: 1920 + }) + page.on('console', async (msg) => { + const args = await msg.args() + args.forEach(async (arg) => { + const val = await arg.jsonValue() + // value is serializable + if (JSON.stringify(val) !== JSON.stringify({})) console.log(val) + // value is unserializable (or an empty oject) + else { + const { description, subtype, type } = arg._remoteObject + console.log( + `type: ${type}, subtype: ${subtype}, description:\n ${description}` + ) + } + }) + }) + // log all errors that were logged to the browser console + page.on('warn', (warn) => { + console.log(warn) + }) + page.on('error', (error) => { + console.error(error) + console.error(error.stack) + }) + // log all uncaught exceptions + page.on('pageerror', (error) => { + console.error(`Page Error: ${error}`) + }) + // log all failed requests + page.on('requestfailed', (req) => { + console.error(`Request failed: ${req.method()} ${req.url()}`) + }) + + await executeTest(page, false, OTP_RR_UI_MODE === 'calltaker') +}) + +if (OTP_RR_UI_MODE !== 'calltaker') { + // Non-calltaker test runs both mobile and desktop test. test('OTP-RR Mobile', async () => { const page = await loadPath('/') + page.isMobile = true await page.setUserAgent('android') await page.setViewport({ height: 1134, @@ -371,45 +437,4 @@ if (OTP_RR_UI_MODE === 'mobile') { // Execute the rest of the test await executeTest(page, true, false) }) -} else { - test('OTP-RR Desktop', async () => { - const page = await loadPath('/') - await page.setViewport({ - height: 1080, - width: 1920 - }) - page.on('console', async (msg) => { - const args = await msg.args() - args.forEach(async (arg) => { - const val = await arg.jsonValue() - // value is serializable - if (JSON.stringify(val) !== JSON.stringify({})) console.log(val) - // value is unserializable (or an empty oject) - else { - const { description, subtype, type } = arg._remoteObject - console.log( - `type: ${type}, subtype: ${subtype}, description:\n ${description}` - ) - } - }) - }) - // log all errors that were logged to the browser console - page.on('warn', (warn) => { - console.log(warn) - }) - page.on('error', (error) => { - console.error(error) - console.error(error.stack) - }) - // log all uncaught exceptions - page.on('pageerror', (error) => { - console.error(`Page Error: ${error}`) - }) - // log all failed requests - page.on('requestfailed', (req) => { - console.error(`Request failed: ${req.method()} ${req.url()}`) - }) - - await executeTest(page, false, OTP_RR_UI_MODE === 'calltaker') - }) }