diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml
index 1bb83737..0193425f 100644
--- a/.github/workflows/playwright.yml
+++ b/.github/workflows/playwright.yml
@@ -21,6 +21,9 @@ jobs:
run: npx playwright install --with-deps
- name: Run Playwright tests
run: npx playwright test
+ env:
+ PREVIEW_GLOBUS_ID_USERNAME: ${{ secrets.PREVIEW_GLOBUS_ID_USERNAME }}
+ PREVIEW_GLOBUS_ID_PASSWORD: ${{ secrets.PREVIEW_GLOBUS_ID_PASSWORD }}
- uses: actions/upload-artifact@v4
if: always()
with:
diff --git a/e2e/umd.spec.ts b/e2e/umd.spec.ts
index 39c0cb75..029ee281 100644
--- a/e2e/umd.spec.ts
+++ b/e2e/umd.spec.ts
@@ -1,7 +1,7 @@
import { test, expect } from '@playwright/test';
test('exports as "globus"', async ({ page }) => {
- await page.goto('umd.html');
+ await page.goto('umd');
await expect(page).toHaveTitle('@globus/sdk');
expect(await page.evaluate(() => window.globus.logger)).toBeDefined();
@@ -19,8 +19,12 @@ test('exports as "globus"', async ({ page }) => {
expect(await page.evaluate(() => window.globus.webapp)).toBeDefined();
});
+/**
+ * Basic E2E test to validate the creation of a AuthorizationManager and
+ * its ability to initiate the OAuth flow.
+ */
test('authorization', async ({ page }) => {
- await page.goto('umd-authorization.html');
+ await page.goto('umd-authorization');
await expect(page).toHaveTitle('@globus/sdk');
await expect(page.getByRole('button')).toHaveText('Sign In');
await page.getByRole('button').click();
@@ -34,3 +38,52 @@ test('authorization', async ({ page }) => {
expect(url).toContain('scope=openid+profile+email+offline_access');
expect(url).toContain('%26redirect_uri%3Dexample%253A%252F%252Fredirect%26');
});
+
+/**
+ * Validates the creation of an AuthorizationManager, authentication
+ * via Globus ID and a basic `ls`.
+ */
+test('ls', async ({ page }) => {
+ const USERNAME = process.env.PREVIEW_GLOBUS_ID_USERNAME;
+ const PASSWORD = process.env.PREVIEW_GLOBUS_ID_PASSWORD;
+
+ expect(
+ USERNAME,
+ `process.env.PREVIEW_GLOBUS_ID_USERNAME is required to run this test.`,
+ ).toBeDefined();
+ expect(
+ PASSWORD,
+ `process.env.PREVIEW_GLOBUS_ID_PASSWORD is required to run this test.`,
+ ).toBeDefined();
+
+ await page.goto('umd-transfer-ls');
+ await expect(page).toHaveTitle('@globus/sdk');
+ await expect(page.getByRole('button')).toHaveText('Sign In');
+
+ await page.getByRole('button').click();
+
+ /**
+ * Globus Auth – Log In (Account Select)
+ */
+ await page.getByText('Globus ID to sign in').click();
+ /**
+ * Globus ID – Log In
+ */
+ await page.getByRole('textbox', { name: 'username' }).fill(USERNAME);
+ await page.getByRole('textbox', { name: 'password' }).fill(PASSWORD);
+ await page.getByRole('button', { name: 'Log In' }).click();
+ /**
+ * AuthenticationManager bootstrapped to the authenticated state.
+ */
+ await expect(page.getByRole('button')).toHaveText('Sign Out', {
+ timeout: 10000,
+ });
+ /**
+ * User information was loaded from the token.
+ */
+ await expect(page.locator('#user-information')).not.toBeEmpty();
+ /**
+ * The `ls` returned a response.
+ */
+ await expect(page.locator('#ls-response')).not.toBeEmpty();
+});
diff --git a/e2e/www/dist b/e2e/www/dist
new file mode 120000
index 00000000..7724b922
--- /dev/null
+++ b/e2e/www/dist
@@ -0,0 +1 @@
+../../dist
\ No newline at end of file
diff --git a/e2e/www/umd-authorization.html b/e2e/www/umd-authorization.html
index a5b967b6..09de77ae 100644
--- a/e2e/www/umd-authorization.html
+++ b/e2e/www/umd-authorization.html
@@ -12,8 +12,6 @@
+
+
+
+
+
+
+
+
+