1
+ import { Ddl } from "./../ddl/ddl" ;
2
+ import { expect } from "chai" ;
3
+ import { getMapper } from "./mappers-table-new" ;
4
+ import { Crud , JoinType } from "../crud" ;
5
+ import { HeaderSimple } from "./models/header-simple" ;
6
+ import { SQLiteDatabase } from "./database/sqlite-database" ;
7
+ import { RefToHeaderSimple } from "./models/ref-to-header-simple" ;
8
+ import { RowResult } from "../core/row-result" ;
9
+
10
+ describe ( "Cascade" , ( ) => {
11
+ let crud : Crud ;
12
+ let ddl : Ddl ;
13
+
14
+ beforeEach ( async ( ) => {
15
+ const mapper = getMapper ( ) ;
16
+
17
+ const database = await new SQLiteDatabase ( ) . init ( ) ;
18
+ crud = new Crud ( database , mapper , false ) ;
19
+ ddl = new Ddl ( database , mapper , false ) ;
20
+ } ) ;
21
+
22
+ // #1800
23
+ it ( "cascade in left outer join" , async ( ) => {
24
+ const createRefResult = await ddl . create ( RefToHeaderSimple ) . execute ( ) . toPromise ( ) ;
25
+ expect ( createRefResult . length ) . to . equal ( 1 ) ;
26
+ const createResult = await ddl . create ( HeaderSimple ) . execute ( ) . toPromise ( ) ;
27
+ expect ( createResult . length ) . to . equal ( 2 ) ;
28
+
29
+ const refToHeaderSimple = {
30
+ headerSimple : {
31
+ descricao : "Exemplo" ,
32
+ items : [ "jão" , "juca" , "zé" ]
33
+ } as HeaderSimple
34
+ } as RefToHeaderSimple ;
35
+
36
+ const insertResult = await crud . insert ( HeaderSimple , refToHeaderSimple . headerSimple ) . execute ( ) . toPromise ( ) ;
37
+ expect ( insertResult . length ) . to . equal ( refToHeaderSimple . headerSimple . items . length + 1 ) ;
38
+ expect ( insertResult [ 0 ] . rowsAffected ) . to . equal ( 1 ) ;
39
+ refToHeaderSimple . headerSimple . items . forEach ( ( value , index ) => {
40
+ expect ( insertResult [ index + 1 ] . rowsAffected ) . to . equal ( 1 ) ;
41
+ } ) ;
42
+
43
+ const insertRefResult = await crud . insert ( RefToHeaderSimple , refToHeaderSimple ) . execute ( ) . toPromise ( ) ;
44
+ expect ( insertRefResult . length ) . to . equal ( 1 ) ;
45
+
46
+ const query = crud . query ( RefToHeaderSimple ) ;
47
+ query
48
+ . join ( HeaderSimple ,
49
+ on => on . equal ( x => x . id , query . ref ( x => x . headerSimple . id ) ) ,
50
+ join => join . projection ( p => p . all ( ) ) , JoinType . LEFT )
51
+ // TODO: #1802 - fazer implementação de possibilidade de realizar Fetch em relações, isso ira criar associação com as tabelas e buscas os dados relacionados, verificar como funciona no NHibernate QueryOver
52
+ // .fetch(x => x.items)
53
+ ;
54
+ const selectResult = await query
55
+ . projection ( p => p . all ( ) )
56
+ . mapper ( ( row : RowResult < RefToHeaderSimple > ) => {
57
+ return row
58
+ . map ( )
59
+ . map ( HeaderSimple , x => x . headerSimple )
60
+ . result ( ) ;
61
+ } )
62
+ . toPromise ( ) ;
63
+
64
+ expect ( selectResult . length ) . to . equal ( 1 ) ;
65
+ expect ( selectResult [ 0 ] . id ) . to . equal ( refToHeaderSimple . id ) ;
66
+ expect ( selectResult [ 0 ] . headerSimple . id ) . to . equal ( refToHeaderSimple . headerSimple . id ) ;
67
+ expect ( selectResult [ 0 ] . headerSimple . descricao ) . to . equal ( refToHeaderSimple . headerSimple . descricao ) ;
68
+
69
+ // TODO: quando houver a possibilidade de fetch deve retornar os items do headerSimple
70
+ // expect(selectResult[0].headerSimple.items.length).to.equal(refToHeaderSimple.headerSimple.items.length);
71
+ // refToHeaderSimple.headerSimple.items.forEach((value, index) => {
72
+ // expect(selectResult[0].headerSimple.items[index]).to.equal(value);
73
+ // });
74
+
75
+ const dropRefResult = await ddl . drop ( RefToHeaderSimple ) . execute ( ) . toPromise ( ) ;
76
+ expect ( dropRefResult . length ) . to . equal ( 1 ) ;
77
+ const dropResult = await ddl . drop ( HeaderSimple ) . execute ( ) . toPromise ( ) ;
78
+ expect ( dropResult . length ) . to . equal ( 2 ) ;
79
+ } ) ;
80
+ } ) ;
0 commit comments