]> git.openstreetmap.org Git - nominatim-ui.git/commitdiff
test-suite: remove httpbin HTTP calls, server is unreliable
authormarc tobias <mtmail@gmx.net>
Mon, 26 Jun 2023 21:33:28 +0000 (23:33 +0200)
committermtmail <mtmail@gmx.net>
Mon, 26 Jun 2023 21:43:38 +0000 (23:43 +0200)
CHANGES.md
src/lib/api_utils.js
test/_bootstrap.js
test/api_errors.js

index f1e383420c8c550b3007241840ff0cd3d2f9ab41..7e0cc6f7847766667cbdeaac4bd571731d73d99f 100644 (file)
@@ -2,7 +2,7 @@
 
 * version 3.2.13 - 2023-06-26
     * Reverse map: show search position (red circle) also when no search results
-    * text-suite: replace httpbin with beeceptor for mocking HTTP error codes
+    * test-suite: remove httpbin HTTP calls, server is unreliable
     * NPM package updates (Bootstrap 5.3, Leaflet 1.9.4)
 
 * version 3.2.12 - 2023-04-04
index defaf25f5f2edc7161e6f80e2da1ab652bc39f96..3cbc0dfede37242d8657325823079de2d76bc3c0 100644 (file)
@@ -10,15 +10,7 @@ function api_request_progress(status) {
 export async function fetch_from_api(endpoint_name, params, callback) {
   var api_url = generate_nominatim_api_url(endpoint_name, params);
 
-  // For the test suite:
-  // If mock_http_status URL parameter is set we call an external webservice. First
-  // https://httpbin.org/#/Status_codes but we saw timeouts. Now beeceptor.com
-  // If that turns out unreliable or expensive (only 50/day free) we might have to
-  // start running a local webserver for the test suite
-  var tmp_params = new URLSearchParams(window.location.search);
-  if (tmp_params && tmp_params.get('mock_http_status')) {
-    api_url = 'https://nominatim-ui.free.beeceptor.com/status/' + parseInt(tmp_params.get('mock_http_status'), 10);
-  }
+  const mock_api_error = (new URLSearchParams(window.location.search)).get('mock_api_error');
 
   api_request_progress('start');
   if (endpoint_name !== 'status') last_api_request_url_store.set(null);
@@ -26,7 +18,9 @@ export async function fetch_from_api(endpoint_name, params, callback) {
   try {
     await fetch(api_url, { headers: Nominatim_Config.Nominatim_API_Endpoint_Headers || {} })
       .then(async (response) => {
-        if (!((response.status >= 200 && response.status < 300) || response.status === 404)) {
+        if ((!((response.status >= 200 && response.status < 300) || response.status === 404))
+            || mock_api_error === 'fetch'
+        ) {
           error_store.set(`Error fetching data from ${api_url} (${response.statusText})`);
           return undefined;
         }
@@ -35,7 +29,11 @@ export async function fetch_from_api(endpoint_name, params, callback) {
         // errors.
         var data;
         try {
-          data = await response.json();
+          if (mock_api_error === 'parse') {
+            data = JSON.parse('{');
+          } else {
+            data = await response.json();
+          }
         } catch (err) {
           // e.g. 'JSON.parse: unexpected non-whitespace character after JSON data at line 1'
           error_store.set(`Error parsing JSON data from ${api_url} (${err})`);
index ad7733a5f95606ba9868c1faae1b52a7b0e5c0a4..f44e2172413fc2fee799a265af4526f8457eeca2 100644 (file)
@@ -64,6 +64,7 @@ Nominatim_Config.Reverse_Only = ${reverse_only};
     defaultViewport: { width: 1024, height: 768 },
     timeout: 10000,
     // latency: 1000,
+    headless: 'new',
     args: [
       '--user-agent=Nominatim UI test suite Mozilla/5.0 Gecko/20100101 HeadlessChrome/90.0'
     ]
index 05b2b35e0b3fc7a2886e3331268b0127eed0720d..365126eedaee145b96f87c05b5e20b823c861041 100644 (file)
@@ -6,7 +6,7 @@ describe('Nominatim API errors', function () {
   describe('HTTP 503 - service unavailable', function () {
     before(async function () {
       page = await browser.newPage();
-      await page.goto('http://localhost:9999/search.html?q=london&mock_http_status=503');
+      await page.goto('http://localhost:9999/search.html?q=london&mock_api_error=fetch');
     });
 
     after(async function () {
@@ -17,7 +17,6 @@ describe('Nominatim API errors', function () {
       await page.waitForSelector('#error');
 
       let message = await page.$eval('#error', el => el.textContent);
-      assert.ok(message.includes('/status/503'));
       assert.ok(message.includes('Error fetching data from'));
     });
   });
@@ -25,7 +24,7 @@ describe('Nominatim API errors', function () {
   describe('HTTP 200 - JSON parsing fails', function () {
     before(async function () {
       page = await browser.newPage();
-      await page.goto('http://localhost:9999/search.html?q=london&mock_http_status=200');
+      await page.goto('http://localhost:9999/search.html?q=london&mock_api_error=parse');
     });
 
     after(async function () {
@@ -36,7 +35,6 @@ describe('Nominatim API errors', function () {
       await page.waitForSelector('#error');
 
       let message = await page.$eval('#error', el => el.textContent);
-      assert.ok(message.includes('/status/200'));
       assert.ok(message.includes('Error parsing JSON data from'));
     });
   });