Skip to content

Commit c6f1de2

Browse files
authored
Merge pull request #2469 from asfadmin/tyler/playwright-initial
Initial example tests
2 parents a2a5aee + af62ab6 commit c6f1de2

9 files changed

Lines changed: 336 additions & 0 deletions

File tree

e2e/baseline/download.spec.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { test, expect } from '@playwright/test';
2+
3+
test('Add files to Download Queue', async ({ page }) => {
4+
await page.goto('/');
5+
await page.getByRole('button', { name: 'Geographic Search' }).click();
6+
await page
7+
.getByRole('menuitem', { name: 'Baseline Baseline search' })
8+
.click();
9+
await page.getByRole('region', { name: 'Scene' }).getByLabel('Scene').click();
10+
await page
11+
.getByRole('region', { name: 'Scene' })
12+
.getByLabel('Scene')
13+
.fill('R1_65192_ST6_F111');
14+
await page
15+
.locator('#mat-button-toggle-6-button')
16+
.getByRole('button', { name: 'SEARCH' })
17+
.click();
18+
await page.locator('#mat-button-toggle-14-button').click();
19+
await page
20+
.getByRole('menuitem', { name: 'Add 41 Files to downloads' })
21+
.click();
22+
await page.getByRole('button', { name: 'Downloads' }).click();
23+
24+
await expect(page.getByText('Files, 6.94 GB')).toContainText('41');
25+
});

e2e/baseline/filters.spec.ts

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import { test, expect } from '@playwright/test';
2+
3+
test('Baseline Start & End Date Filters', async ({ page }) => {
4+
await page.goto('/');
5+
await page.getByRole('button', { name: 'Geographic Search' }).click();
6+
await page
7+
.getByRole('menuitem', { name: 'Baseline Baseline search' })
8+
.click();
9+
await page.getByRole('region', { name: 'Scene' }).getByLabel('Scene').click();
10+
await page
11+
.getByRole('region', { name: 'Scene' })
12+
.getByLabel('Scene')
13+
.fill(
14+
'S1A_IW_SLC__1SDV_20180616T210817_20180616T210845_022387_026C91_EDAA',
15+
);
16+
await page
17+
.locator('#mat-button-toggle-6-button')
18+
.getByRole('button', { name: 'SEARCH' })
19+
.click();
20+
await page.getByRole('radio', { name: 'Baseline Criteria' }).click();
21+
await page.getByText('Start Date').click();
22+
await page.getByRole('textbox', { name: 'Start Date' }).fill('9/1/2018');
23+
await page.getByText('End Date').click();
24+
await page.getByRole('textbox', { name: 'End Date' }).fill('1/1/21');
25+
await page
26+
.locator('#mat-button-toggle-6-button')
27+
.getByRole('button', { name: 'SEARCH' })
28+
.click();
29+
await expect(page.locator('app-scenes-list-header')).toContainText('72 of');
30+
});
31+
32+
test('Select a different reference scene', async ({ page }) => {
33+
await page.goto('/');
34+
35+
await page.getByRole('button', { name: 'Geographic Search' }).click();
36+
await page
37+
.getByRole('menuitem', { name: 'Baseline Baseline search' })
38+
.click();
39+
await page.getByRole('region', { name: 'Scene' }).getByLabel('Scene').click();
40+
await page
41+
.getByRole('region', { name: 'Scene' })
42+
.getByLabel('Scene')
43+
.fill('S1_049134_IW2_20230821T073937_VV_4A4C-BURST');
44+
await page
45+
.locator('#mat-button-toggle-6-button')
46+
.getByRole('button', { name: 'SEARCH' })
47+
.click();
48+
49+
await page
50+
.getByRole('button', {
51+
name: 'S1_049134_IW2_20141124T073843_VV_1B… Nov 24 2014 -201m -3192d',
52+
})
53+
.click();
54+
await page.getByRole('button', { name: 'Baseline', exact: true }).click();
55+
56+
await expect(
57+
page
58+
.getByRole('region', { name: 'Scene' })
59+
.locator('app-master-scene-selector'),
60+
).toContainText('Scene');
61+
});

e2e/displacement/map.spec.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { test, expect } from '@playwright/test';
2+
3+
test('Click on displacement map', async ({ page }) => {
4+
await page.goto('/');
5+
await page.getByRole('button', { name: 'Geographic Search' }).click();
6+
await page
7+
.getByRole('menuitem', { name: 'Displacement Displacement' })
8+
.click();
9+
await page.mouse.move(800, 600);
10+
await page.mouse.down();
11+
await page.mouse.up();
12+
await expect(page.locator('#mat-mdc-checkbox-7')).toContainText(
13+
'Frame: 09167',
14+
// Displacement requests take a while
15+
{ timeout: 30_000 },
16+
);
17+
});

e2e/geographic/beam-mode.spec.ts

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import { test, expect } from '@playwright/test';
2+
test('Multiple beam mode selections available', async ({ page }) => {
3+
await page.goto('');
4+
await page
5+
.locator('#mat-mdc-form-field-label-14')
6+
.getByText('Area of Interest • WKT')
7+
.click();
8+
await page
9+
.locator('#mat-input-9')
10+
.fill(
11+
'POLYGON((-37.4647 33.614,-16.283 31.0146,-19.7986 40.0775,-37.4647 33.614))',
12+
);
13+
await page.getByRole('button', { name: 'Filters', exact: true }).click();
14+
await page
15+
.locator('div')
16+
.filter({ hasText: /^Beam Mode$/ })
17+
.nth(2)
18+
.click();
19+
await page
20+
.getByRole('option', { name: 'EW' })
21+
.locator('mat-pseudo-checkbox')
22+
.click();
23+
await page
24+
.getByRole('option', { name: 'S3' })
25+
.locator('mat-pseudo-checkbox')
26+
.click();
27+
await page
28+
.getByRole('option', { name: 'S6' })
29+
.locator('mat-pseudo-checkbox')
30+
.click();
31+
32+
await expect(page.locator('app-info-bar')).toContainText(
33+
'Beam Modes: EW,S3,S6',
34+
);
35+
});
36+
37+
test('Single beam mode selections available', async ({ page }) => {
38+
await page.goto('/');
39+
await page.getByRole('button', { name: 'Sentinel-' }).click();
40+
await page
41+
.getByRole('menuitem', { name: 'ARIA S1 GUNW NISAR-format' })
42+
.click();
43+
await page.getByRole('button', { name: 'Filters', exact: true }).click();
44+
await page.locator('#mat-select-value-2').click();
45+
await page.getByRole('option', { name: 'slc' }).click();
46+
await page.locator('.cdk-overlay-backdrop').click();
47+
await expect(page.locator('app-info-bar')).toContainText('Beam Modes: slc');
48+
});

e2e/geographic/campaign.spec.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { test, expect } from '@playwright/test';
2+
import { waitForASFAPIResponse } from 'e2e/helpers';
3+
4+
test('Campaign Filter', async ({ page }) => {
5+
await page.goto('/');
6+
await page.getByRole('button', { name: 'Sentinel-' }).click();
7+
await page
8+
.getByRole('menuitem', { name: 'UAVSAR Uninhabited Aerial' })
9+
.click();
10+
await page.getByRole('button', { name: 'Filters', exact: true }).click();
11+
12+
await page.getByRole('textbox', { name: 'Filter Campaign' }).click();
13+
await page.getByRole('textbox', { name: 'Filter Campaign' }).fill('alaska');
14+
await page
15+
.getByRole('listitem')
16+
.filter({ hasText: 'Alaska borehole sites, AK' })
17+
.click();
18+
await expect(page.locator('app-info-bar')).toContainText(
19+
'Campaign: Alaska borehole sites, AK',
20+
);
21+
});
22+
test('Selecting Multiple Campaigns', async ({ page }) => {
23+
await page.goto('/');
24+
await page.getByRole('button', { name: 'Sentinel-' }).click();
25+
await page
26+
.getByRole('menuitem', { name: 'UAVSAR Uninhabited Aerial' })
27+
.click();
28+
await page.getByRole('button', { name: 'Filters', exact: true }).click();
29+
await page.getByRole('listitem').filter({ hasText: 'Aleutians, AK' }).click();
30+
await page
31+
.getByRole('listitem')
32+
.filter({ hasText: 'Alaska borehole sites, AK' })
33+
.click();
34+
await page
35+
.locator('#mat-button-toggle-6-button')
36+
.getByRole('button', { name: 'SEARCH' })
37+
.click();
38+
await waitForASFAPIResponse(page);
39+
await expect(page.locator('mat-card-title')).toContainText(
40+
'UA_permaf_20015_15147_009_151005_L090_CX_02',
41+
);
42+
});
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { test, expect } from '@playwright/test';
2+
3+
test('No direction selections available', async ({ page }) => {
4+
await page.goto('/');
5+
await page.getByRole('button', { name: 'Sentinel-' }).click();
6+
await page
7+
.getByRole('menuitem', { name: 'AIRSAR AIRSAR was an all-' })
8+
.click();
9+
await page.getByRole('button', { name: 'Filters', exact: true }).click();
10+
await expect(page.locator('#mat-mdc-hint-28')).toContainText(
11+
'No flight directions to select',
12+
);
13+
});
14+
test('Two Directions available', async ({ page }) => {
15+
await page.goto('/');
16+
await page.getByRole('button', { name: 'Filters', exact: true }).click();
17+
await page
18+
.locator('div')
19+
.filter({ hasText: /^Direction$/ })
20+
.first()
21+
.click();
22+
await page.getByText('Descending').click();
23+
await page.locator('.cdk-overlay-backdrop').click();
24+
await expect(page.locator('app-info-bar')).toContainText(
25+
'Flight Dir: Descending',
26+
);
27+
});

e2e/geographic/max-results.spec.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import test, { expect } from '@playwright/test';
2+
import { waitForASFAPIResponse } from 'e2e/helpers';
3+
test('Auto Search when max results changes', async ({ page }) => {
4+
await page.goto('/');
5+
await page
6+
.locator('#mat-button-toggle-8-button')
7+
.getByRole('button', { name: 'SEARCH' })
8+
.click();
9+
await waitForASFAPIResponse(page);
10+
await page
11+
.locator('app-dataset-header')
12+
.getByText('250arrow_drop_down')
13+
.click();
14+
15+
await page.getByRole('menuitem', { name: '500 Files' }).click();
16+
await waitForASFAPIResponse(page);
17+
18+
await expect(page.locator('app-scenes-list-header')).toContainText('500 of');
19+
});

e2e/geographic/path-frame.spec.ts

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
import { test, expect } from '@playwright/test';
2+
3+
test('Button to clear path/frame', async ({ page }) => {
4+
await page.goto('/');
5+
await page.getByRole('button', { name: 'Filters', exact: true }).click();
6+
await page
7+
.getByRole('region', { name: 'Area of Interest Options' })
8+
.getByLabel('Area of Interest • WKT')
9+
.click();
10+
await page
11+
.getByRole('region', { name: 'Area of Interest Options' })
12+
.getByLabel('Area of Interest • WKT')
13+
.fill(
14+
'POLYGON((-77.0154 60.4785,-41.9471 60.4785,-41.9471 66.9125,-77.0154 66.9125,-77.0154 60.4785))',
15+
);
16+
await page.getByPlaceholder('Path Start').click();
17+
await page.getByPlaceholder('Path Start').fill('20');
18+
await page.getByPlaceholder('Path End').click();
19+
await page.getByPlaceholder('Path End').fill('25');
20+
await page.getByPlaceholder('Frame Start').click();
21+
await page.getByPlaceholder('Frame Start').fill('5');
22+
await page.getByPlaceholder('Frame End').click();
23+
await page.getByPlaceholder('Frame End').fill('10');
24+
await expect(page.locator('app-info-bar')).toContainText(
25+
'Path : 20 - 25 Frame: 5 - 10',
26+
);
27+
await page.getByRole('button', { name: 'Clear Path / Frame' }).click();
28+
await expect(page.locator('app-info-bar')).toContainText('');
29+
});
30+
31+
test('Button to restore path/frame', async ({ page }) => {
32+
await page.goto('/');
33+
await page.getByRole('button', { name: 'Filters', exact: true }).click();
34+
await page
35+
.getByRole('region', { name: 'Area of Interest Options' })
36+
.getByLabel('Area of Interest • WKT')
37+
.click();
38+
await page
39+
.getByRole('region', { name: 'Area of Interest Options' })
40+
.getByLabel('Area of Interest • WKT')
41+
.fill(
42+
'LINESTRING(-75.673828 34.524661,-80.859375 30.751278,-79.716797 25.799891)',
43+
);
44+
await page.getByPlaceholder('Path Start').click();
45+
await page.getByPlaceholder('Path Start').fill('1');
46+
47+
await page.getByRole('button', { name: 'Clear Area Of Interest' }).click();
48+
let aoiValue = await page
49+
.getByLabel('Area of Interest Options')
50+
.getByLabel('Area of Interest • WKT')
51+
.inputValue();
52+
53+
await expect(aoiValue).toContain('');
54+
await page.getByRole('button', { name: 'Restore Area' }).click();
55+
aoiValue = await page
56+
.getByLabel('Area of Interest Options')
57+
.getByLabel('Area of Interest • WKT')
58+
.inputValue();
59+
await expect(aoiValue).toContain(
60+
'LINESTRING(-75.6738 34.5247,-80.8594 30.7513,-79.7168 25.7999)',
61+
);
62+
await page.locator('#mat-button-toggle-7-button').click();
63+
await page.getByRole('menuitem', { name: 'Clear Search' }).click();
64+
await page
65+
.getByRole('region', { name: 'Area of Interest Options' })
66+
.getByLabel('Area of Interest • WKT')
67+
.click();
68+
await page
69+
.getByRole('region', { name: 'Area of Interest Options' })
70+
.getByLabel('Area of Interest • WKT')
71+
.fill(
72+
'LINESTRING(-75.673828 34.524661,-80.859375 30.751278,-79.716797 25.799891)',
73+
);
74+
await page.getByPlaceholder('Frame Start').click();
75+
await page.getByPlaceholder('Frame Start').fill('6');
76+
await page.getByRole('button', { name: 'Clear Area Of Interest' }).click();
77+
aoiValue = await page
78+
.getByLabel('Area of Interest Options')
79+
.getByLabel('Area of Interest • WKT')
80+
.inputValue();
81+
await expect(aoiValue).toContain('');
82+
await page.getByRole('button', { name: 'Restore Area' }).click();
83+
aoiValue = await page
84+
.getByLabel('Area of Interest Options')
85+
.getByLabel('Area of Interest • WKT')
86+
.inputValue();
87+
await expect(aoiValue).toContain(
88+
'LINESTRING(-75.6738 34.5247,-80.8594 30.7513,-79.7168 25.7999)',
89+
);
90+
});

e2e/helpers.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { Page } from '@playwright/test';
2+
3+
export async function waitForASFAPIResponse(page: Page) {
4+
return page.waitForResponse((response) =>
5+
response.url().includes('output=jsonlite2'),
6+
);
7+
}

0 commit comments

Comments
 (0)