diff --git a/tests/README.md b/tests/README.md index 397453d3..13bea2bf 100644 --- a/tests/README.md +++ b/tests/README.md @@ -61,7 +61,19 @@ Help * Use snake_case (or Snake_Case or Snake_case or test_NASA_example or test_API_key) * Aether test/demo base URL: 'http://demo.localhost:5173' * Aether development API: 'https://dev-api.oneskyit.com' + +These are IDs for records that we can use for testing. Please do not delete them. They are also used for demo purposes with clients. +### Core Modules * Aether test/demo Account: '_XY7DXtc9MY' (1) "One Sky IT Demo" +* Aether test/demo Site: '92vkYC4fVEl' (12) "One Sky IT Demo" +* Aether test/demo Site Domain: '_6jcTbnJk-o' (12) "demo.localhost:5173" +* Aether test/demo Site Domain: 'heXRgHOs4ns' (30) "sk-demo.oneskyit.com" +* Aether test/demo Site Domain: 'DASm8fP92yw' (69) "dev-demo.oneskyit.com" +* Aether test/demo Site Domain: '2i_0Za6yRPo' (2) "demo.oneskyit.com" +* Aether test/demo Person: 'QWODAPCNLQU' (49) "Osiris Idem" +* Aether test/demo Person: 'HMQRNPIXQMK' (48) "Cleo Idem" + +### Events Modules * Aether test/demo Event: 'pjrcghqwert' (1) "Demo One Sky IT Conference" * Aether test/demo Event Session: 'DOW3h7v6H42' (703) "How To Do Things" * Aether test/demo Event Presentation: '7U2eXSjR6H4' (1670) "Build a House" @@ -71,7 +83,14 @@ Help * Aether test/demo Event Person: 'ffkKxiHpOEC' (16603) "Scott Idem" * Aether test/demo Event Badge Template: 'jgfixEpYp1B' (18) "Dev Demo 202x" * Aether test/demo Event Badge Template: 'rzmUgsk7mkq' (19) "Dev Demo 202x Workshops" +* Aether test/demo Event Location: 'VXXY-98-46-14' (26) "Ballroom 1" +* Aether test/demo Event Location: 'FGRN-67-92-45' (298) "Ballroom AB" +* Aether test/demo Event Location: 'PQKB-15-39-81' (78) "Poster Display Station A" + +### Journals Module * Aether test/demo Journal: 'BVYE-94-46-29' (42) "Testing Things" * Aether test/demo Journal Entry: 'xRx-Y4-h3-fU' (233) "Another Journal Entry in the Test Journal" + +### Archives Module * Aether test/demo Archive: 'nAA2bHLv8RK' (1) "One Sky Test Archive" * Aether test/demo Archive Content: 'UjKzrk-GKu5' (1) "Hosted File Test" diff --git a/tests/_helpers/env.ts b/tests/_helpers/env.ts index b2b81977..87ca147f 100644 --- a/tests/_helpers/env.ts +++ b/tests/_helpers/env.ts @@ -4,14 +4,14 @@ */ export const test_base_url = 'http://demo.localhost:5173'; export const dev_api_base = 'https://dev-api.oneskyit.com'; -export const demo_account_id = '_XY7DXtc9MY'; -export const demo_event_id = 'pjrcghqwert'; +export const testing_account_id = '_XY7DXtc9MY'; +export const testing_event_id = 'pjrcghqwert'; export const TEST_ENV = { test_base_url, dev_api_base, - demo_account_id, - demo_event_id + testing_account_id, + testing_event_id }; export default TEST_ENV; diff --git a/tests/coldstart_event_badges_list.test.ts b/tests/coldstart_event_badges_list.test.ts index 4f44ea0d..3cdc80b6 100644 --- a/tests/coldstart_event_badges_list.test.ts +++ b/tests/coldstart_event_badges_list.test.ts @@ -1,9 +1,9 @@ import { test, expect } from '@playwright/test'; import { ae_app_local_data_defaults } from './_helpers/ae_defaults'; -import { demo_event_id, demo_account_id } from './_helpers/env'; +import { testing_event_id, testing_account_id } from './_helpers/env'; -const demo_event = demo_event_id; -const demo_badge_id = 'UIJT-73-63-61'; // Per README test data +const event_id = testing_event_id; +const event_badge_id = 'UIJT-73-63-61'; // Per README test data test.describe('Cold-start: Event Badges List (IndexedDB empty)', () => { test.beforeEach(async ({ page }) => { @@ -23,13 +23,13 @@ test.describe('Cold-start: Event Badges List (IndexedDB empty)', () => { authenticated_access: true, trusted_access: true, edit_mode: false, - person_id: 'test-person-1', - user: { id: 'test-person-1' }, + person_id: 'HMQRNPIXQMK', // Per README test data + user: { id: 'HMQRNPIXQMK' }, // Per README test data mod: { ...defaults.mod, events: { ...defaults.mod.events, event_id: event_id } } }; window.localStorage.setItem('ae_loc', JSON.stringify(testData)); }, - { defaults: ae_app_local_data_defaults, event_id: demo_event, account_id: demo_account_id } + { defaults: ae_app_local_data_defaults, event_id: event_id, account_id: testing_account_id } ); // Navigate and clear all Dexie databases to simulate cold start @@ -60,7 +60,7 @@ test.describe('Cold-start: Event Badges List (IndexedDB empty)', () => { }); // Seed the event record in IDB so liveQuery finds it - await page.evaluate(({ demo_event }) => { + await page.evaluate(({ event_id }) => { return new Promise((resolve) => { try { const req = indexedDB.open('ae_events_db', 1); @@ -75,8 +75,8 @@ test.describe('Cold-start: Event Badges List (IndexedDB empty)', () => { const tx = db.transaction('event', 'readwrite'); const store = tx.objectStore('event'); store.put({ - id: demo_event, - event_id: demo_event, + id: event_id, + event_id: event_id, name: 'Cold Start Badge Test Event', cfg_json: {}, mod_pres_mgmt_json: {}, @@ -99,7 +99,7 @@ test.describe('Cold-start: Event Badges List (IndexedDB empty)', () => { resolve(); } }); - }, { demo_event }); + }, { event_id }); // Mock V3 API responses await page.route('**/v3/**', async (route) => { @@ -108,14 +108,14 @@ test.describe('Cold-start: Event Badges List (IndexedDB empty)', () => { const method = req.method(); // Event GET - if (url.includes(`/v3/crud/event/${demo_event}`) && method === 'GET') { + if (url.includes(`/v3/crud/event/${event_id}`) && method === 'GET') { return route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify({ data: { - id: demo_event, - event_id: demo_event, + id: event_id, + event_id: event_id, name: 'Cold Start Badge Test Event', cfg_json: {}, mod_pres_mgmt_json: {}, @@ -129,24 +129,24 @@ test.describe('Cold-start: Event Badges List (IndexedDB empty)', () => { } // Badge search/list - return enriched data like real API does - if (url.includes(`/v3/crud/event/${demo_event}/event_badge/search`) && method === 'POST') { + if (url.includes(`/v3/crud/event/${event_id}/event_badge/search`) && method === 'POST') { return route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify({ data: [ { - id: demo_badge_id, - event_badge_id: demo_badge_id, - event_id: demo_event, - event_badge_template_id: 'jgfixEpYp1B', + id: event_badge_id, + event_badge_id: event_badge_id, + event_id: event_id, + event_badge_template_id: 'jgfixEpYp1B', // Per README test data full_name_override: 'Scott Idem', given_name: 'Scott', family_name: 'Idem', email: 'scott@oneskyit.com', badge_type: 'attendee', badge_type_code: 'attendee', - person_id: 'ffkKxiHpOEC', + person_id: 'ffkKxiHpOEC', // Per README test data // Enriched fields from API joins person_given_name: 'Scott', person_family_name: 'Idem', @@ -175,8 +175,8 @@ test.describe('Cold-start: Event Badges List (IndexedDB empty)', () => { body: JSON.stringify({ data: { id: 'jgfixEpYp1B', - event_badge_template_id: 'jgfixEpYp1B', - event_id: demo_event, + event_badge_template_id: 'jgfixEpYp1B', // Per README test data + event_id: event_id, name: 'Dev Demo 202x', header_path: '/images/demo-header.png', logo_path: '/images/demo-logo.png', @@ -206,7 +206,7 @@ test.describe('Cold-start: Event Badges List (IndexedDB empty)', () => { }); test('renders Badge list with enriched data on first load (empty IDB)', async ({ page }) => { - await page.goto(`/events/${demo_event}/badges`); + await page.goto(`/events/${event_id}/badges`); // Wait for API call to complete await page.waitForResponse((r) => @@ -228,7 +228,7 @@ test.describe('Cold-start: Event Badges List (IndexedDB empty)', () => { }); test('verifies IndexedDB contains badge after cold-start load', async ({ page }) => { - await page.goto(`/events/${demo_event}/badges`); + await page.goto(`/events/${event_id}/badges`); await page.waitForResponse((r) => r.url().includes('event_badge/search') && r.status() === 200, @@ -239,7 +239,7 @@ test.describe('Cold-start: Event Badges List (IndexedDB empty)', () => { await page.waitForTimeout(1000); // Check IDB for badge record - const idb_check = await page.evaluate(async ({ demo_event, demo_badge_id }) => { + const idb_check = await page.evaluate(async ({ event_id, event_badge_id }) => { return new Promise((resolve) => { try { const req = indexedDB.open('ae_events_db'); @@ -247,7 +247,7 @@ test.describe('Cold-start: Event Badges List (IndexedDB empty)', () => { const db = req.result; const tx = db.transaction('badge', 'readonly'); const store = tx.objectStore('badge'); - const get_req = store.get(demo_badge_id); + const get_req = store.get(event_badge_id); get_req.onsuccess = () => { const badge = get_req.result; db.close(); @@ -255,7 +255,7 @@ test.describe('Cold-start: Event Badges List (IndexedDB empty)', () => { found: !!badge, has_full_name: badge?.full_name_override === 'Scott Idem', has_email: badge?.email === 'scott@oneskyit.com', - has_event_id: badge?.event_id === demo_event + has_event_id: badge?.event_id === event_id }); }; get_req.onerror = () => { @@ -268,7 +268,7 @@ test.describe('Cold-start: Event Badges List (IndexedDB empty)', () => { resolve({ found: false }); } }); - }, { demo_event, demo_badge_id }); + }, { event_id, event_badge_id }); expect(idb_check.found).toBe(true); expect(idb_check.has_full_name).toBe(true); @@ -277,7 +277,7 @@ test.describe('Cold-start: Event Badges List (IndexedDB empty)', () => { }); test('handles badge template relationship correctly', async ({ page }) => { - await page.goto(`/events/${demo_event}/badges`); + await page.goto(`/events/${event_id}/badges`); await page.waitForResponse((r) => r.url().includes('event_badge/search') && r.status() === 200, @@ -285,7 +285,7 @@ test.describe('Cold-start: Event Badges List (IndexedDB empty)', () => { ); // Badge detail view test - navigate to specific badge - await page.goto(`/events/${demo_event}/badges/${demo_badge_id}`); + await page.goto(`/events/${event_id}/badges/${event_badge_id}`); // Wait for badge view to load await page.waitForTimeout(2000); diff --git a/tests/coldstart_event_session.test.ts b/tests/coldstart_event_session.test.ts index fb9d5d7e..44965747 100644 --- a/tests/coldstart_event_session.test.ts +++ b/tests/coldstart_event_session.test.ts @@ -1,14 +1,14 @@ import { test, expect } from '@playwright/test'; import { ae_app_local_data_defaults } from './_helpers/ae_defaults'; -import { demo_event_id, demo_account_id } from './_helpers/env'; +import { testing_event_id, testing_account_id } from './_helpers/env'; // Demo test data IDs from One Sky IT Demo environment // Session: (703) "How To Do Things" // Presentation: (1670) "Build a House" // Presenter: (2202) "Bob The Builder" -const demo_session_id = 'DOW3h7v6H42'; -const demo_presentation_id = '7U2eXSjR6H4'; -const demo_presenter_id = 'gT-hxnifb-0'; +const event_session_id = 'DOW3h7v6H42'; // Per README test data +const event_presentation_id = '7U2eXSjR6H4'; // Per README test data +const event_presenter_id = 'gT-hxnifb-0'; // Per README test data test.describe('Cold-start: Event Session (IndexedDB empty)', () => { test.beforeEach(async ({ page }) => { @@ -21,7 +21,7 @@ test.describe('Cold-start: Event Session (IndexedDB empty)', () => { // Provide app localStorage before any scripts run await page.addInitScript( ({ defaults, event_id, account_id }) => { - const testData = { + const test_data = { ...defaults, account_id: account_id, administrator_access: true, @@ -31,13 +31,13 @@ test.describe('Cold-start: Event Session (IndexedDB empty)', () => { super_access: false, edit_mode: true, mod_abstracts_json: {}, - person_id: 'test-person-1', - user: { id: 'test-person-1' }, + person_id: 'QWODAPCNLQU', // Per README test data + user: { id: 'QWODAPCNLQU' }, // Per README test data mod: { ...defaults.mod, events: { ...defaults.mod.events, event_id: event_id } } }; - window.localStorage.setItem('ae_loc', JSON.stringify(testData)); + window.localStorage.setItem('ae_loc', JSON.stringify(test_data)); }, - { defaults: ae_app_local_data_defaults, event_id: demo_event_id, account_id: demo_account_id } + { defaults: ae_app_local_data_defaults, event_id: testing_event_id, account_id: testing_account_id } ); // Navigate to the application's origin so the page context is allowed @@ -76,22 +76,22 @@ test.describe('Cold-start: Event Session (IndexedDB empty)', () => { const method = req.method(); // Session GET - if (url.includes(`/v3/crud/event_session/${demo_session_id}`) && method === 'GET') { + if (url.includes(`/v3/crud/event_session/${event_session_id}`) && method === 'GET') { return route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify({ data: { - id: demo_session_id, - event_session_id: demo_session_id, - event_id: demo_event_id, + id: event_session_id, + event_session_id: event_session_id, + event_id: testing_event_id, name: 'How To Do Things', code: 'how-to-do-things', start_datetime: '2026-03-01T10:00:00Z', end_datetime: '2026-03-01T11:00:00Z', description: 'Cold start test session', - event_location_id: 'test-location-1', - poc_person_id: 'test-person-1', + event_location_id: 'VXXY-98-46-14', // Per README test data + poc_person_id: 'QWODAPCNLQU', // Per README test data cfg_json: {}, mod_pres_mgmt_json: {} } @@ -100,17 +100,17 @@ test.describe('Cold-start: Event Session (IndexedDB empty)', () => { } // Presentations list for session - if (url.includes('/v3/crud/event_presentation') && url.includes('for_obj_id') && url.includes(demo_session_id) && method === 'GET') { + if (url.includes('/v3/crud/event_presentation') && url.includes('for_obj_id') && url.includes(event_session_id) && method === 'GET') { return route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify({ data: [ { - id: demo_presentation_id, - event_presentation_id: demo_presentation_id, - event_session_id: demo_session_id, - event_id: demo_event_id, + id: event_presentation_id, + event_presentation_id: event_presentation_id, + event_session_id: event_session_id, + event_id: testing_event_id, name: 'Build a House', code: 'build-house', start_datetime: '2026-03-01T10:00:00Z', @@ -122,18 +122,18 @@ test.describe('Cold-start: Event Session (IndexedDB empty)', () => { } // Presenters for "Build a House" presentation - if (url.includes('/v3/crud/event_presenter') && url.includes(`for_obj_id=${demo_presentation_id}`) && method === 'GET') { + if (url.includes('/v3/crud/event_presenter') && url.includes(`for_obj_id=${event_presentation_id}`) && method === 'GET') { return route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify({ data: [ { - id: demo_presenter_id, - event_presenter_id: demo_presenter_id, - event_presentation_id: demo_presentation_id, - event_session_id: demo_session_id, - event_id: demo_event_id, + id: event_presenter_id, + event_presenter_id: event_presenter_id, + event_presentation_id: event_presentation_id, + event_session_id: event_session_id, + event_id: testing_event_id, given_name: 'Bob', family_name: 'The Builder', full_name: 'Bob The Builder', @@ -155,7 +155,7 @@ test.describe('Cold-start: Event Session (IndexedDB empty)', () => { test('renders Session with Presentations and Presenters on first load', async ({ page }) => { // Navigate directly to the session page (cold start - no IDB data) - await page.goto(`/events/${demo_event_id}/session/${demo_session_id}`); + await page.goto(`/events/${testing_event_id}/session/${event_session_id}`); // 1. Verify session name is visible await expect(page.getByText('How To Do Things')).toBeVisible({ timeout: 10000 }); @@ -173,7 +173,7 @@ test.describe('Cold-start: Event Session (IndexedDB empty)', () => { }); test('verifies IndexedDB contains all nested data after load', async ({ page }) => { - await page.goto(`/events/${demo_event_id}/session/${demo_session_id}`); + await page.goto(`/events/${testing_event_id}/session/${event_session_id}`); // Wait for data to be visible (indicating IDB writes completed) await expect(page.getByText('Bob The Builder')).toBeVisible({ timeout: 10000 }); diff --git a/tests/coldstart_event_settings.test.ts b/tests/coldstart_event_settings.test.ts index 562096cb..be483b8c 100644 --- a/tests/coldstart_event_settings.test.ts +++ b/tests/coldstart_event_settings.test.ts @@ -1,8 +1,8 @@ import { test, expect } from '@playwright/test'; import { ae_app_local_data_defaults } from './_helpers/ae_defaults'; -import { demo_event_id, demo_account_id } from './_helpers/env'; +import { testing_event_id, testing_account_id } from './_helpers/env'; -const demo_event = demo_event_id; +const demo_event = testing_event_id; test.describe('Cold-start: Event Settings (IndexedDB empty)', () => { test.beforeEach(async ({ page }) => { @@ -30,13 +30,13 @@ test.describe('Cold-start: Event Settings (IndexedDB empty)', () => { mod_abstracts_json: {}, // Provide a test person id so components that expect an authenticated // user/person render deterministically in tests - person_id: 'test-person-1', - user: { id: 'test-person-1' }, + person_id: 'HMQRNPIXQMK', // Per README test data + user: { id: 'HMQRNPIXQMK' }, // Per README test data mod: { ...defaults.mod, events: { ...defaults.mod.events, event_id: event_id } } }; window.localStorage.setItem('ae_loc', JSON.stringify(testData)); }, - { defaults: ae_app_local_data_defaults, event_id: demo_event, account_id: demo_account_id } + { defaults: ae_app_local_data_defaults, event_id: demo_event, account_id: testing_account_id } ); // Navigate to the application's origin so the page context is allowed diff --git a/tests/coldstart_journal.test.ts b/tests/coldstart_journal.test.ts index 62157f22..86040571 100644 --- a/tests/coldstart_journal.test.ts +++ b/tests/coldstart_journal.test.ts @@ -1,9 +1,9 @@ import { test, expect } from '@playwright/test'; import { ae_app_local_data_defaults } from './_helpers/ae_defaults'; -import { demo_account_id } from './_helpers/env'; +import { testing_account_id } from './_helpers/env'; // Use canonical demo journal id for deterministic tests -const demo_journal = 'BVYE-94-46-29'; +const journal_id = 'BVYE-94-46-29'; // Per README test data test.describe('Cold-start: Journal view (IndexedDB empty)', () => { test.beforeEach(async ({ page }) => { @@ -30,14 +30,14 @@ test.describe('Cold-start: Journal view (IndexedDB empty)', () => { // Ensure abstract module prop is present for layout/components mod_abstracts_json: {}, // Provide a test person id so owner-only pages render in tests - person_id: 'test-person-1', - user: { id: 'test-person-1' } + person_id: 'QWODAPCNLQU', // Per README test data + user: { id: 'QWODAPCNLQU' } // Per README test data }; window.localStorage.setItem('ae_loc', JSON.stringify(testData)); // Also set a lightweight selection object used by pages window.localStorage.setItem('ae_slct', JSON.stringify({ journal_id: journal_id })); }, - { defaults: ae_app_local_data_defaults, account_id: demo_account_id, journal_id: demo_journal } + { defaults: ae_app_local_data_defaults, account_id: testing_account_id, journal_id: journal_id } ); // Navigate to the app origin so IndexedDB is available in the page @@ -68,7 +68,7 @@ test.describe('Cold-start: Journal view (IndexedDB empty)', () => { }); // Seed IndexedDB with the journal record so local liveQuery finds it - await page.evaluate(({ demo_journal }) => { + await page.evaluate(({ journal_id }) => { return new Promise((resolve) => { try { const req = indexedDB.open('ae_journals_db', 1); @@ -82,7 +82,8 @@ test.describe('Cold-start: Journal view (IndexedDB empty)', () => { const db = req.result; const tx = db.transaction('journal', 'readwrite'); const store = tx.objectStore('journal'); - store.put({ id: demo_journal, journal_id: demo_journal, name: 'Demo Journal (Cold Start Test)', description: 'Created for cold-start Playwright test', person_id: 'test-person-1' }); + // Why are both the id and journal_id fields being set? + store.put({ id: journal_id, journal_id: journal_id, name: 'Demo Journal (Cold Start Test)', description: 'Created for cold-start Playwright test', person_id: 'QWODAPCNLQU' }); // Per README test data tx.oncomplete = () => { db.close(); resolve(); @@ -97,20 +98,20 @@ test.describe('Cold-start: Journal view (IndexedDB empty)', () => { resolve(); } }); - }, { demo_journal }); + }, { journal_id }); // Mock the journal GET endpoint used by the journal page await page.route('**/v3/**', async (route) => { const req = route.request(); const url = req.url(); - if (url.includes(`/v3/crud/journal/${demo_journal}`) && req.method() === 'GET') { + if (url.includes(`/v3/crud/journal/${journal_id}`) && req.method() === 'GET') { return route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify({ data: { - id: demo_journal, - journal_id: demo_journal, + id: journal_id, // Why are both the id and journal_id fields being set? + journal_id: journal_id, // Why are both the id and journal_id fields being set? name: 'Demo Journal (Cold Start Test)', description: 'Created for cold-start Playwright test' } }) @@ -125,7 +126,7 @@ test.describe('Cold-start: Journal view (IndexedDB empty)', () => { }); test('renders Journal page without prior IndexedDB cache', async ({ page }) => { - await page.goto(`/journals/${demo_journal}`); + await page.goto(`/journals/${journal_id}`); // The journal title appears in the journal component header const journal_name = page.locator('h2.journal__name'); diff --git a/tests/event_badge.test.ts b/tests/event_badge.test.ts index d1ed6f2a..17ccfe63 100644 --- a/tests/event_badge.test.ts +++ b/tests/event_badge.test.ts @@ -1,9 +1,9 @@ import { test, expect } from '@playwright/test'; import { ae_app_local_data_defaults } from './_helpers/ae_defaults'; -import { demo_event_id, demo_account_id } from './_helpers/env'; +import { testing_event_id, testing_account_id } from './_helpers/env'; import { attach_minimal_v3_routes } from './_helpers/minimal_v3_mocks'; -const demo_event = demo_event_id; +const event_id = testing_event_id; test.describe('Event Badge Page - smoke', () => { test.beforeEach(async ({ page }) => { @@ -12,20 +12,20 @@ test.describe('Event Badge Page - smoke', () => { if (msg.type() === 'error' || msg.type() === 'warn') console.error(`BROWSER [${msg.type().toUpperCase()}]: ${msg.text()}`); }); - await attach_minimal_v3_routes(page, demo_event); + await attach_minimal_v3_routes(page, event_id); await page.addInitScript((defaults, event_id, account_id) => { const test_data = { ...defaults, account_id: account_id, manager_access: true }; test_data.mod = { ...defaults.mod, events: { ...defaults.mod.events, event_id } }; window.localStorage.setItem('ae_loc', JSON.stringify(test_data)); - }, ae_app_local_data_defaults, demo_event, demo_account_id); + }, ae_app_local_data_defaults, event_id, testing_account_id); }); test('loads badges list without console errors', async ({ page }) => { const errors: string[] = []; page.on('pageerror', (err) => errors.push(err.message)); - await page.goto(`/events/${demo_event}/badges`); + await page.goto(`/events/${event_id}/badges`); await page.waitForResponse((r) => r.url().includes('site_domain/search') && r.status() === 200); expect(errors).toHaveLength(0); diff --git a/tests/event_badge_crud.test.ts b/tests/event_badge_crud.test.ts index 7e552b39..2b145966 100644 --- a/tests/event_badge_crud.test.ts +++ b/tests/event_badge_crud.test.ts @@ -1,8 +1,8 @@ import { test, expect } from '@playwright/test'; import { ae_app_local_data_defaults } from './_helpers/ae_defaults'; -import { demo_event_id, demo_account_id } from './_helpers/env'; +import { testing_event_id, testing_account_id } from './_helpers/env'; -const test_event_id = demo_event_id; +const test_event_id = testing_event_id; // Why is this here? Just using testing_event_id instead? test.describe('event_badge_crud (create, find, edit, delete)', () => { test.beforeEach(async ({ page }) => { @@ -65,10 +65,10 @@ test.describe('event_badge_crud (create, find, edit, delete)', () => { page.on('dialog', async (dialog) => { await dialog.accept(); }); - await page.addInitScript(({ defaults, eventId, accountId }) => { - const test_data = { ...defaults, account_id: accountId, manager_access: true, administrator_access: true, edit_mode: true, mod: { ...defaults.mod, events: { ...defaults.mod.events, event_id: eventId } } }; + await page.addInitScript(({ defaults, event_id, accountId }) => { + const test_data = { ...defaults, account_id: accountId, manager_access: true, administrator_access: true, edit_mode: true, mod: { ...defaults.mod, events: { ...defaults.mod.events, event_id: event_id } } }; window.localStorage.setItem('ae_loc', JSON.stringify(test_data)); - }, { defaults: ae_app_local_data_defaults, eventId: test_event_id, accountId: demo_account_id }); + }, { defaults: ae_app_local_data_defaults, event_id: test_event_id, accountId: testing_account_id }); }); test('create -> find -> edit -> delete badge', async ({ page }) => { @@ -101,8 +101,8 @@ test.describe('event_badge_crud (create, find, edit, delete)', () => { // Find badges via search endpoint (simulate listing page) using in-page fetch await page.goto(`/events/${test_event_id}/badges`); - const search_json = await page.evaluate(async (eventId) => { - const r = await fetch(`/v3/crud/event/${eventId}/event_badge/search`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({}) }); + const search_json = await page.evaluate(async (event_id) => { + const r = await fetch(`/v3/crud/event/${event_id}/event_badge/search`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({}) }); return await r.json(); }, test_event_id); expect(Array.isArray(search_json.data)).toBeTruthy(); @@ -110,24 +110,24 @@ test.describe('event_badge_crud (create, find, edit, delete)', () => { // Edit badge via browser fetch (exercise nested update) const edit_resp = await page.evaluate(async (args) => { - const { eventId, badgeId } = args; - const r = await fetch(`/v3/crud/event/${eventId}/event_badge/${badgeId}/`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ full_name_override: 'Edited User' }) }); + const { event_id, event_badge_id } = args; + const r = await fetch(`/v3/crud/event/${event_id}/event_badge/${event_badge_id}/`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ full_name_override: 'Edited User' }) }); return { status: r.status, json: await r.json() }; - }, { eventId: test_event_id, badgeId: badge_id }); + }, { event_id: test_event_id, event_badge_id: badge_id }); expect(edit_resp.status === 200).toBeTruthy(); expect(edit_resp.json.data.full_name_override).toBe('Edited User'); // Delete badge via browser fetch const del_resp = await page.evaluate(async (args) => { - const { eventId, badgeId } = args; - const r = await fetch(`/v3/crud/event/${eventId}/event_badge/${badgeId}/`, { method: 'DELETE' }); + const { event_id, event_badge_id } = args; + const r = await fetch(`/v3/crud/event/${event_id}/event_badge/${event_badge_id}/`, { method: 'DELETE' }); return { status: r.status, ok: r.ok }; - }, { eventId: test_event_id, badgeId: badge_id }); + }, { event_id: test_event_id, event_badge_id: badge_id }); expect(del_resp.ok).toBeTruthy(); // Confirm search returns no items - const post_delete_json = await page.evaluate(async (eventId) => { - const r = await fetch(`/v3/crud/event/${eventId}/event_badge/search`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({}) }); + const post_delete_json = await page.evaluate(async (event_id) => { + const r = await fetch(`/v3/crud/event/${event_id}/event_badge/search`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({}) }); return await r.json(); }, test_event_id); expect(Array.isArray(post_delete_json.data)).toBeTruthy(); diff --git a/tests/event_badge_data_integrity.test.ts b/tests/event_badge_data_integrity.test.ts index 528abff6..1c1f1d9c 100644 --- a/tests/event_badge_data_integrity.test.ts +++ b/tests/event_badge_data_integrity.test.ts @@ -1,10 +1,10 @@ import { test, expect } from '@playwright/test'; import { ae_app_local_data_defaults } from './_helpers/ae_defaults'; -import { demo_event_id, demo_account_id } from './_helpers/env'; +import { testing_event_id, testing_account_id } from './_helpers/env'; -const demo_event = demo_event_id; -const demo_badge_id = 'test-badge-123'; -const demo_template_id = 'jgfixEpYp1B'; +const event_id = testing_event_id; +const event_badge_id = 'UIJT-73-63-61'; // Per README test data +const event_badge_template_id = 'jgfixEpYp1B'; // Per README test data test.describe('Badge Data Integrity & Field Mapping', () => { test.beforeEach(async ({ page }) => { @@ -29,7 +29,7 @@ test.describe('Badge Data Integrity & Field Mapping', () => { }; window.localStorage.setItem('ae_loc', JSON.stringify(testData)); }, - { defaults: ae_app_local_data_defaults, event_id: demo_event, account_id: demo_account_id } + { defaults: ae_app_local_data_defaults, event_id: event_id, account_id: testing_account_id } ); // Mock V3 API with realistic enriched responses @@ -46,14 +46,14 @@ test.describe('Badge Data Integrity & Field Mapping', () => { }); } - if (url.includes(`/v3/crud/event/${demo_event}`) && method === 'GET') { + if (url.includes(`/v3/crud/event/${event_id}`) && method === 'GET') { return route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify({ data: { - id: demo_event, - event_id: demo_event, + id: event_id, // Why are both the id and event_id fields being set? + event_id: event_id, // Why are both the id and event_id fields being set? name: 'Badge Integrity Test Event', cfg_json: {}, mod_pres_mgmt_json: {}, @@ -67,17 +67,17 @@ test.describe('Badge Data Integrity & Field Mapping', () => { } // Badge search with enriched fields - if (url.includes(`/v3/crud/event/${demo_event}/event_badge/search`) && method === 'POST') { + if (url.includes(`/v3/crud/event/${event_id}/event_badge/search`) && method === 'POST') { return route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify({ data: [ { - id: demo_badge_id, - event_badge_id: demo_badge_id, - event_id: demo_event, - event_badge_template_id: demo_template_id, + id: event_badge_id, + event_badge_id: event_badge_id, + event_id: event_id, + event_badge_template_id: event_badge_template_id, full_name_override: 'Jane Smith', given_name: 'Jane', family_name: 'Smith', @@ -105,16 +105,16 @@ test.describe('Badge Data Integrity & Field Mapping', () => { } // Badge template list - if (url.includes(`/v3/crud/event/${demo_event}/event_badge_template`) && method === 'GET') { + if (url.includes(`/v3/crud/event/${event_id}/event_badge_template`) && method === 'GET') { return route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify({ data: [ { - id: demo_template_id, - event_badge_template_id: demo_template_id, - event_id: demo_event, + id: event_badge_template_id, + event_badge_template_id: event_badge_template_id, + event_id: event_id, name: 'Standard Template 2026', header_path: '/images/header.png', logo_path: '/images/logo.png', @@ -136,15 +136,15 @@ test.describe('Badge Data Integrity & Field Mapping', () => { } // Badge template GET by ID - if (url.includes(`/v3/crud/event_badge_template/${demo_template_id}`) && method === 'GET') { + if (url.includes(`/v3/crud/event_badge_template/${event_badge_template_id}`) && method === 'GET') { return route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify({ data: { - id: demo_template_id, - event_badge_template_id: demo_template_id, - event_id: demo_event, + id: event_badge_template_id, + event_badge_template_id: event_badge_template_id, + event_id: event_id, name: 'Standard Template 2026', header_path: '/images/header.png', logo_path: '/images/logo.png', @@ -171,7 +171,7 @@ test.describe('Badge Data Integrity & Field Mapping', () => { }); test('Badge list loads without crashing', async ({ page }) => { - await page.goto(`/events/${demo_event}/badges`); + await page.goto(`/events/${event_id}/badges`); await page.waitForResponse((r) => r.url().includes('event_badge/search') && r.status() === 200 @@ -191,7 +191,7 @@ test.describe('Badge Data Integrity & Field Mapping', () => { }); test('Badge template list loads and displays all templates', async ({ page }) => { - await page.goto(`/events/${demo_event}/templates`); + await page.goto(`/events/${event_id}/templates`); await page.waitForResponse((r) => r.url().includes('event_badge_template') && r.status() === 200 @@ -209,7 +209,7 @@ test.describe('Badge Data Integrity & Field Mapping', () => { }); test('Badge template form fields render correctly', async ({ page }) => { - await page.goto(`/events/${demo_event}/templates`); + await page.goto(`/events/${event_id}/templates`); // Click "Add New Template" button const add_btn = page.getByRole('button', { name: /Add New Template/i }); @@ -224,7 +224,7 @@ test.describe('Badge Data Integrity & Field Mapping', () => { }); test('Badge template values persist in form when editing', async ({ page }) => { - await page.goto(`/events/${demo_event}/templates`); + await page.goto(`/events/${event_id}/templates`); await page.waitForResponse((r) => r.url().includes('event_badge_template') && r.status() === 200 @@ -255,7 +255,7 @@ test.describe('Badge Data Integrity & Field Mapping', () => { (window as any).aetherNative = undefined; }); - await page.goto(`/events/${demo_event}/badges`); + await page.goto(`/events/${event_id}/badges`); await page.waitForResponse((r) => r.url().includes('event_badge/search') && r.status() === 200, @@ -283,9 +283,9 @@ test.describe('Badge Data Integrity & Field Mapping', () => { body: JSON.stringify({ data: [ { - id: demo_badge_id, - event_badge_id: demo_badge_id, - event_id: demo_event, + id: event_badge_id, + event_badge_id: event_badge_id, + event_id: event_id, full_name_override: 'Minimal Badge', enable: true, priority: 0, @@ -299,7 +299,7 @@ test.describe('Badge Data Integrity & Field Mapping', () => { }); }); - await page.goto(`/events/${demo_event}/badges`); + await page.goto(`/events/${event_id}/badges`); await page.waitForResponse((r) => r.url().includes('event_badge/search') && r.status() === 200, diff --git a/tests/event_badge_interaction.test.ts b/tests/event_badge_interaction.test.ts index 3dc617ab..83402c0a 100644 --- a/tests/event_badge_interaction.test.ts +++ b/tests/event_badge_interaction.test.ts @@ -1,8 +1,8 @@ import { test, expect } from '@playwright/test'; import { ae_app_local_data_defaults } from './_helpers/ae_defaults'; -import { demo_event_id, demo_account_id } from './_helpers/env'; +import { testing_event_id, testing_account_id } from './_helpers/env'; -const demo_event = demo_event_id; +const event_id = testing_event_id; test.describe('Event Badge - interaction', () => { test.beforeEach(async ({ page }) => { @@ -18,13 +18,13 @@ test.describe('Event Badge - interaction', () => { const url = req.url(); // Provide the minimal event payload for the settings page to render - if (url.includes(`/v3/crud/event/${demo_event}`) && req.method() === 'GET') { + if (url.includes(`/v3/crud/event/${event_id}`) && req.method() === 'GET') { return route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify({ data: { - id: demo_event, - event_id: demo_event, + id: event_id, + event_id: event_id, name: 'Test Event for Badge Interaction', cfg_json: {}, mod_pres_mgmt_json: {}, @@ -37,7 +37,7 @@ test.describe('Event Badge - interaction', () => { } // For badge create requests, return a simple created envelope with a fixed id. - if (url.includes(`/v3/crud/event/${demo_event}/event_badge`) && req.method() === 'POST') { + if (url.includes(`/v3/crud/event/${event_id}/event_badge`) && req.method() === 'POST') { return route.fulfill({ status: 201, contentType: 'application/json', body: JSON.stringify({ data: { event_badge_id: 'new-badge-1' } }) }); } @@ -61,12 +61,12 @@ test.describe('Event Badge - interaction', () => { }; window.localStorage.setItem('ae_loc', JSON.stringify(testData)); }, - { defaults: ae_app_local_data_defaults, event_id: demo_event, account_id: demo_account_id } + { defaults: ae_app_local_data_defaults, event_id: event_id, account_id: testing_account_id } ); }); test('creates a badge via UI and posts to nested endpoint', async ({ page }) => { - await page.goto(`/events/${demo_event}/settings`); + await page.goto(`/events/${event_id}/settings`); const add_btn = page.getByRole('button', { name: 'Add New Badge' }); await expect(add_btn).toBeVisible(); @@ -89,7 +89,7 @@ test.describe('Event Badge - interaction', () => { await allow_tracking_checkbox.check(); const [create_request] = await Promise.all([ - page.waitForRequest((r) => r.url().includes(`/v3/crud/event/${demo_event}/event_badge`) && r.method() === 'POST'), + page.waitForRequest((r) => r.url().includes(`/v3/crud/event/${event_id}/event_badge`) && r.method() === 'POST'), page.getByRole('button', { name: 'Create Badge' }).click() ]); diff --git a/tests/event_presenter.test.ts b/tests/event_presenter.test.ts index 726fec03..20a0b2ec 100644 --- a/tests/event_presenter.test.ts +++ b/tests/event_presenter.test.ts @@ -1,9 +1,9 @@ import { test, expect } from '@playwright/test'; import { ae_app_local_data_defaults } from './_helpers/ae_defaults'; -import { demo_event_id, demo_account_id } from './_helpers/env'; +import { testing_event_id, testing_account_id } from './_helpers/env'; import { attach_minimal_v3_routes } from './_helpers/minimal_v3_mocks'; -const demo_event = demo_event_id; +const event_id = testing_event_id; test.describe('Event Presenter Page - smoke', () => { test.beforeEach(async ({ page }) => { @@ -12,21 +12,21 @@ test.describe('Event Presenter Page - smoke', () => { if (msg.type() === 'error' || msg.type() === 'warn') console.error(`BROWSER [${msg.type().toUpperCase()}]: ${msg.text()}`); }); - await attach_minimal_v3_routes(page, demo_event); + await attach_minimal_v3_routes(page, event_id); await page.addInitScript((defaults, event_id, account_id) => { const test_data = { ...defaults, account_id: account_id, manager_access: true }; // ensure the events module has the event id available test_data.mod = { ...defaults.mod, events: { ...defaults.mod.events, event_id } }; window.localStorage.setItem('ae_loc', JSON.stringify(test_data)); - }, ae_app_local_data_defaults, demo_event, demo_account_id); + }, ae_app_local_data_defaults, event_id, testing_account_id); }); test('opens presenter editor without throwing', async ({ page }) => { const errors: string[] = []; page.on('pageerror', (e) => errors.push(e.message)); - await page.goto(`/events/${demo_event}/presenters`); + await page.goto(`/events/${event_id}/presenters`); await page.waitForResponse((r) => r.url().includes('site_domain/search') && r.status() === 200); expect(errors).toHaveLength(0); diff --git a/tests/private_network.test.ts b/tests/private_network.test.ts index a8af70e0..8c6a853e 100644 --- a/tests/private_network.test.ts +++ b/tests/private_network.test.ts @@ -62,7 +62,7 @@ test('detect private/local network requests and PNA preflights', async ({ page } // CDP not available in this context; continue with high-level capture } - await page.goto('http://demo.localhost:5173/'); + await page.goto('http://demo.localhost:5173/'); // Per README test data await page.waitForLoadState('networkidle'); // Report findings for easier debugging diff --git a/tests/v3_api_nested_crud.test.ts b/tests/v3_api_nested_crud.test.ts index d2de30d7..7c9e0798 100644 --- a/tests/v3_api_nested_crud.test.ts +++ b/tests/v3_api_nested_crud.test.ts @@ -25,7 +25,7 @@ import { ae_app_local_data_defaults } from './_helpers/ae_defaults'; * validate the refactored data-handling logic. */ -const testEventId = 'pjrcghqwert'; +const testing_event_id = 'pjrcghqwert'; // Per README test data test.describe('V3 API Nested CRUD Integrity', () => { test.setTimeout(7000); @@ -50,24 +50,24 @@ test.describe('V3 API Nested CRUD Integrity', () => { return route.fulfill({ status: 200, contentType: 'application/json', - body: JSON.stringify({ data: [{ id: 'test-site-domain-id', site_id: 'test-site-id', account_id: '_XY7DXtc9MY' }] }) + body: JSON.stringify({ data: [{ id: '_6jcTbnJk-o', site_id: '_6jcTbnJk-o', account_id: '_XY7DXtc9MY' }] }) // Per README test data }); } // Mock the parent event object so the page can load - if (url.includes(`/v3/crud/event/${testEventId}`) && req.method() === 'GET') { + if (url.includes(`/v3/crud/event/${testing_event_id}`) && req.method() === 'GET') { return route.fulfill({ status: 200, contentType: 'application/json', - body: JSON.stringify({ data: { id: testEventId, event_id: testEventId, name: 'Test Event for Nested CRUD' } }) + body: JSON.stringify({ data: { id: testing_event_id, event_id: testing_event_id, name: 'Test Event for Nested CRUD' } }) }); } // For nested create endpoint, capture and forward (fulfill) with created object - if (url.includes(`/v3/crud/event/${testEventId}/event_location`) && req.method() === 'POST') { + if (url.includes(`/v3/crud/event/${testing_event_id}/event_location`) && req.method() === 'POST') { const post = await req.postData(); console.log('Captured POST to nested endpoint:', url, post ? post.slice(0,200) : ''); - return route.fulfill({ status: 201, contentType: 'application/json', body: JSON.stringify({ data: { event_location_id: 'new-loc-1', name: 'TEMP Location Name', event_id: testEventId } }) }); + return route.fulfill({ status: 201, contentType: 'application/json', body: JSON.stringify({ data: { event_location_id: 'new-loc-1', name: 'TEMP Location Name', event_id: testing_event_id } }) }); } // Default mock for other /v3/ calls @@ -93,11 +93,11 @@ test.describe('V3 API Nested CRUD Integrity', () => { }; window.localStorage.setItem('ae_loc', JSON.stringify(testData)); }, - { defaults: ae_app_local_data_defaults, eventId: testEventId } + { defaults: ae_app_local_data_defaults, eventId: testing_event_id } ); // Navigate to the page for each test. - await page.goto(`/events/${testEventId}/locations`); + await page.goto(`/events/${testing_event_id}/locations`); }); test('should send a nested request when creating an Event Location', async ({ page }) => { @@ -124,7 +124,7 @@ test.describe('V3 API Nested CRUD Integrity', () => { body: JSON.stringify({ name: 'TEMP Location Name', event_id: eventId }) }); try { return { status: r.status, json: await r.json() }; } catch(e) { return { status: r.status, json: null }; } - }, testEventId as any); + }, testing_event_id as any); expect(resp.status === 200 || resp.status === 201).toBeTruthy(); expect(resp.json).toBeDefined(); @@ -136,7 +136,7 @@ test.describe('V3 API Nested CRUD Integrity', () => { // const postData = request.postDataJSON(); // Assert that the request was sent to the correct nested URL - // expect(request.url()).toContain(`/v3/crud/event/${testEventId}/event_location`); + // expect(request.url()).toContain(`/v3/crud/event/${testing_event_id}/event_location`); // Assert that the payload contains the correct fields and *does not* contain the parent ID // expect(postData.fields).toBeDefined(); diff --git a/tests/v3_api_security.modern.test.ts b/tests/v3_api_security.modern.test.ts index 18ecd99e..c5ab8526 100644 --- a/tests/v3_api_security.modern.test.ts +++ b/tests/v3_api_security.modern.test.ts @@ -55,12 +55,12 @@ test.describe('V3 API Header Integrity (modernized)', () => { }); test('Verify Account ID Scavenging from localStorage on CRUD requests', async ({ page }) => { - const testAccountId = 'scavenged-account-id-123'; + const test_account_id = '_XY7DXtc9MY'; // Per README test data await page.addInitScript(({ defaults, id }) => { const testData = { ...defaults, account_id: id, manager_access: true }; window.localStorage.setItem('ae_loc', JSON.stringify(testData)); - }, { defaults: ae_app_local_data_defaults, id: testAccountId }); + }, { defaults: ae_app_local_data_defaults, id: test_account_id }); const requestPromise = page.waitForRequest((request) => request.url().includes('/v3/crud/user/search')); @@ -69,6 +69,6 @@ test.describe('V3 API Header Integrity (modernized)', () => { const request = await requestPromise; const headers = request.headers(); - expect(headers['x-account-id']).toBe(testAccountId); + expect(headers['x-account-id']).toBe(test_account_id); }); });