@@ -249,15 +249,18 @@ test("Game Hub creates, opens, and deletes mock games", async ({ page }) => {
249249 try {
250250 await expect ( page . locator ( ".tool-workspace" ) ) . toBeVisible ( ) ;
251251 await expect ( page . locator ( "style, [style], script:not([src])" ) ) . toHaveCount ( 0 ) ;
252- await expect ( page . getByRole ( "button" , { name : "Add Game" } ) ) . toHaveClass ( "btn" ) ;
252+ await expect ( page . getByRole ( "button" , { name : "Add Game" } ) ) . toHaveClass ( / \b b t n \b / ) ;
253+ await expect ( page . getByRole ( "button" , { name : "Add Game" } ) ) . toHaveClass ( / \b b t n - - c o m p a c t \b / ) ;
253254 await expect ( page . getByRole ( "button" , { name : "Add Game" } ) ) . toBeEnabled ( ) ;
254255 await expect ( page . getByLabel ( "Game Name" ) ) . toHaveCount ( 0 ) ;
255256 await expect ( page . getByLabel ( "Game Purpose" ) ) . toHaveCount ( 0 ) ;
256257 await expect ( page . getByLabel ( "Game Status" ) ) . toHaveCount ( 0 ) ;
257258 await expect ( page . getByRole ( "button" , { name : "Delete Open Game" } ) ) . toHaveClass ( "btn" ) ;
258259 await expect ( page . getByRole ( "button" , { name : "Delete Open Game" } ) ) . toBeEnabled ( ) ;
259260 await expect ( page . locator ( "summary" ) . filter ( { hasText : / ^ G a m e S e t u p $ / } ) ) . toHaveCount ( 0 ) ;
261+ await expect ( page . locator ( "summary" ) . filter ( { hasText : / ^ G a m e C r e w $ / } ) ) . toHaveCount ( 1 ) ;
260262 await expect ( page . getByRole ( "link" , { name : "Open Game Journey" } ) ) . toHaveCount ( 0 ) ;
263+ await expect ( page . locator ( ".tool-center-panel" ) ) . not . toContainText ( "Review games in the parent table" ) ;
261264 await expect ( page . locator ( "[data-project-record-status]" ) ) . toHaveText ( "Game table loaded." ) ;
262265 await expect ( page . locator ( "[data-game-project-information]" ) ) . toHaveCount ( 0 ) ;
263266 await expect ( page . locator ( "[data-project-records-table]" ) ) . toHaveCount ( 0 ) ;
@@ -281,12 +284,12 @@ test("Game Hub creates, opens, and deletes mock games", async ({ page }) => {
281284 "Game" ,
282285 "Purpose" ,
283286 "Status" ,
284- "Owner" ,
285287 "Actions" ,
286288 ] ) ;
287- await expect ( page . locator ( "[data-game-rows-table='true'] thead" ) ) . not . toContainText ( / R o l e | N e x t T o o l / ) ;
289+ await expect ( page . locator ( "[data-game-rows-table='true'] thead" ) ) . not . toContainText ( / O w n e r | R o l e | N e x t T o o l / ) ;
288290 const demoGameRow = page . locator ( "[data-game-row='demo-game']" ) ;
289- await expect ( demoGameRow . locator ( "td" ) ) . toHaveText ( [ "Game" , "Under Construction" , "User 1" , "Edit" ] ) ;
291+ await expect ( demoGameRow . locator ( "td" ) ) . toHaveText ( [ "Game" , "Under Construction" , "Edit" ] ) ;
292+ await expect ( demoGameRow ) . not . toContainText ( "User 1" ) ;
290293 await expect ( demoGameRow ) . toHaveAttribute ( "data-game-active" , "true" ) ;
291294 await expect ( demoGameRow ) . toHaveAttribute ( "aria-current" , "true" ) ;
292295 await expect ( demoGameRow . locator ( "th[data-game-active-cell='true']" ) ) . toContainText ( "Demo Game" ) ;
@@ -303,9 +306,11 @@ test("Game Hub creates, opens, and deletes mock games", async ({ page }) => {
303306 await expect ( demoGameRow . locator ( "> .status" ) ) . toHaveCount ( 0 ) ;
304307 await expect ( demoGameRow . locator ( "[data-game-toggle='demo-game']" ) ) . toHaveAttribute ( "aria-expanded" , "false" ) ;
305308 await expect ( demoGameRow . locator ( "[data-game-toggle='demo-game']" ) ) . not . toHaveClass ( / p r i m a r y / ) ;
309+ await expect ( demoGameRow . locator ( "[data-game-toggle='demo-game']" ) ) . toHaveClass ( / \b b t n - - c o m p a c t \b / ) ;
306310 await expect ( demoGameRow . locator ( "[data-game-toggle='demo-game']" ) ) . toHaveAttribute ( "aria-current" , "true" ) ;
307311 await expect ( demoGameRow . getByRole ( "button" , { name : "Edit Demo Game" } ) ) . toHaveText ( "Edit" ) ;
308312 await expect ( demoGameRow . getByRole ( "button" , { name : "Edit Demo Game" } ) ) . not . toHaveClass ( / p r i m a r y / ) ;
313+ await expect ( demoGameRow . getByRole ( "button" , { name : "Edit Demo Game" } ) ) . toHaveClass ( / \b b t n - - c o m p a c t \b / ) ;
309314 await expect ( demoGameRow . getByRole ( "button" , { name : "Edit Demo Game" } ) ) . not . toHaveAttribute ( "aria-current" , "true" ) ;
310315 await demoGameRow . locator ( "[data-game-toggle='demo-game']" ) . click ( ) ;
311316 await expect ( demoGameRow . locator ( "[data-game-toggle='demo-game']" ) ) . toHaveAttribute ( "aria-expanded" , "true" ) ;
@@ -336,6 +341,8 @@ test("Game Hub creates, opens, and deletes mock games", async ({ page }) => {
336341 await page . getByRole ( "button" , { name : "Add Game" } ) . click ( ) ;
337342 const addGameRow = page . locator ( "[data-game-add-row='input']" ) ;
338343 await expect ( addGameRow . locator ( "[data-game-action]" ) ) . toHaveText ( [ "Save" , "Cancel" ] ) ;
344+ await expect ( addGameRow . getByRole ( "button" , { name : "Save" } ) ) . toHaveClass ( / \b b t n - - c o m p a c t \b / ) ;
345+ await expect ( addGameRow . locator ( "td" ) ) . toHaveCount ( 3 ) ;
339346 await addGameRow . getByLabel ( "Game" ) . fill ( "Launch Test Game" ) ;
340347 await addGameRow . getByLabel ( "Purpose" ) . selectOption ( "Learning Game" ) ;
341348 await addGameRow . getByLabel ( "Status" ) . selectOption ( "Ready for Testing" ) ;
@@ -351,6 +358,7 @@ test("Game Hub creates, opens, and deletes mock games", async ({ page }) => {
351358 await page . getByRole ( "button" , { name : "Edit Launch Test Game" } ) . click ( ) ;
352359 const editGameRow = page . locator ( "[data-game-edit-row='launch-test-game-1']" ) ;
353360 await expect ( editGameRow . locator ( "[data-game-action]" ) ) . toHaveText ( [ "Save" , "Cancel" ] ) ;
361+ await expect ( editGameRow . getByRole ( "button" , { name : "Save" } ) ) . toHaveClass ( / \b b t n - - c o m p a c t \b / ) ;
354362 await expect ( editGameRow . getByLabel ( "Game" ) ) . toHaveValue ( "Launch Test Game" ) ;
355363 await expect ( editGameRow . getByLabel ( "Game" ) ) . toHaveAttribute ( "readonly" , "" ) ;
356364 await editGameRow . getByLabel ( "Purpose" ) . selectOption ( "Capability Demo" ) ;
@@ -525,11 +533,11 @@ test("Game Hub preserves guest browsing and blocks guest saves", async ({ page }
525533 try {
526534 await expect ( page . locator ( "[data-game-row='demo-game'] [data-game-toggle='demo-game']" ) ) . not . toHaveClass ( / p r i m a r y / ) ;
527535 await expect ( page . locator ( "[data-game-row='demo-game']" ) . getByRole ( "button" , { name : "Edit Demo Game" } ) ) . not . toHaveClass ( / p r i m a r y / ) ;
528- await expect ( page . locator ( "[data-game-row='demo-game']" ) . getByRole ( "button" , { name : "Edit Demo Game" } ) ) . toBeDisabled ( ) ;
536+ await expect ( page . locator ( "[data-game-row='demo-game']" ) . getByRole ( "button" , { name : "Edit Demo Game" } ) ) . toBeEnabled ( ) ;
529537 await expect ( page . locator ( "[data-game-list]" ) ) . toContainText ( "Gravity Demo" ) ;
530538 await expect ( page . locator ( "[data-project-record-status]" ) ) . toHaveText ( "Game table loaded. Sign in to save changes." ) ;
531539 await expect ( page . locator ( "[data-project-records-table]" ) ) . toHaveCount ( 0 ) ;
532- await expect ( page . getByRole ( "button" , { name : "Add Game" } ) ) . toBeDisabled ( ) ;
540+ await expect ( page . getByRole ( "button" , { name : "Add Game" } ) ) . toBeEnabled ( ) ;
533541 await expect ( page . getByRole ( "button" , { name : "Delete Open Game" } ) ) . toBeDisabled ( ) ;
534542 await expect ( page . getByLabel ( "Game Name" ) ) . toHaveCount ( 0 ) ;
535543 await expect ( page . getByLabel ( "Game Purpose" ) ) . toHaveCount ( 0 ) ;
@@ -538,10 +546,21 @@ test("Game Hub preserves guest browsing and blocks guest saves", async ({ page }
538546
539547 await page . locator ( "[data-game-row='gravity-demo'] [data-game-toggle='gravity-demo']" ) . click ( ) ;
540548 await expect ( page . locator ( "[data-game-row='gravity-demo'] [data-game-toggle='gravity-demo']" ) ) . not . toHaveClass ( / p r i m a r y / ) ;
541- await expect ( page . locator ( "[data-game-row='gravity-demo']" ) . getByRole ( "button" , { name : "Edit Gravity Demo" } ) ) . toBeDisabled ( ) ;
549+ await expect ( page . locator ( "[data-game-row='gravity-demo']" ) . getByRole ( "button" , { name : "Edit Gravity Demo" } ) ) . toBeEnabled ( ) ;
542550 await expect ( page . locator ( "[data-game-hub-log]" ) ) . toHaveText ( "Sign in to create or update Game Hub projects." ) ;
543551
544- await expectNoPageFailures ( failures ) ;
552+ await page . locator ( "[data-game-row='demo-game']" ) . getByRole ( "button" , { name : "Edit Demo Game" } ) . click ( ) ;
553+ await page . locator ( "[data-game-edit-row='demo-game']" ) . getByRole ( "button" , { name : "Save" } ) . click ( ) ;
554+ await page . waitForURL ( / \/ a c c o u n t \/ s i g n - i n \. h t m l $ / ) ;
555+
556+ await page . goto ( `${ failures . server . baseUrl } /toolbox/game-hub/index.html` , { waitUntil : "networkidle" } ) ;
557+ await page . getByRole ( "button" , { name : "Add Game" } ) . click ( ) ;
558+ await page . locator ( "[data-game-add-row='input']" ) . getByRole ( "button" , { name : "Save" } ) . click ( ) ;
559+ await page . waitForURL ( / \/ a c c o u n t \/ s i g n - i n \. h t m l $ / ) ;
560+
561+ expect ( failures . pageErrors ) . toEqual ( [ ] ) ;
562+ expect ( failures . consoleErrors ) . toEqual ( [ ] ) ;
563+ expect ( failures . failedRequests . filter ( ( request ) => / ^ \d / . test ( request ) && ! request . includes ( "/account/sign-in.html" ) ) ) . toEqual ( [ ] ) ;
545564 } finally {
546565 await failures . server . close ( ) ;
547566 }
@@ -599,7 +618,6 @@ test("Game Hub shows a creator-safe empty state when no projects exist", async (
599618 "Game" ,
600619 "Purpose" ,
601620 "Status" ,
602- "Owner" ,
603621 "Actions" ,
604622 ] ) ;
605623 await expect ( page . locator ( "[data-game-list] [data-game-row]" ) ) . toHaveCount ( 0 ) ;
@@ -687,7 +705,7 @@ test("Game Hub reports malformed active-game payloads without throwing", async (
687705 await expect ( page . locator ( "[data-active-game-name]" ) ) . toHaveCount ( 0 ) ;
688706 await expect ( page . locator ( "[data-current-user-role]" ) ) . toHaveCount ( 0 ) ;
689707 await expect ( page . locator ( "[data-game-hub-log]" ) ) . toContainText ( "Active game is temporarily unavailable." ) ;
690- await expect ( page . getByRole ( "button" , { name : "Add Game" } ) ) . toBeDisabled ( ) ;
708+ await expect ( page . getByRole ( "button" , { name : "Add Game" } ) ) . toBeEnabled ( ) ;
691709
692710 await expectNoPageFailures ( failures ) ;
693711 } finally {
0 commit comments