]> git.openstreetmap.org Git - nominatim-ui.git/blob - test/reverse.js
Merge remote-tracking branch 'upstream/master'
[nominatim-ui.git] / test / reverse.js
1 import assert from 'assert';
2
3 const reverse_only = !!process.env.REVERSE_ONLY;
4
5 describe('Reverse Page', function () {
6   let page;
7
8   describe('No search', function () {
9     before(async function () {
10       page = await browser.newPage();
11       await page.goto('http://localhost:9999/reverse.html');
12     });
13
14     after(async function () {
15       await page.close();
16     });
17
18     it('should allow switching coordinates', async function () {
19       let lat_handle = await page.$('input[name=lat]');
20       let lon_handle = await page.$('input[name=lon]');
21
22       assert.equal(await lat_handle.evaluate(node => node.value), '');
23       assert.equal(await lon_handle.evaluate(node => node.value), '');
24
25       await page.click('#switch-coords');
26       // no change
27       assert.equal(await lat_handle.evaluate(node => node.value), '');
28       assert.equal(await lon_handle.evaluate(node => node.value), '');
29
30       await page.type('input[name=lat]', '5');
31       await page.type('input[name=lon]', '10');
32       await page.click('#switch-coords');
33       // switched
34       assert.equal(await lat_handle.evaluate(node => node.value), 10);
35       assert.equal(await lon_handle.evaluate(node => node.value), 5);
36     });
37   });
38
39   describe('With search', function () {
40     before(async function () {
41       page = await browser.newPage();
42       await page.goto('http://localhost:9999/reverse.html');
43       await page.type('input[name=lat]', '27.1750090510034');
44       await page.type('input[name=lon]', '78.04209025');
45       await page.click('button[type=submit]');
46       await page.waitForSelector('#searchresults');
47     });
48
49     after(async function () {
50       await page.close();
51     });
52
53     it('should return single result', async function () {
54       let results_count = await page.$$eval('#searchresults .result', elements => elements.length);
55
56       assert.deepStrictEqual(results_count, 1);
57     });
58
59     it('should display a map', async function () {
60       await page.waitForSelector('#map');
61       assert.equal((await page.$$('#map')).length, 1);
62     });
63
64    it('should preserve advanced options when searching from a map click', async function () {
65       // Set layer=address, submit form
66       await page.click('#searchAdvancedOptions summary');
67       await page.waitForSelector('input[name=layer]');
68       await page.$eval('#option_layer', (input) => { input.value = ''; });
69       await page.type('#option_layer', 'address');
70       await page.click('button[type=submit]');
71       await page.waitForFunction(() => {
72         return new URLSearchParams(location.search).get('layer') === 'address';
73       });
74
75       const initialUrl = new URL(await page.url());
76       const initialLat = initialUrl.searchParams.get('lat');
77
78       // Click on new position
79       await page.click('#map', { offset: { x: 50, y: 50 } });
80
81       // Wait until latitude in URL changed
82       await page.waitForFunction(
83         (previousLat) => new URL(window.location.href).searchParams.get('lat') !== previousLat,
84         {},
85         initialLat
86       );
87
88       // Confirm the layer=address is still in URL
89       const refreshedUrl = new URL(await page.url());
90       assert.strictEqual(refreshedUrl.searchParams.get('layer'), 'address');
91     });
92
93     it('should redirect to details page on clicking details button', async function () {
94       let current_url;
95       let results = await page.$$('#searchresults .result a');
96
97       await results[0].click();
98       await page.waitForSelector('table#address');
99
100       current_url = new URL(await page.url());
101       assert.deepStrictEqual(current_url.pathname, '/details.html');
102     });
103
104     if (!reverse_only) {
105
106       it('should clear results when switching to search page', async function () {
107         await page.click('nav a[href="search.html"]');
108
109         const results_count =
110           await page.$$eval('#searchresults .result', elements => elements.length);
111
112         assert.deepStrictEqual(results_count, 0);
113       });
114     }
115   });
116 });