diff --git a/apps/console/src/__tests__/BrowserSimulation.test.tsx b/apps/console/src/__tests__/BrowserSimulation.test.tsx index d9cd6f8a2..ef1becef9 100644 --- a/apps/console/src/__tests__/BrowserSimulation.test.tsx +++ b/apps/console/src/__tests__/BrowserSimulation.test.tsx @@ -30,6 +30,12 @@ const mocks = vi.hoisted(() => { } return { data: [] }; } + async findOne(objectName: string, id: string) { + if (objectName === 'kitchen_sink') { + return { id, name: 'Test Sink', amount: 100 }; + } + return null; + } async getObjectSchema(name: string) { if (name === 'kitchen_sink') { return { @@ -147,6 +153,14 @@ describe('Console Application Simulation', () => { }); it('Scenario 4: Object Create Form (All Field Types)', async () => { + // Helper function to check if a label exists in the form + const expectLabelToExist = (label: string) => { + const escaped = label.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + const regex = new RegExp(escaped, 'i'); + const elements = screen.queryAllByText(regex); + expect(elements.length).toBeGreaterThan(0); + }; + renderApp('/kitchen_sink'); // 1. Wait for Object View @@ -164,10 +178,10 @@ describe('Console Application Simulation', () => { }); // 4. Verify Field Inputs - // Wait for at least one field to appear to ensure form is loaded + // Wait for form to finish loading and first field to appear await waitFor(() => { expect(screen.getByText(/Text \(Name\)/i)).toBeInTheDocument(); - }, { timeout: 5000 }); + }, { timeout: 10000 }); const fieldLabels = [ 'Text (Name)', @@ -178,17 +192,12 @@ describe('Console Application Simulation', () => { 'Boolean (Switch)', ]; - // Check each label exists - for (const label of fieldLabels) { - const escaped = label.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - const regex = new RegExp(escaped, 'i'); - const elements = screen.queryAllByText(regex); - if (elements.length === 0) { - console.log(`Failed to find label: ${label}`); - // console.log(document.body.innerHTML); // Too large, but useful if localized - } - expect(elements.length).toBeGreaterThan(0); - } + // Check all labels exist concurrently using Promise.all for faster execution + await Promise.all( + fieldLabels.map(label => + waitFor(() => expectLabelToExist(label), { timeout: 5000 }) + ) + ); // 5. Test specific interaction (e.g. typing in name) // Note: Shadcn/Form labels might be associated via ID, so getByLabelText is safer usually, diff --git a/package.json b/package.json index 27552c3f9..9cce3a74b 100644 --- a/package.json +++ b/package.json @@ -59,12 +59,12 @@ "devDependencies": { "@changesets/cli": "^2.29.8", "@eslint/js": "^9.39.1", - "@objectstack/cli": "^0.9.0", - "@objectstack/core": "^0.9.0", - "@objectstack/driver-memory": "^0.9.0", - "@objectstack/objectql": "^0.9.0", - "@objectstack/plugin-msw": "^0.9.0", - "@objectstack/runtime": "^0.9.0", + "@objectstack/cli": "^0.9.1", + "@objectstack/core": "^0.9.1", + "@objectstack/driver-memory": "^0.9.1", + "@objectstack/objectql": "^0.9.1", + "@objectstack/plugin-msw": "^0.9.1", + "@objectstack/runtime": "^0.9.1", "@storybook/addon-essentials": "^8.6.14", "@storybook/addon-interactions": "^8.6.14", "@storybook/addon-links": "^8.6.15", @@ -117,7 +117,7 @@ }, "dependencies": { "@hono/node-server": "^1.19.9", - "@objectstack/plugin-hono-server": "^0.9.0", + "@objectstack/plugin-hono-server": "^0.9.1", "coverage-v8": "0.0.1-security", "hono": "^4.11.7", "pino": "^8.21.0", diff --git a/packages/core/package.json b/packages/core/package.json index 85c42e32b..9fe30a7b1 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -30,7 +30,7 @@ }, "dependencies": { "@object-ui/types": "workspace:*", - "@objectstack/spec": "^0.9.0", + "@objectstack/spec": "^0.9.1", "lodash": "^4.17.23", "zod": "^4.3.6" }, diff --git a/packages/data-objectstack/package.json b/packages/data-objectstack/package.json index 201245140..d4d1f9ed0 100644 --- a/packages/data-objectstack/package.json +++ b/packages/data-objectstack/package.json @@ -30,7 +30,7 @@ "dependencies": { "@object-ui/core": "workspace:*", "@object-ui/types": "workspace:*", - "@objectstack/client": "^0.9.0" + "@objectstack/client": "^0.9.1" }, "devDependencies": { "tsup": "^8.0.1", diff --git a/packages/fields/src/widgets/BooleanField.tsx b/packages/fields/src/widgets/BooleanField.tsx index 968a3dbb5..bef49b4d9 100644 --- a/packages/fields/src/widgets/BooleanField.tsx +++ b/packages/fields/src/widgets/BooleanField.tsx @@ -15,15 +15,18 @@ export function BooleanField({ value, onChange, field, readonly, ...props }: Fie return {value ? 'Yes' : 'No'}; } + // Filter out non-DOM props + const { inputType, ...domProps } = props as any; + if (widget === 'checkbox') { return (