@@ -9,6 +9,8 @@ import { Crud } from "../crud";
99import { GuidClazz } from "./models/guid-clazz" ;
1010import { Uf } from "./models/uf" ;
1111import { HeaderSimple } from "./models/header-simple" ;
12+ import { Referencia } from "./models/referencia" ;
13+ import { Imagem } from "./models/imagem" ;
1214
1315describe ( "SQLite" , async ( ) => {
1416 const mapper = getMapper ( ) ;
@@ -313,4 +315,176 @@ describe("SQLite", async () => {
313315 const dropResult = await ddl . drop ( HeaderSimple ) . execute ( false ) ;
314316 expect ( dropResult . length ) . to . equal ( 1 ) ;
315317 } ) ;
318+
319+ it ( "Referencia cascade (property compost)" , async ( ) => {
320+
321+ ddl . enableLog = true ;
322+ const createResult = await ddl . create ( Referencia ) . execute ( ) ;
323+ expect ( createResult . length ) . to . equal ( 2 ) ;
324+
325+ crud . enableLog = true ;
326+ const insertResult1 = await crud . insert ( Referencia , ObjectToTest . referencia ) . execute ( ) ;
327+ expect ( insertResult1 . length ) . to . equal ( ObjectToTest . referencia . referenciasRelacionadas . length + 1 ) ;
328+ expect ( insertResult1 [ 0 ] . rowsAffected ) . to . equal ( 1 ) ;
329+ ObjectToTest . referencia . referenciasRelacionadas . forEach ( ( value , index ) => {
330+ expect ( insertResult1 [ index + 1 ] . rowsAffected ) . to . equal ( 1 ) ;
331+ } ) ;
332+
333+ const referencia2 = {
334+ codeImport : 200 ,
335+ codigo : "fffff" ,
336+ descricao : "Referencia 2" ,
337+ restricaoGrade : [ "41" , "42" , "43" , "44" , "45" ] ,
338+ referenciasRelacionadas : [
339+ {
340+ codeImport : 201
341+ } as Referencia ,
342+ {
343+ codeImport : 203
344+ } as Referencia ,
345+ {
346+ codeImport : 205
347+ } as Referencia ,
348+ {
349+ codeImport : 207
350+ } as Referencia ,
351+ ] ,
352+ imagem : {
353+ internalKey : 40
354+ } as Imagem ,
355+ deleted : false
356+ } as Referencia ;
357+
358+ const insertResult2 = await crud . insert ( Referencia , referencia2 ) . execute ( ) ;
359+ expect ( insertResult2 . length ) . to . equal ( referencia2 . referenciasRelacionadas . length + 1 ) ;
360+ expect ( insertResult2 [ 0 ] . rowsAffected ) . to . equal ( 1 ) ;
361+ referencia2 . referenciasRelacionadas . forEach ( ( value , index ) => {
362+ expect ( insertResult2 [ index + 1 ] . rowsAffected ) . to . equal ( 1 ) ;
363+ } ) ;
364+
365+ const referencia3 = {
366+ codeImport : 300 ,
367+ codigo : "aaaaaa" ,
368+ descricao : "Referencia 3" ,
369+ restricaoGrade : [ "21" , "22" , "23" , "24" , "25" ] ,
370+ referenciasRelacionadas : [
371+ {
372+ codeImport : 301
373+ } as Referencia ,
374+ {
375+ codeImport : 303
376+ } as Referencia ,
377+ {
378+ codeImport : 305
379+ } as Referencia ,
380+ {
381+ codeImport : 307
382+ } as Referencia ,
383+ ] ,
384+ imagem : {
385+ internalKey : 50
386+ } as Imagem ,
387+ deleted : false
388+ } as Referencia ;
389+
390+ const insertResult3 = await crud . insert ( Referencia , referencia3 ) . execute ( ) ;
391+ expect ( insertResult3 . length ) . to . equal ( referencia3 . referenciasRelacionadas . length + 1 ) ;
392+ expect ( insertResult3 [ 0 ] . rowsAffected ) . to . equal ( 1 ) ;
393+ referencia3 . referenciasRelacionadas . forEach ( ( value , index ) => {
394+ expect ( insertResult3 [ index + 1 ] . rowsAffected ) . to . equal ( 1 ) ;
395+ } ) ;
396+
397+ const selectResult = await crud . query ( Referencia ) . toList ( ) ;
398+ expect ( selectResult . length ) . to . equal ( 3 ) ;
399+
400+ expect ( selectResult [ 0 ] . referenciasRelacionadas . length ) . to . equal ( ObjectToTest . referencia . referenciasRelacionadas . length ) ;
401+ expect ( selectResult [ 0 ] . codeImport ) . to . equal ( ObjectToTest . referencia . codeImport ) ;
402+ expect ( selectResult [ 0 ] . descricao ) . to . equal ( ObjectToTest . referencia . descricao ) ;
403+ ObjectToTest . referencia . referenciasRelacionadas . forEach ( ( value , index ) => {
404+ expect ( selectResult [ 0 ] . referenciasRelacionadas [ index ] . codeImport ) . to . equal ( value . codeImport ) ;
405+ } ) ;
406+
407+ expect ( selectResult [ 1 ] . referenciasRelacionadas . length ) . to . equal ( referencia2 . referenciasRelacionadas . length ) ;
408+ expect ( selectResult [ 1 ] . codeImport ) . to . equal ( referencia2 . codeImport ) ;
409+ expect ( selectResult [ 1 ] . descricao ) . to . equal ( referencia2 . descricao ) ;
410+ referencia2 . referenciasRelacionadas . forEach ( ( value , index ) => {
411+ expect ( selectResult [ 1 ] . referenciasRelacionadas [ index ] . codeImport ) . to . equal ( value . codeImport ) ;
412+ } ) ;
413+
414+ expect ( selectResult [ 2 ] . referenciasRelacionadas . length ) . to . equal ( referencia3 . referenciasRelacionadas . length ) ;
415+ expect ( selectResult [ 2 ] . codeImport ) . to . equal ( referencia3 . codeImport ) ;
416+ expect ( selectResult [ 2 ] . descricao ) . to . equal ( referencia3 . descricao ) ;
417+ referencia3 . referenciasRelacionadas . forEach ( ( value , index ) => {
418+ expect ( selectResult [ 2 ] . referenciasRelacionadas [ index ] . codeImport ) . to . equal ( value . codeImport ) ;
419+ } ) ;
420+
421+ referencia2 . descricao = "Editado" ;
422+ const oldCountItems = referencia2 . referenciasRelacionadas . length ;
423+ referencia2 . referenciasRelacionadas . splice ( referencia2 . referenciasRelacionadas . length - 1 , 1 ) ;
424+ referencia2 . referenciasRelacionadas = [ ...referencia2 . referenciasRelacionadas , {
425+ codeImport : 222
426+ } as Referencia ] ;
427+
428+ const updateResult = await crud . update ( Referencia , referencia2 )
429+ . where ( where => {
430+ where . equal ( x => x . codeImport , referencia2 . codeImport ) ;
431+ } )
432+ . execute ( ) ;
433+ const countUpdateResultExtraItems = 2 ; /* Update (Main) e Delete (Items) */
434+ expect ( updateResult . length ) . to . equal ( referencia2 . referenciasRelacionadas . length + countUpdateResultExtraItems ) ;
435+ /* Update (Main) */
436+ expect ( updateResult [ 0 ] . rowsAffected ) . to . equal ( 1 ) ;
437+ /* Delete (Items) */
438+ expect ( updateResult [ 1 ] . rowsAffected ) . to . equal ( oldCountItems ) ;
439+ referencia2 . referenciasRelacionadas . forEach ( ( value , index ) => {
440+ expect ( updateResult [ index + countUpdateResultExtraItems ] . rowsAffected ) . to . equal ( 1 ) ;
441+ } ) ;
442+
443+ const selectUpdateResult = await crud . query ( Referencia )
444+ . where ( where => {
445+ where . equal ( x => x . codeImport , referencia2 . codeImport ) ;
446+ } )
447+ . firstOrDefault ( ) ;
448+ expect ( selectUpdateResult . referenciasRelacionadas . length ) . to . equal ( referencia2 . referenciasRelacionadas . length ) ;
449+ expect ( selectUpdateResult . codeImport ) . to . equal ( referencia2 . codeImport ) ;
450+ expect ( selectUpdateResult . descricao ) . to . equal ( referencia2 . descricao ) ;
451+ referencia2 . referenciasRelacionadas . forEach ( ( value , index ) => {
452+ expect ( selectUpdateResult . referenciasRelacionadas [ index ] . codeImport ) . to . equal ( value . codeImport ) ;
453+ } ) ;
454+
455+ const deleteResult1 = await crud . delete ( Referencia , referencia2 )
456+ . execute ( ) ;
457+ expect ( deleteResult1 . length ) . to . equal ( 2 ) ;
458+ /* Main deleted */
459+ expect ( deleteResult1 [ 0 ] . rowsAffected ) . to . equal ( 1 ) ;
460+ /* Itens deleted */
461+ expect ( deleteResult1 [ 1 ] . rowsAffected ) . to . equal ( referencia2 . referenciasRelacionadas . length ) ;
462+
463+ const deleteResult2 = await crud . deleteByKey ( Referencia , ObjectToTest . referencia . codeImport )
464+ . execute ( ) ;
465+ expect ( deleteResult2 . length ) . to . equal ( 2 ) ;
466+ /* Main deleted */
467+ expect ( deleteResult2 [ 0 ] . rowsAffected ) . to . equal ( 1 ) ;
468+ /* Itens deleted */
469+ expect ( deleteResult2 [ 1 ] . rowsAffected ) . to . equal ( ObjectToTest . referencia . referenciasRelacionadas . length ) ;
470+
471+ const selectResult2 = await crud . query ( Referencia ) . toList ( ) ;
472+ expect ( selectResult2 . length ) . to . equal ( 1 ) ;
473+ expect ( selectResult2 [ 0 ] . referenciasRelacionadas . length ) . to . equal ( referencia3 . referenciasRelacionadas . length ) ;
474+ expect ( selectResult2 [ 0 ] . codeImport ) . to . equal ( referencia3 . codeImport ) ;
475+ expect ( selectResult2 [ 0 ] . descricao ) . to . equal ( referencia3 . descricao ) ;
476+ referencia3 . referenciasRelacionadas . forEach ( ( value , index ) => {
477+ expect ( selectResult2 [ 0 ] . referenciasRelacionadas [ index ] . codeImport ) . to . equal ( value . codeImport ) ;
478+ } ) ;
479+
480+ /* Test select not cascade with data in itens */
481+ const selectResultNotCascade = await crud . query ( Referencia ) . toList ( false ) ;
482+ expect ( selectResultNotCascade . length ) . to . equal ( 1 ) ;
483+ expect ( selectResultNotCascade [ 0 ] . referenciasRelacionadas . length ) . to . equal ( 0 ) ;
484+ expect ( selectResultNotCascade [ 0 ] . codeImport ) . to . equal ( referencia3 . codeImport ) ;
485+ expect ( selectResultNotCascade [ 0 ] . descricao ) . to . equal ( referencia3 . descricao ) ;
486+
487+ const dropResult = await ddl . drop ( Referencia ) . execute ( ) ;
488+ expect ( dropResult . length ) . to . equal ( 2 ) ;
489+ } ) ;
316490} ) ;
0 commit comments