@@ -8,6 +8,10 @@ import { ObjectQL } from '@objectql/core';
88import { SqlDriver } from '@objectql/driver-sql' ;
99import { ObjectLoader } from '@objectql/platform-node' ;
1010import * as path from 'path' ;
11+ import { nanoid } from 'nanoid' ;
12+
13+ // Helper to generate IDs since SQL driver doesn't auto-generate them
14+ const generateId = ( ) => nanoid ( 16 ) ;
1115
1216describe ( 'Enterprise Data API' , ( ) => {
1317 let app : ObjectQL ;
@@ -50,13 +54,16 @@ describe('Enterprise Data API', () => {
5054 it ( 'should create a user' , async ( ) => {
5155 const ctx = app . createContext ( { isSystem : true } ) ;
5256 const result = await ctx . object ( 'user' ) . create ( {
57+ id : generateId ( ) , // Provide ID manually
5358 name : 'John Doe' ,
5459 email : 'john@example.com' ,
5560 username : 'johndoe'
5661 } ) ;
62+
5763
5864 expect ( result ) . toBeDefined ( ) ;
5965 expect ( result . id ) . toBeDefined ( ) ;
66+ expect ( result . id ) . not . toBeNull ( ) ;
6067 expect ( result . name ) . toBe ( 'John Doe' ) ;
6168
6269 userId = result . id ;
@@ -178,10 +185,13 @@ describe('Enterprise Data API', () => {
178185 const ctx = app . createContext ( { isSystem : true } ) ;
179186 // First create an account (required for contact)
180187 const account = await ctx . object ( 'crm_account' ) . create ( {
181- name : 'Test Company' ,
182- account_number : 'TC001 '
188+ name : 'Contact Test Company' ,
189+ account_number : 'CTC001 '
183190 } ) ;
184191
192+ expect ( account ) . toBeDefined ( ) ;
193+ expect ( account . id ) . toBeDefined ( ) ;
194+
185195 const result = await ctx . object ( 'crm_contact' ) . create ( {
186196 first_name : 'Jane' ,
187197 last_name : 'Smith' ,
@@ -218,15 +228,29 @@ describe('Enterprise Data API', () => {
218228 const ctx = app . createContext ( { isSystem : true } ) ;
219229 // Create required department and position first
220230 const dept = await ctx . object ( 'hr_department' ) . create ( {
221- name : 'Engineering' ,
222- code : 'ENG'
231+ id : generateId ( ) ,
232+ name : 'Engineering Dept' ,
233+ code : 'ENGD'
223234 } ) ;
235+
236+
237+ expect ( dept ) . toBeDefined ( ) ;
238+ expect ( dept . id ) . toBeDefined ( ) ;
239+ expect ( dept . id ) . not . toBeNull ( ) ;
240+
224241 const pos = await ctx . object ( 'hr_position' ) . create ( {
242+ id : generateId ( ) ,
225243 title : 'Software Engineer' , // Position uses 'title', not 'name'
226- code : 'SE '
244+ code : 'SWE '
227245 } ) ;
228246
247+
248+ expect ( pos ) . toBeDefined ( ) ;
249+ expect ( pos . id ) . toBeDefined ( ) ;
250+ expect ( pos . id ) . not . toBeNull ( ) ;
251+
229252 const result = await ctx . object ( 'hr_employee' ) . create ( {
253+ id : generateId ( ) ,
230254 first_name : 'Alice' ,
231255 last_name : 'Brown' ,
232256 employee_number : 'EMP001' ,
@@ -238,6 +262,7 @@ describe('Enterprise Data API', () => {
238262
239263 expect ( result ) . toBeDefined ( ) ;
240264 expect ( result . id ) . toBeDefined ( ) ;
265+ expect ( result . id ) . not . toBeNull ( ) ;
241266 expect ( result . first_name ) . toBe ( 'Alice' ) ;
242267
243268 employeeId = result . id ;
@@ -261,13 +286,13 @@ describe('Enterprise Data API', () => {
261286 it ( 'should create an HR department' , async ( ) => {
262287 const ctx = app . createContext ( { isSystem : true } ) ;
263288 const result = await ctx . object ( 'hr_department' ) . create ( {
264- name : 'Engineering ' ,
265- code : 'ENG'
289+ name : 'Sales Department ' ,
290+ code : 'SALES' // Use unique code
266291 } ) ;
267292
268293 expect ( result ) . toBeDefined ( ) ;
269294 expect ( result . id ) . toBeDefined ( ) ;
270- expect ( result . name ) . toBe ( 'Engineering ' ) ;
295+ expect ( result . name ) . toBe ( 'Sales Department ' ) ;
271296 } ) ;
272297 } ) ;
273298 } ) ;
@@ -278,10 +303,22 @@ describe('Enterprise Data API', () => {
278303
279304 it ( 'should create a project' , async ( ) => {
280305 const ctx = app . createContext ( { isSystem : true } ) ;
306+ // Create a user first (required as project owner)
307+ const user = await ctx . object ( 'user' ) . create ( {
308+ name : 'Project Manager' ,
309+ email : 'pm@example.com' ,
310+ username : 'pmuser'
311+ } ) ;
312+
313+ expect ( user ) . toBeDefined ( ) ;
314+ expect ( user . id ) . toBeDefined ( ) ;
315+
281316 const result = await ctx . object ( 'project_project' ) . create ( {
282317 name : 'Website Redesign' ,
283318 code : 'WEB-001' ,
284- status : 'planning' // Required field
319+ status : 'planning' , // Required field
320+ owner : user . id , // Required field
321+ start_date : '2024-01-01' // Required field
285322 } ) ;
286323
287324 expect ( result ) . toBeDefined ( ) ;
@@ -308,13 +345,27 @@ describe('Enterprise Data API', () => {
308345 describe ( 'Task CRUD' , ( ) => {
309346 it ( 'should create a project task' , async ( ) => {
310347 const ctx = app . createContext ( { isSystem : true } ) ;
311- // Create a project first (required for task)
348+ // Create a user and project first (required for task)
349+ const user = await ctx . object ( 'user' ) . create ( {
350+ name : 'Task Owner' ,
351+ email : 'taskowner@example.com' ,
352+ username : 'taskuser'
353+ } ) ;
354+
355+ expect ( user ) . toBeDefined ( ) ;
356+ expect ( user . id ) . toBeDefined ( ) ;
357+
312358 const project = await ctx . object ( 'project_project' ) . create ( {
313359 name : 'Test Project' ,
314360 code : 'TEST-001' ,
315- status : 'planning'
361+ status : 'planning' ,
362+ owner : user . id , // Required
363+ start_date : '2024-01-01' // Required
316364 } ) ;
317365
366+ expect ( project ) . toBeDefined ( ) ;
367+ expect ( project . id ) . toBeDefined ( ) ;
368+
318369 const result = await ctx . object ( 'project_task' ) . create ( {
319370 name : 'Design mockups' ,
320371 description : 'Create initial design mockups' ,
@@ -338,6 +389,9 @@ describe('Enterprise Data API', () => {
338389 account_number : 'ITC001'
339390 } ) ;
340391
392+ expect ( account ) . toBeDefined ( ) ;
393+ expect ( account . id ) . toBeDefined ( ) ;
394+
341395 const result = await ctx . object ( 'finance_invoice' ) . create ( {
342396 invoice_number : 'INV-001' ,
343397 total_amount : 1000 ,
@@ -362,6 +416,9 @@ describe('Enterprise Data API', () => {
362416 account_number : 'PTC001'
363417 } ) ;
364418
419+ expect ( account ) . toBeDefined ( ) ;
420+ expect ( account . id ) . toBeDefined ( ) ;
421+
365422 const result = await ctx . object ( 'finance_payment' ) . create ( {
366423 payment_number : 'PAY-001' , // Required
367424 amount : 500 ,
@@ -386,16 +443,26 @@ describe('Enterprise Data API', () => {
386443 name : 'Multi-Module Test' ,
387444 account_number : 'MMT001'
388445 } ) ;
446+
447+ expect ( account ) . toBeDefined ( ) ;
448+ expect ( account . id ) . toBeDefined ( ) ;
389449
390450 // Create required department and position first
391451 const dept = await ctx . object ( 'hr_department' ) . create ( {
392- name : 'Test Department ' ,
393- code : 'TD '
452+ name : 'Cross Test Dept ' ,
453+ code : 'CTD '
394454 } ) ;
455+
456+ expect ( dept ) . toBeDefined ( ) ;
457+ expect ( dept . id ) . toBeDefined ( ) ;
458+
395459 const pos = await ctx . object ( 'hr_position' ) . create ( {
396- title : 'Test Position' , // Position uses 'title', not 'name'
397- code : 'TP '
460+ title : 'Cross Test Position' , // Position uses 'title', not 'name'
461+ code : 'CTP '
398462 } ) ;
463+
464+ expect ( pos ) . toBeDefined ( ) ;
465+ expect ( pos . id ) . toBeDefined ( ) ;
399466
400467 const employee = await ctx . object ( 'hr_employee' ) . create ( {
401468 first_name : 'Test' ,
@@ -406,10 +473,26 @@ describe('Enterprise Data API', () => {
406473 position : pos . id , // Required
407474 hire_date : '2024-01-01' // Required
408475 } ) ;
476+
477+ expect ( employee ) . toBeDefined ( ) ;
478+ expect ( employee . id ) . toBeDefined ( ) ;
479+
480+ // Create a user for project owner
481+ const user = await ctx . object ( 'user' ) . create ( {
482+ name : 'Cross Test User' ,
483+ email : 'crosstest@example.com' ,
484+ username : 'crosstestuser'
485+ } ) ;
486+
487+ expect ( user ) . toBeDefined ( ) ;
488+ expect ( user . id ) . toBeDefined ( ) ;
409489
410490 const project = await ctx . object ( 'project_project' ) . create ( {
411491 name : 'Cross-Module Project' ,
412- code : 'CROSS-001'
492+ code : 'CROSS-001' ,
493+ status : 'planning' ,
494+ owner : user . id , // Required
495+ start_date : '2024-01-01' // Required
413496 } ) ;
414497
415498 expect ( account . id ) . toBeDefined ( ) ;
0 commit comments