Skip to content

Commit a02af8a

Browse files
author
fernandocode
committed
#1800 - adicionado teste buscar em cascata com left outer join.
E TODO: para criação de metodo "Fetch", para atender essa necessidade
1 parent b582666 commit a02af8a

File tree

3 files changed

+91
-0
lines changed

3 files changed

+91
-0
lines changed

src/test/cascade.spec.ts

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
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+
});

src/test/mappers-table-new.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import { ModeloDetalheProduto } from "./models/modelo-detalhe-produto";
2727
import { ContasAReceber } from "./models/contas-a-receber";
2828
import { DatabaseTypes } from "../definitions/database-types";
2929
import { ParamFilter } from "../core/param-filter";
30+
import { RefToHeaderSimple } from "./models/ref-to-header-simple";
3031

3132
export class MappersTableNew extends MapperTest {
3233

@@ -89,6 +90,10 @@ export class MappersTableNew extends MapperTest {
8990
.hasMany(x => x.items, String, "ItemHeaderSimple")
9091
;
9192

93+
this.mapper(RefToHeaderSimple)
94+
.key(x => x.id, PrimaryKeyType.AutoIncrement, Number)
95+
.reference(x => x.headerSimple, HeaderSimple);
96+
9297
this.autoMapperKey(Imagem, PrimaryKeyType.Assigned);
9398
this.autoMapper(Linha, x => x.codeImport, PrimaryKeyType.Assigned, Number);
9499
this.autoMapper(Referencia, x => x.codeImport, PrimaryKeyType.Assigned, Number)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { HeaderSimple } from "./header-simple";
2+
3+
export class RefToHeaderSimple {
4+
public id: number;
5+
public headerSimple: HeaderSimple;
6+
}

0 commit comments

Comments
 (0)