1 import assert from 'assert';
3 const reverse_only = !!process.env.REVERSE_ONLY;
5 describe('Reverse Page', function () {
8 describe('No search', function () {
9 before(async function () {
10 page = await browser.newPage();
11 await page.goto('http://localhost:9999/reverse.html');
14 after(async function () {
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]');
22 assert.equal(await lat_handle.evaluate(node => node.value), '');
23 assert.equal(await lon_handle.evaluate(node => node.value), '');
25 await page.click('#switch-coords');
27 assert.equal(await lat_handle.evaluate(node => node.value), '');
28 assert.equal(await lon_handle.evaluate(node => node.value), '');
30 await page.type('input[name=lat]', '5');
31 await page.type('input[name=lon]', '10');
32 await page.click('#switch-coords');
34 assert.equal(await lat_handle.evaluate(node => node.value), 10);
35 assert.equal(await lon_handle.evaluate(node => node.value), 5);
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');
49 after(async function () {
53 it('should return single result', async function () {
54 let results_count = await page.$$eval('#searchresults .result', elements => elements.length);
56 assert.deepStrictEqual(results_count, 1);
59 it('should display a map', async function () {
60 await page.waitForSelector('#map');
61 assert.equal((await page.$$('#map')).length, 1);
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';
75 const initialUrl = new URL(await page.url());
76 const initialLat = initialUrl.searchParams.get('lat');
78 // Click on new position
79 await page.click('#map', { offset: { x: 50, y: 50 } });
81 // Wait until latitude in URL changed
82 await page.waitForFunction(
83 (previousLat) => new URL(window.location.href).searchParams.get('lat') !== previousLat,
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');
93 it('should redirect to details page on clicking details button', async function () {
95 let results = await page.$$('#searchresults .result a');
97 await results[0].click();
98 await page.waitForSelector('table#address');
100 current_url = new URL(await page.url());
101 assert.deepStrictEqual(current_url.pathname, '/details.html');
106 it('should clear results when switching to search page', async function () {
107 await page.click('nav a[href="search.html"]');
109 const results_count =
110 await page.$$eval('#searchresults .result', elements => elements.length);
112 assert.deepStrictEqual(results_count, 0);