@@ -5,6 +5,23 @@ import { workspaceV2CoverageReporter } from "../../helpers/workspaceV2CoverageRe
55
66const ROLE_OPTIONS = [ "Collectible" , "Custom" , "Enemy" , "Goal" , "Hazard" , "Hero" , "Platform" , "Projectile" , "Spawner" , "UI" , "Wall" ] ;
77const OLD_SAMPLE_PATH_PATTERN = new RegExp ( [ "M" + "VP" , "Padd" + "le" , "Ba" + "ll" ] . join ( "|" ) , "i" ) ;
8+ const OLD_INTERNAL_COPY_PATTERN = new RegExp ( [
9+ [ "page" , " session only" ] . join ( "" ) ,
10+ [ "hand" , "off" ] . join ( "" ) ,
11+ [ "Setup " , "readiness" ] . join ( "" ) ,
12+ [ "Session " , "\\+ Assets" ] . join ( "" ) ,
13+ [ "Readiness " , "Checks" ] . join ( "" ) ,
14+ [ "Runtime " , "Scope" ] . join ( "" ) ,
15+ [ "authoring " , "hand" , "off" ] . join ( "" ) ,
16+ [ "Game Configuration is " , "not ready" ] . join ( "" ) ,
17+ [ "Object " , "setup " , "table" ] . join ( "" ) ,
18+ [ "Object " , "setup " , "rows" ] . join ( "" ) ,
19+ ] . join ( "|" ) , "i" ) ;
20+ const LOW_VALUE_STATUS_CHECK_PATTERN = new RegExp ( [
21+ [ "Object " , "row" ] . join ( "" ) ,
22+ [ "Object " , "names" ] . join ( "" ) ,
23+ [ "Object " , "roles" ] . join ( "" ) ,
24+ ] . join ( "|" ) , "i" ) ;
825
926test . beforeEach ( async ( { page } ) => {
1027 await installPlaywrightStorageIsolation ( page , {
@@ -75,13 +92,29 @@ async function fillActiveRow(page, { name, renderType = "None", role, state = "A
7592 await page . locator ( "[data-objects-row-render-type]" ) . selectOption ( renderType ) ;
7693}
7794
78- test ( "Objects exposes broad table input without sample-path wording " , async ( { page } ) => {
95+ test ( "Objects exposes production copy, Object Status, and broad table input " , async ( { page } ) => {
7996 const failures = await openObjectsPage ( page ) ;
8097
8198 try {
8299 await expect ( page . locator ( ".tool-workspace" ) ) . toBeVisible ( ) ;
83100 await expect ( page . locator ( "style, [style], script:not([src])" ) ) . toHaveCount ( 0 ) ;
84101 await expect ( page . locator ( "main" ) ) . not . toContainText ( OLD_SAMPLE_PATH_PATTERN ) ;
102+ await expect ( page . locator ( "main" ) ) . not . toContainText ( OLD_INTERNAL_COPY_PATTERN ) ;
103+ await expect ( page . getByRole ( "heading" , { level : 2 , name : "Object Builder" } ) ) . toBeVisible ( ) ;
104+ await expect ( page . getByRole ( "heading" , { level : 3 , name : "Object Status" } ) ) . toBeVisible ( ) ;
105+ await expect ( page . locator ( "[aria-label='Object status summary'] th" ) ) . toHaveText ( [
106+ "Area" ,
107+ "Status" ,
108+ "Next Step" ,
109+ ] ) ;
110+ await expect ( page . locator ( "[data-objects-status-summary] tr" ) ) . toHaveCount ( 4 ) ;
111+ await expect ( page . locator ( "[data-objects-status-summary] td:first-child" ) ) . toHaveText ( [
112+ "Ready Objects" ,
113+ "Render Assets" ,
114+ "Missing Hitboxes" ,
115+ "Missing Events" ,
116+ ] ) ;
117+ await expect ( page . locator ( "[data-objects-status-summary]" ) ) . not . toContainText ( LOW_VALUE_STATUS_CHECK_PATTERN ) ;
85118 await expect ( page . locator ( "[data-objects-list-table] th" ) ) . toHaveText ( [
86119 "Name" ,
87120 "Role" ,
@@ -94,9 +127,12 @@ test("Objects exposes broad table input without sample-path wording", async ({ p
94127 await expect ( page . locator ( "[data-objects-row-type]" ) ) . toHaveCount ( 0 ) ;
95128 await expect ( page . getByText ( "Object Types" , { exact : true } ) ) . toHaveCount ( 0 ) ;
96129 await expect ( page . locator ( "[data-objects-role-basics] li" ) ) . toHaveText ( ROLE_OPTIONS ) ;
97- await expect ( page . locator ( "[data-objects-readiness]" ) ) . toHaveText ( "Needs Input" ) ;
98- await expect ( page . locator ( "[data-objects-validation-overlay]" ) ) . toBeVisible ( ) ;
99- await expect ( page . locator ( "[data-objects-validation-list]" ) ) . toContainText ( "Object row: Add at least one object row." ) ;
130+ await expect ( page . locator ( "[data-objects-readiness]" ) ) . toHaveText ( "Needs Objects" ) ;
131+ await expect ( page . locator ( "[data-objects-output-readiness]" ) ) . toHaveText ( "Needs Objects" ) ;
132+ await expect ( page . locator ( "[data-objects-asset-status]" ) ) . toHaveText ( "No sprite render selected" ) ;
133+ await expect ( page . locator ( "[data-objects-output-setup]" ) ) . toHaveText ( "Add objects to begin the object list." ) ;
134+ await expect ( page . locator ( "[data-objects-validation-overlay]" ) ) . toBeHidden ( ) ;
135+ await expect ( page . locator ( "[data-objects-validation-list]" ) ) . toHaveText ( "PASS: Object details are valid." ) ;
100136 await expect ( page . locator ( "[data-objects-trait-basics]" ) ) . toContainText ( "movable" ) ;
101137 await expect ( page . locator ( "[data-objects-trait-basics]" ) ) . toContainText ( "playerControlled" ) ;
102138 await expect ( page . locator ( "[data-objects-trait-basics]" ) ) . toContainText ( "collides" ) ;
@@ -109,11 +145,12 @@ test("Objects exposes broad table input without sample-path wording", async ({ p
109145
110146 await page . getByRole ( "button" , { name : "Seed Starter Objects" } ) . click ( ) ;
111147 await expect ( page . locator ( "[data-objects-log]" ) ) . toHaveText ( "Seeded starter objects: Hero, Projectile, and Wall." ) ;
112- await expect ( page . locator ( "[data-objects-readiness]" ) ) . toHaveText ( "Ready" ) ;
113- await expect ( page . locator ( "[data-objects-output-readiness]" ) ) . toHaveText ( "Ready" ) ;
148+ await expect ( page . locator ( "[data-objects-readiness]" ) ) . toHaveText ( "Objects Ready" ) ;
149+ await expect ( page . locator ( "[data-objects-output-readiness]" ) ) . toHaveText ( "Objects Ready" ) ;
114150 await expect ( page . locator ( "[data-objects-count]" ) ) . toHaveText ( "3" ) ;
115- await expect ( page . locator ( "[data-objects-output-static]" ) ) . toHaveText ( "1" ) ;
116- await expect ( page . locator ( "[data-objects-output-dynamic]" ) ) . toHaveText ( "2" ) ;
151+ await expect ( page . locator ( "[data-objects-output-count]" ) ) . toHaveText ( "3" ) ;
152+ await expect ( page . locator ( "[data-objects-status-summary]" ) ) . toContainText ( "3/3" ) ;
153+ await expect ( page . locator ( "[data-objects-status-summary]" ) ) . toContainText ( "No sprite render selected" ) ;
117154 await expect ( page . locator ( "[data-objects-validation-overlay]" ) ) . toBeHidden ( ) ;
118155 await expect ( page . locator ( "[data-objects-list] tr" ) ) . toHaveCount ( 3 ) ;
119156 await expect ( page . locator ( "[data-objects-list]" ) ) . toContainText ( "Hero" ) ;
@@ -123,11 +160,12 @@ test("Objects exposes broad table input without sample-path wording", async ({ p
123160 await expect ( page . locator ( "[data-objects-list] [data-objects-trash-row]" ) ) . toHaveCount ( 3 ) ;
124161 await expect ( page . locator ( "[data-objects-output-render-asset]" ) ) . toHaveText ( "None" ) ;
125162 await expect ( page . locator ( "[data-objects-edit-sprite]" ) ) . toBeHidden ( ) ;
126- await expect ( page . locator ( "[data-objects-output-setup]" ) ) . toHaveText ( "Object setup table has the required row details." ) ;
163+ await expect ( page . locator ( "[data-objects-output-setup]" ) ) . toHaveText ( "Objects have saved table details." ) ;
127164
128165 await page . getByRole ( "button" , { name : "Validate Setup" } ) . click ( ) ;
129- await expect ( page . locator ( "[data-objects-log]" ) ) . toHaveText ( "Validation PASS: Object setup rows are ready for authoring handoff." ) ;
130- await expect ( page . locator ( "[data-objects-validation-list]" ) ) . toHaveText ( "PASS: Object setup rows are ready." ) ;
166+ await expect ( page . locator ( "[data-objects-log]" ) ) . toHaveText ( "Validation PASS: Object details are ready for review." ) ;
167+ await expect ( page . locator ( "[data-objects-validation-list]" ) ) . toHaveText ( "PASS: Object details are valid." ) ;
168+ await expect ( page . locator ( "main" ) ) . not . toContainText ( OLD_INTERNAL_COPY_PATTERN ) ;
131169
132170 await expectNoPageFailures ( failures ) ;
133171 } finally {
@@ -201,8 +239,9 @@ test("Objects table save preserves linked sprite asset create and resolve behavi
201239
202240 await expect ( page . locator ( "[data-objects-log]" ) ) . toContainText ( "Added Bolt." ) ;
203241 await expect ( page . locator ( "[data-objects-log]" ) ) . toContainText ( "Created editable default sprite asset sprite_bolt for Bolt." ) ;
204- await expect ( page . locator ( "[data-objects-log]" ) ) . toContainText ( "Game Configuration is not ready" ) ;
205242 await expect ( page . locator ( "[data-objects-list]" ) ) . toContainText ( "sprite_bolt" ) ;
243+ await expect ( page . locator ( "[data-objects-asset-status]" ) ) . toHaveText ( "Linked" ) ;
244+ await expect ( page . locator ( "[data-objects-status-summary]" ) ) . toContainText ( "Linked" ) ;
206245 await expect ( page . locator ( "[data-objects-output-render-asset]" ) ) . toHaveText ( "sprite_bolt" ) ;
207246 await expect ( page . locator ( "[data-objects-output-sprite-preview]" ) ) . toContainText ( "sprite_bolt" ) ;
208247 await expect ( page . locator ( "[data-objects-output-sprite-preview]" ) ) . toContainText ( "projects/" ) ;
@@ -216,8 +255,9 @@ test("Objects table save preserves linked sprite asset create and resolve behavi
216255 await expect ( page . locator ( "[data-objects-row-render-asset-preview]" ) ) . toHaveText ( "sprite_bolt" ) ;
217256 await page . locator ( "[data-objects-save-row]" ) . click ( ) ;
218257 await expect ( page . locator ( "[data-objects-log]" ) ) . toHaveText ( "Saved Bolt." ) ;
219- await expect ( page . locator ( "[data-objects-log]" ) ) . not . toContainText ( "Sprite asset handoff blocked" ) ;
258+ await expect ( page . locator ( "[data-objects-log]" ) ) . not . toContainText ( "Sprite asset link blocked" ) ;
220259 await expect ( page . locator ( "[data-objects-list]" ) ) . toContainText ( "sprite_bolt" ) ;
260+ await expect ( page . locator ( "main" ) ) . not . toContainText ( OLD_INTERNAL_COPY_PATTERN ) ;
221261
222262 await page . getByRole ( "button" , { name : "Reset Table" } ) . click ( ) ;
223263 await page . getByRole ( "button" , { name : "Add Object" } ) . click ( ) ;
0 commit comments