Skip to content

Commit ea2d988

Browse files
committed
feat(ObjectForm): increase wait timeout for form loading in integration tests
1 parent 9698576 commit ea2d988

File tree

6 files changed

+47
-26
lines changed

6 files changed

+47
-26
lines changed

apps/console/src/__tests__/ConsoleFeatures.test.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ vi.mock('lucide-react', () => ({
5454
Table: () => <span>Tab</span>,
5555
AlignLeft: () => <span>Gantt</span>,
5656
Filter: () => <span>FilterIcon</span>,
57-
X: () => <span>X</span>
57+
X: () => <span>X</span>,
58+
Code2: () => <span>Code</span>
5859
}));
5960

6061
describe('ObjectView Console Features', () => {

apps/console/src/__tests__/ObjectForm.test.tsx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ describe('ObjectForm with MSW Integration', () => {
9191
// Wait for form to load
9292
await waitFor(() => {
9393
expect(screen.getByLabelText(/^Name/i)).toBeInTheDocument();
94-
}, { timeout: 5000 });
94+
}, { timeout: 10000 });
9595

9696
expect(screen.getByLabelText(/Email/i)).toBeInTheDocument();
9797
expect(screen.getByLabelText(/^Phone/i)).toBeInTheDocument();
@@ -122,7 +122,7 @@ describe('ObjectForm with MSW Integration', () => {
122122
// Wait for form to load
123123
await waitFor(() => {
124124
expect(screen.getByLabelText(/^Name/i)).toBeInTheDocument();
125-
}, { timeout: 5000 });
125+
}, { timeout: 10000 });
126126

127127
// Fill in the form
128128
await user.type(screen.getByLabelText(/^Name/i), 'Test User');
@@ -137,7 +137,7 @@ describe('ObjectForm with MSW Integration', () => {
137137
// Wait for success callback
138138
await waitFor(() => {
139139
expect(onSuccess).toHaveBeenCalled();
140-
}, { timeout: 5000 });
140+
}, { timeout: 10000 });
141141

142142
const createdContact = onSuccess.mock.calls[0][0];
143143
expect(createdContact.name).toBe('Test User');
@@ -165,7 +165,7 @@ describe('ObjectForm with MSW Integration', () => {
165165

166166
await waitFor(() => {
167167
expect(screen.getByLabelText(/^Name/i)).toBeInTheDocument();
168-
}, { timeout: 5000 });
168+
}, { timeout: 10000 });
169169

170170
// Try to submit without filling required fields
171171
const submitButton = screen.getByRole('button', { name: /create/i });
@@ -196,7 +196,7 @@ describe('ObjectForm with MSW Integration', () => {
196196

197197
await waitFor(() => {
198198
expect(screen.getByLabelText(/^Name/i)).toBeInTheDocument();
199-
}, { timeout: 5000 });
199+
}, { timeout: 10000 });
200200

201201
// Fill required fields only
202202
await user.type(screen.getByLabelText(/^Name/i), 'Default Test');
@@ -207,7 +207,7 @@ describe('ObjectForm with MSW Integration', () => {
207207

208208
await waitFor(() => {
209209
expect(onSuccess).toHaveBeenCalled();
210-
}, { timeout: 5000 });
210+
}, { timeout: 10000 });
211211

212212
const createdContact = onSuccess.mock.calls[0][0];
213213
// Check default values from schema
@@ -235,7 +235,7 @@ describe('ObjectForm with MSW Integration', () => {
235235
await waitFor(() => {
236236
const nameInput = screen.getByLabelText(/^Name/i) as HTMLInputElement;
237237
expect(nameInput.value).toBe('Alice Johnson');
238-
}, { timeout: 5000 });
238+
}, { timeout: 10000 });
239239

240240
const emailInput = screen.getByLabelText(/Email/i) as HTMLInputElement;
241241
expect(emailInput.value).toBe('alice@objectstack.com');
@@ -266,7 +266,7 @@ describe('ObjectForm with MSW Integration', () => {
266266
await waitFor(() => {
267267
const nameInput = screen.getByLabelText(/^Name/i) as HTMLInputElement;
268268
expect(nameInput.value).toBe('Alice Johnson');
269-
}, { timeout: 5000 });
269+
}, { timeout: 10000 });
270270

271271
// Update the name
272272
const nameInput = screen.getByLabelText(/^Name/i);
@@ -278,7 +278,7 @@ describe('ObjectForm with MSW Integration', () => {
278278

279279
await waitFor(() => {
280280
expect(onSuccess).toHaveBeenCalled();
281-
}, { timeout: 5000 });
281+
}, { timeout: 10000 });
282282

283283
const updatedContact = onSuccess.mock.calls[0][0];
284284
expect(updatedContact.name).toBe('Alice Johnson Updated');

apps/console/src/mocks/server.ts

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,19 +38,8 @@ export async function startMockServer() {
3838
// Bootstrap kernel WITHOUT MSW plugin (we'll handle MSW separately for tests)
3939
await kernel.bootstrap();
4040

41-
// Load initial data from manifest
42-
const manifest = (appConfig as any).manifest;
43-
if (manifest && Array.isArray(manifest.data)) {
44-
console.log('[MSW] Loading initial data...');
45-
for (const dataset of manifest.data) {
46-
if (dataset.object && Array.isArray(dataset.records)) {
47-
for (const record of dataset.records) {
48-
await driver.create(dataset.object, record);
49-
}
50-
console.log(`[MSW] Loaded ${dataset.records.length} records for ${dataset.object}`);
51-
}
52-
}
53-
}
41+
// Note: AppPlugin already loads manifest data during bootstrap,
42+
// so we don't need to manually load it again here.
5443

5544
// Create MSW handlers manually for both paths to ensure compatibility with client defaults
5645
const v1Handlers = createHandlers('http://localhost:3000/api/v1', kernel, driver!);

packages/plugin-form/src/ObjectForm.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,12 @@ export const ObjectForm: React.FC<ObjectFormProps> = ({
8383
if (!dataSource) {
8484
throw new Error('DataSource is required when using ObjectQL schema fetching (inline fields not provided)');
8585
}
86+
console.log('[ObjectForm] Fetching object schema for:', schema.objectName);
8687
const schemaData = await dataSource.getObjectSchema(schema.objectName);
88+
console.log('[ObjectForm] Got schema data:', schemaData?.name, 'fields count:', Object.keys(schemaData?.fields || {}).length);
8789
setObjectSchema(schemaData);
8890
} catch (err) {
89-
console.error('Failed to fetch object schema:', err);
91+
console.error('[ObjectForm] Failed to fetch object schema:', err);
9092
setError(err as Error);
9193
}
9294
};
@@ -269,6 +271,7 @@ export const ObjectForm: React.FC<ObjectFormProps> = ({
269271
}
270272
});
271273

274+
console.log('[ObjectForm] Generated fields:', generatedFields.length, 'for objectSchema:', objectSchema?.name);
272275
setFormFields(generatedFields);
273276
setLoading(false);
274277
}, [objectSchema, schema.fields, schema.customFields, schema.readOnly, schema.mode, hasInlineFields]);
@@ -364,6 +367,7 @@ export const ObjectForm: React.FC<ObjectFormProps> = ({
364367
}
365368

366369
// Render loading state
370+
console.log('[ObjectForm] Render check - loading:', loading, 'formFields:', formFields.length, 'objectSchema:', !!objectSchema, 'error:', !!error);
367371
if (loading) {
368372
return (
369373
<div className="p-8 text-center">

packages/plugin-form/src/index.tsx

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,26 @@ const ObjectFormRenderer: React.FC<{ schema: any }> = ({ schema }) => {
1919
};
2020

2121
ComponentRegistry.register('object-form', ObjectFormRenderer, {
22-
namespace: 'plugin-form'
22+
namespace: 'plugin-form',
23+
label: 'Object Form',
24+
category: 'plugin',
25+
inputs: [
26+
{ name: 'objectName', type: 'string', label: 'Object Name', required: true },
27+
{ name: 'fields', type: 'array', label: 'Fields' },
28+
{ name: 'mode', type: 'enum', label: 'Mode', enum: ['create', 'edit', 'view'] },
29+
]
30+
});
31+
32+
// Alias for view namespace - this allows using { type: 'view:form' } in schemas
33+
ComponentRegistry.register('form', ObjectFormRenderer, {
34+
namespace: 'view',
35+
label: 'Data Form',
36+
category: 'view',
37+
inputs: [
38+
{ name: 'objectName', type: 'string', label: 'Object Name', required: true },
39+
{ name: 'fields', type: 'array', label: 'Fields' },
40+
{ name: 'mode', type: 'enum', label: 'Mode', enum: ['create', 'edit', 'view'] },
41+
]
2342
});
2443

2544
// Note: 'form' type is handled by @object-ui/components Form component

packages/plugin-report/package.json

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
{
22
"name": "@object-ui/plugin-report",
33
"version": "0.1.0",
4-
"main": "dist/index.js",
4+
"type": "module",
5+
"main": "dist/index.umd.js",
56
"module": "dist/index.mjs",
67
"types": "dist/index.d.ts",
8+
"exports": {
9+
".": {
10+
"types": "./dist/index.d.ts",
11+
"import": "./dist/index.mjs",
12+
"require": "./dist/index.umd.js"
13+
}
14+
},
715
"files": [
816
"dist"
917
],

0 commit comments

Comments
 (0)