Skip to content
Merged

v2.21.0 #2538

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
b66ce8b
feat: baseline download csv test
tylercchase Apr 21, 2026
2f72c52
feat: baseline zoom test
tylercchase Apr 21, 2026
c15db2e
feat: sbas export
tylercchase Apr 21, 2026
063875a
chore: update search selector in sbas export test
tylercchase Apr 21, 2026
844a5ce
feat: sbas custom point test
tylercchase Apr 23, 2026
c4d633a
Merge branch 'test' into tyler-baseline-tests
tylercchase Apr 23, 2026
91b9077
Merge pull request #2521 from asfadmin/tyler-baseline-tests
tylercchase Apr 23, 2026
fc4120e
fix: remove file type filter from ALOS-2
tylercchase Apr 23, 2026
1b91c37
feat: sbas and baseline playwright test (#2527)
yoreley777 Apr 27, 2026
81ab502
feat: Add menu for requeueing expired vs failed jobs
williamh890 Apr 24, 2026
b2de777
feat: Remove unused projectName in component
williamh890 Apr 24, 2026
648d37b
feat: Add keys
williamh890 Apr 28, 2026
052509a
chore: Fix tracking warning
williamh890 Apr 28, 2026
d36aec2
fix: Switch to signal for input to remove race condition
williamh890 Apr 28, 2026
2dfb460
Merge branch 'test' into tyler/alos-2-file-type
tylercchase Apr 28, 2026
890f753
chore: remove console.log
williamh890 Apr 28, 2026
b0cef4e
feat: Rename translation keys
williamh890 Apr 28, 2026
5346dc3
chore: update variable names
williamh890 Apr 28, 2026
49aacf1
Merge pull request #2526 from asfadmin/tyler/alos-2-file-type
tylercchase Apr 28, 2026
50c6588
Merge branch 'test' into will/resubmit
williamh890 Apr 28, 2026
8db189d
Merge pull request #2532 from asfadmin/will/resubmit
williamh890 Apr 28, 2026
368cae4
set s1 burst beta flag to false
jacquelynsmale Apr 28, 2026
223e02f
Merge branch 'test' into s1burst-nobeta
jacquelynsmale Apr 28, 2026
46b1bd3
Merge pull request #2534 from asfadmin/s1burst-nobeta
jacquelynsmale Apr 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 14 additions & 4 deletions e2e/baseline/download.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,20 @@ test('Add files to Download Queue', async ({ page }) => {
.getByRole('button', { name: 'SEARCH' })
.click();
await page.locator('#mat-button-toggle-14-button').click();
await page
.getByRole('menuitem', { name: 'Add 41 Files to downloads' })
.click();

const addToDownloadsMenuItem = page.getByRole('menuitem', {
name: /Add \d+ Files to downloads/,
});
const menuText = (await addToDownloadsMenuItem.textContent()) ?? '';
const fileCount = Number(menuText.match(/Add (\d+) Files to downloads/i)?.[1] ?? 0);

expect(fileCount).toBeGreaterThan(0);

await addToDownloadsMenuItem.click();
await page.getByRole('button', { name: 'Downloads' }).click();

await expect(page.getByText('Files, 6.94 GB')).toContainText('41');
await expect(page.locator('.dl-subtitle')).toContainText(`${fileCount} Files`);
await expect(page.locator('.dl-mat-dialog-content mat-list-item')).toHaveCount(
fileCount,
);
});
36 changes: 36 additions & 0 deletions e2e/baseline/export.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import { test, expect } from '@playwright/test';
import * as fs from 'fs';
import { parse } from 'csv-parse/sync';

test('Results Menu Export CSV', async ({ page }) => {
await page.goto('/');
await page.getByRole('button', { name: 'Geographic Search' }).click();
await page
.getByRole('menuitem', { name: 'Baseline Baseline search' })
.click();
await page.getByRole('region', { name: 'Scene' }).getByLabel('Scene').click();
await page
.getByRole('region', { name: 'Scene' })
.getByLabel('Scene')
.fill(
'S1B_IW_SLC__1SDV_20210128T101605_20210128T101636_025353_030505_9FF1',
);

await page
.locator('#mat-button-toggle-6-button')
.getByRole('button', { name: 'SEARCH' })
.click();
await page.getByRole('radiogroup').filter({ hasText: 'get_app' }).click();
await page.getByRole('menuitem', { name: 'Metadata' }).click();
const downloadPromise = page.waitForEvent('download');
await page.getByRole('menuitem', { name: 'csv' }).click();
const download = await downloadPromise;
const path = await download.path();

const records = parse(fs.readFileSync(path), {
columns: true,
skip_empty_lines: true,
});

expect(records[1]).not.toBe('');
});
34 changes: 34 additions & 0 deletions e2e/baseline/sentinel-scene-from-geo.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { test, expect } from '@playwright/test';
import { waitForASFAPIResponse } from 'e2e/helpers';

test('Baseline: Search for a Sentinel Scene from Geo Search (SLC File)', async ({
page,
}) => {
await page.goto('/');

await page.getByRole('button', { name: 'Filters', exact: true }).click();
await page
.getByRole('textbox', { name: 'End Date' })
.first()
.fill('1/1/2020');
await page.keyboard.press('Tab');

const initialSearch = waitForASFAPIResponse(page);
await page
.getByText('Cancel SEARCH arrow_drop_down')
.getByRole('button', { name: 'SEARCH' })
.click();
await initialSearch;

await page.locator('app-scene').first().click();

const baselineSearch = waitForASFAPIResponse(page);
await page.getByRole('button', { name: 'Baseline', exact: true }).click();
await baselineSearch;

await expect(
page
.locator('a[href="https://asf.alaska.edu/datasets/daac/sentinel-1/"]')
.first(),
).toContainText('Sentinel-1');
});
45 changes: 45 additions & 0 deletions e2e/baseline/zoom.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import { test, expect } from '@playwright/test';

test('Baseline zoom to results', async ({ page }) => {
const getMapInfoText = async () =>
((await page.locator('app-map-info').textContent()) ?? '')
.replace(/\s+/g, ' ')
.trim();

await page.goto('/');
await page.getByRole('button', { name: 'Geographic Search' }).click();
await page
.getByRole('menuitem', { name: 'Baseline Baseline search' })
.click();
await page.getByRole('region', { name: 'Scene' }).getByLabel('Scene').click();
await page
.getByRole('region', { name: 'Scene' })
.getByLabel('Scene')
.fill(
'S1B_IW_SLC__1SDV_20210128T101605_20210128T101636_025353_030505_9FF1',
);
await page
.locator('#mat-button-toggle-6-button')
.getByRole('button', { name: 'SEARCH' })
.click();

const urlBeforeZoom = page.url();

await page
.getByRole('radiogroup')
.filter({ hasText: 'settings_overscan' })
.click();

await expect.poll(() => page.url(), { timeout: 10_000 }).not.toBe(urlBeforeZoom);

await page.mouse.move(800, 600);
await expect
.poll(async () => await getMapInfoText(), { timeout: 10_000 })
.toMatch(/lat.*lon/i);
const coordsBeforeMove = await getMapInfoText();

await page.mouse.move(900, 600);
await expect
.poll(async () => await getMapInfoText(), { timeout: 10_000 })
.not.toBe(coordsBeforeMove);
});
36 changes: 36 additions & 0 deletions e2e/sbas/custom-points.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import { test, expect } from '@playwright/test';

test('SBAS Manually Add Point', async ({ page }) => {
await page.goto('/');
await page.getByRole('button', { name: 'Geographic Search' }).click();
await page
.getByRole('menuitem', { name: 'SBAS SBAS search provides' })
.click();
await page.getByRole('region', { name: 'Scene' }).getByLabel('Scene').click();
await page
.getByRole('region', { name: 'Scene' })
.getByLabel('Scene')
.fill(
'S1B_WV_SLC__1SSV_20200720T132328_20200720T135106_022555_02ACF6_F823',
);
await page
.getByText('Cancel SEARCH arrow_drop_down')
.getByRole('button', { name: 'SEARCH' })
.click();
await page
.getByText('add_circlestop_circleremove_circle')
.getByText('add_circle')
.click();
await page.waitForTimeout(500);
await page.locator('circle').nth(3).click();
await page.locator('circle:nth-child(26)').click({ force: true });
await page.waitForTimeout(500);

await page
.locator('cdk-virtual-scroll-viewport')
.evaluate((e) => (e.scrollTop += 10000));

await expect(page.locator('cdk-virtual-scroll-viewport')).toContainText(
'Jan 13 2017 to May 08',
);
});
31 changes: 31 additions & 0 deletions e2e/sbas/date-filters.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { test, expect } from '@playwright/test';

test('SBAS Start & End Date Filters', async ({ page }) => {
await page.goto('/');
await page.getByRole('button', { name: 'Geographic Search' }).click();
await page
.getByRole('menuitem', { name: 'SBAS SBAS search provides' })
.click();
await page
.getByRole('region', { name: 'Scene' })
.getByLabel('Scene')
.fill('S1A_IW_SLC__1SDV_20180616T210817_20180616T210845_022387_026C91_EDAA');
await page
.getByText('Cancel SEARCH arrow_drop_down')
.getByRole('button', { name: 'SEARCH' })
.click();

const sbasFiltersButton = page
.locator('mat-button-toggle')
.filter({ hasText: 'SBAS Filters' });
await expect(sbasFiltersButton).toBeVisible({ timeout: 20_000 });
await sbasFiltersButton.click();

await page.getByRole('textbox', { name: 'Start Date' }).fill('9/1/2018');
await page.getByRole('textbox', { name: 'End Date' }).fill('11/1/2020');
await page.keyboard.press('Tab');

await expect(page.locator('app-scenes-list-header')).toContainText(
'67 Pairs',
);
});
50 changes: 50 additions & 0 deletions e2e/sbas/download-all-pairs.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import { test, expect } from '@playwright/test';

test('SBAS: Download All Pairs', async ({ page }) => {
await page.goto('/');
await page.getByRole('button', { name: 'Geographic Search' }).click();
await page
.getByRole('menuitem', { name: 'SBAS SBAS search provides' })
.click();
await page
.getByRole('region', { name: 'Scene' })
.getByLabel('Scene')
.fill('S1A_IW_SLC__1SDV_20200710T150225_20200710T150252_033394_03DE82_92BB');

await page
.getByText('Cancel SEARCH arrow_drop_down')
.getByRole('button', { name: 'SEARCH' })
.click();

const sbasFiltersButton = page
.locator('mat-button-toggle')
.filter({ hasText: 'SBAS Filters' });
await expect(sbasFiltersButton).toBeVisible({ timeout: 20_000 });

const scenesListHeader = page.locator('app-scenes-list-header');
await expect(scenesListHeader).toContainText(/\d+\s+Pairs?/i, {
timeout: 20_000,
});

const queueButton = scenesListHeader
.locator('.list-button-group')
.filter({ hasText: /QUEUE/i })
.locator('mat-button-toggle.control-mat-button-toggle');
await expect(queueButton).toBeVisible({ timeout: 20_000 });
await queueButton.click();

const addMenuItem = page.getByRole('menuitem', {
name: /Add [1-9]\d* Files to downloads/,
});
const menuText = (await addMenuItem.textContent()) ?? '';
const fileCount = menuText.match(/Add ([1-9]\d*)/)?.[1];
expect(fileCount).toBeTruthy();
await addMenuItem.click();

await page.getByRole('button', { name: 'Downloads' }).click();

await expect(page.locator('.dl-subtitle')).toContainText(`${fileCount} Files`);
await expect(page.locator('.dl-mat-dialog-content mat-list-item')).toHaveCount(
Number(fileCount),
);
});
31 changes: 31 additions & 0 deletions e2e/sbas/export.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { test, expect } from '@playwright/test';
import * as fs from 'fs';
import { parse } from 'csv-parse/sync';

test('SBAS Download Pair CSV', async ({ page }) => {
await page.goto('/');
await page.getByRole('button', { name: 'Geographic Search' }).click();
await page
.getByRole('menuitem', { name: 'SBAS SBAS search provides' })
.click();
await page
.getByRole('region', { name: 'Scene' })
.getByLabel('Scene')
.fill(
'S1B_WV_SLC__1SSV_20200720T132328_20200720T135106_022555_02ACF6_F823',
);
await page
.getByText('Cancel SEARCH arrow_drop_down')
.getByRole('button', { name: 'SEARCH' })
.click();
const downloadPromise = page.waitForEvent('download');
await page.getByRole('radiogroup').filter({ hasText: 'get_app' }).click();
const download = await downloadPromise;
const path = await download.path();
const records = parse(fs.readFileSync(path), {
columns: true,
skip_empty_lines: true,
});

expect(records[1]).not.toBe('');
});
42 changes: 42 additions & 0 deletions e2e/sbas/overlap-threshold.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import { test, expect } from '@playwright/test';

test('SBAS overlap threshold filter changes the selected value', async ({
page,
}) => {
await page.goto('/');
await page.getByRole('button', { name: 'Geographic Search' }).click();
await page
.getByRole('menuitem', { name: 'SBAS SBAS search provides' })
.click();
await page
.getByRole('region', { name: 'Scene' })
.getByLabel('Scene')
.fill('S1A_IW_SLC__1SDV_20210920T235648_20210920T235715_039772_04B42F_3C60');
await page
.getByText('Cancel SEARCH arrow_drop_down')
.getByRole('button', { name: 'SEARCH' })
.click();

await page
.locator('mat-button-toggle')
.filter({ hasText: 'SBAS Filters' })
.click();

await expect(page.locator('app-sbas-overlap-selector')).toContainText(
'50% Overlap Threshold',
);

const headerBefore = await page
.locator('app-scenes-list-header')
.textContent();

await page.locator('app-sbas-overlap-selector mat-select').click();
await page.getByRole('option', { name: 'Any Overlap Threshold' }).click();

await expect(page.locator('app-sbas-overlap-selector')).toContainText(
'Any Overlap Threshold',
);
await expect(page.locator('app-scenes-list-header')).not.toHaveText(
headerBefore ?? '',
);
});
30 changes: 30 additions & 0 deletions e2e/sbas/search-from-geo.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { test, expect } from '@playwright/test';
import { waitForASFAPIResponse } from 'e2e/helpers';

test('SBAS: Search for a Scene from Geo Search', async ({ page }) => {
await page.goto('/');
await page.getByRole('button', { name: 'Filters', exact: true }).click();
await page
.getByRole('region', { name: 'Area of Interest Options' })
.getByLabel('Area of Interest • WKT')
.fill('POINT(-166.6953 53.8476)');
await page
.locator('div')
.filter({ hasText: /^File Type$/ })
.first()
.click();
await page.getByText('(SLC)').first().click();
await page.locator('.cdk-overlay-backdrop').click();
await page
.getByText('Cancel SEARCH arrow_drop_down')
.getByRole('button', { name: 'SEARCH' })
.click();

await page.locator('app-scene').first().click();

const sbasSearch = waitForASFAPIResponse(page);
await page.getByRole('button', { name: 'SBAS', exact: true }).click();
await sbasSearch;

await expect(page.locator('app-scenes-list-header')).toContainText('Pairs');
});
Loading
Loading