Skip to content

Commit ecff492

Browse files
authored
Merge pull request #2497 from asfadmin/Yoreley-GeoTest
add E2E tests for geo search filters, geocoding, and file imports
2 parents ed98cbe + 87b2739 commit ecff492

12 files changed

Lines changed: 468 additions & 0 deletions
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
import { test, expect } from '@playwright/test';
2+
3+
test('Import a geojson point file', async ({ page }) => {
4+
await page.goto('/');
5+
await page.locator('app-aoi-filter').getByText('arrow_drop_down').click();
6+
await page
7+
.locator('app-aoi-filter')
8+
.getByRole('button', { name: 'Import File' })
9+
.click();
10+
11+
await page
12+
.locator('app-aoi-filter')
13+
.locator('input[type="file"]')
14+
.setInputFiles('./e2e/geographic/assets/point.geojson');
15+
16+
await page.waitForResponse((r) => r.url().includes('files_to_wkt'));
17+
18+
const value = await page
19+
.locator('app-aoi-filter')
20+
.locator('input[name="searchPolygon"]')
21+
.inputValue();
22+
expect(value).toContain('POINT(-102.4805 38.7541)');
23+
});
24+
25+
test('Import a KML file', async ({ page }) => {
26+
await page.goto('/');
27+
await page.locator('app-aoi-filter').getByText('arrow_drop_down').click();
28+
await page
29+
.locator('app-aoi-filter')
30+
.getByRole('button', { name: 'Import File' })
31+
.click();
32+
33+
await page
34+
.locator('app-aoi-filter')
35+
.locator('input[type="file"]')
36+
.setInputFiles('./e2e/geographic/assets/basic.kml');
37+
38+
await page.waitForResponse((r) => r.url().includes('files_to_wkt'));
39+
40+
const value = await page
41+
.locator('app-aoi-filter')
42+
.locator('input[name="searchPolygon"]')
43+
.inputValue();
44+
expect(value).toContain('POLYGON');
45+
expect(value).toContain('-43.7081');
46+
});
47+
48+
test('Import a .shp shape file', async ({ page }) => {
49+
await page.goto('/');
50+
await page.locator('app-aoi-filter').getByText('arrow_drop_down').click();
51+
await page
52+
.locator('app-aoi-filter')
53+
.getByRole('button', { name: 'Import File' })
54+
.click();
55+
56+
await page
57+
.locator('app-aoi-filter')
58+
.locator('input[type="file"]')
59+
.setInputFiles('./e2e/geographic/assets/boundary.shp');
60+
61+
await page.waitForResponse((r) => r.url().includes('files_to_wkt'));
62+
63+
const value = await page
64+
.locator('app-aoi-filter')
65+
.locator('input[name="searchPolygon"]')
66+
.inputValue();
67+
expect(value).toContain('POLYGON');
68+
});
69+
70+
test('Import a .zip shape file', async ({ page }) => {
71+
await page.goto('/');
72+
await page.locator('app-aoi-filter').getByText('arrow_drop_down').click();
73+
await page
74+
.locator('app-aoi-filter')
75+
.getByRole('button', { name: 'Import File' })
76+
.click();
77+
78+
await page
79+
.locator('app-aoi-filter')
80+
.locator('input[type="file"]')
81+
.setInputFiles('./e2e/geographic/assets/boundary.zip');
82+
83+
await page.waitForResponse((r) => r.url().includes('files_to_wkt'));
84+
85+
const value = await page
86+
.locator('app-aoi-filter')
87+
.locator('input[name="searchPolygon"]')
88+
.inputValue();
89+
expect(value).toContain('POLYGON');
90+
});
91+
92+
test('Import multiple geojson files sequentially', async ({ page }) => {
93+
await page.goto('/');
94+
await page.locator('app-aoi-filter').getByText('arrow_drop_down').click();
95+
await page
96+
.locator('app-aoi-filter')
97+
.getByRole('button', { name: 'Import File' })
98+
.click();
99+
100+
await page
101+
.locator('app-aoi-filter')
102+
.locator('input[type="file"]')
103+
.setInputFiles('./e2e/geographic/assets/basic.geojson');
104+
105+
await page.waitForResponse((r) => r.url().includes('files_to_wkt'));
106+
107+
const firstValue = await page
108+
.locator('app-aoi-filter')
109+
.locator('input[name="searchPolygon"]')
110+
.inputValue();
111+
expect(firstValue).toContain('POLYGON');
112+
113+
await page
114+
.locator('app-aoi-filter')
115+
.getByRole('button', { name: 'Import File' })
116+
.click();
117+
118+
await page
119+
.locator('app-aoi-filter')
120+
.locator('input[type="file"]')
121+
.setInputFiles('./e2e/geographic/assets/north-carolina.geojson');
122+
123+
await page.waitForResponse((r) => r.url().includes('files_to_wkt'));
124+
125+
const secondValue = await page
126+
.locator('app-aoi-filter')
127+
.locator('input[name="searchPolygon"]')
128+
.inputValue();
129+
expect(secondValue).toContain('POLYGON');
130+
expect(secondValue).not.toEqual(firstValue);
131+
});
132+
133+
test('Import rejects invalid file type', async ({ page }) => {
134+
await page.goto('/');
135+
await page.locator('app-aoi-filter').getByText('arrow_drop_down').click();
136+
await page
137+
.locator('app-aoi-filter')
138+
.getByRole('button', { name: 'Import File' })
139+
.click();
140+
141+
await page
142+
.locator('app-aoi-filter')
143+
.locator('input[type="file"]')
144+
.setInputFiles('./e2e/geographic/assets/invalid.csv');
145+
146+
const aoiValue = await page
147+
.locator('app-aoi-filter')
148+
.locator('input[name="searchPolygon"]')
149+
.inputValue();
150+
expect(aoiValue).toBe('');
151+
});

e2e/geographic/assets/basic.kml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<kml xmlns="http://www.opengis.net/kml/2.2">
3+
<Document>
4+
<Placemark>
5+
<Polygon>
6+
<outerBoundaryIs>
7+
<LinearRing>
8+
<coordinates>
9+
-43.7081,-16.7393,0
10+
-43.7068,-16.9726,0
11+
-43.4056,-16.9702,0
12+
-43.412,-16.7345,0
13+
-43.7081,-16.7393,0
14+
</coordinates>
15+
</LinearRing>
16+
</outerBoundaryIs>
17+
</Polygon>
18+
</Placemark>
19+
</Document>
20+
</kml>

e2e/geographic/assets/boundary.shp

236 Bytes
Binary file not shown.

e2e/geographic/assets/boundary.zip

275 Bytes
Binary file not shown.

e2e/geographic/assets/invalid.csv

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
name,lat,lon
2+
test,64.2,-149.5
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"type": "FeatureCollection",
3+
"features": [
4+
{
5+
"type": "Feature",
6+
"geometry": {
7+
"type": "Polygon",
8+
"coordinates": [
9+
[
10+
[-80.9379, 35.2271],
11+
[-80.8431, 35.2271],
12+
[-80.8431, 35.2826],
13+
[-80.9379, 35.2826],
14+
[-80.9379, 35.2271]
15+
]
16+
]
17+
},
18+
"properties": {}
19+
}
20+
]
21+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"type": "Feature",
3+
"geometry": {
4+
"type": "Point",
5+
"coordinates": [-102.4805, 38.7541]
6+
},
7+
"properties": {}
8+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { test, expect } from '@playwright/test';
2+
import { waitForASFAPIResponse } from 'e2e/helpers';
3+
4+
test('ERS subtype E2 filter returns matching results', async ({ page }) => {
5+
await page.goto('/');
6+
await page.getByRole('button', { name: 'Sentinel-' }).click();
7+
await page
8+
.getByRole('menuitem', { name: 'ERS Primarily SAR imagery' })
9+
.click();
10+
11+
await page.getByRole('button', { name: 'Filters', exact: true }).click();
12+
await expect(page.getByText('subtypes selected')).toContainText(
13+
'0/2 subtypes selected',
14+
);
15+
16+
await page.getByText('Subtype', { exact: true }).click();
17+
await page.getByRole('option', { name: 'E2' }).click();
18+
await page.keyboard.press('Escape');
19+
20+
const responsePromise = waitForASFAPIResponse(page);
21+
await page
22+
.locator('#mat-button-toggle-6-button')
23+
.getByRole('button', { name: 'SEARCH' })
24+
.click();
25+
await responsePromise;
26+
27+
await expect(page.locator('app-info-bar')).toContainText('Dataset: E2');
28+
await expect(page.locator('mat-card-header')).toContainText('E2');
29+
});

0 commit comments

Comments
 (0)