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