From 2d4a8d7f48c98bc59ef00b6e4984d35434141182 Mon Sep 17 00:00:00 2001 From: Gareth Parker Date: Tue, 8 Sep 2020 14:39:33 +0100 Subject: [PATCH] test: Testing that the discriminatorValue gets saved for ChildEntity when saved by cascade (#6671) * test: Testing that the discriminatorValue gets saved for ChildEntity when saved by cascade * test: Update assertions to not be specific to retrieval order Co-authored-by: Gareth Parker --- .../entity/Faculty.ts | 19 +++++++++ .../entity/Professor.ts | 15 +++++++ .../entity/Researcher.ts | 15 +++++++ .../one-to-many-casecade-save/entity/Staff.ts | 17 ++++++++ .../one-to-many-cascade-save.ts | 42 +++++++++++++++++++ 5 files changed, 108 insertions(+) create mode 100644 test/functional/table-inheritance/single-table/relations/one-to-many-casecade-save/entity/Faculty.ts create mode 100644 test/functional/table-inheritance/single-table/relations/one-to-many-casecade-save/entity/Professor.ts create mode 100644 test/functional/table-inheritance/single-table/relations/one-to-many-casecade-save/entity/Researcher.ts create mode 100644 test/functional/table-inheritance/single-table/relations/one-to-many-casecade-save/entity/Staff.ts create mode 100644 test/functional/table-inheritance/single-table/relations/one-to-many-casecade-save/one-to-many-cascade-save.ts diff --git a/test/functional/table-inheritance/single-table/relations/one-to-many-casecade-save/entity/Faculty.ts b/test/functional/table-inheritance/single-table/relations/one-to-many-casecade-save/entity/Faculty.ts new file mode 100644 index 0000000000..2a85a9ef8e --- /dev/null +++ b/test/functional/table-inheritance/single-table/relations/one-to-many-casecade-save/entity/Faculty.ts @@ -0,0 +1,19 @@ +import {Column} from "../../../../../../../src/decorator/columns/Column"; +import {Entity} from "../../../../../../../src/decorator/entity/Entity"; +import {PrimaryGeneratedColumn} from "../../../../../../../src/decorator/columns/PrimaryGeneratedColumn"; +import {Staff} from "./Staff"; +import {OneToMany} from "../../../../../../../src"; + +@Entity() +export class Faculty { + + @PrimaryGeneratedColumn() + id: number; + + @Column() + name: string; + + @OneToMany(type => Staff, staff => staff.faculty, { cascade: true, eager: true }) + staff: Staff[]; + +} diff --git a/test/functional/table-inheritance/single-table/relations/one-to-many-casecade-save/entity/Professor.ts b/test/functional/table-inheritance/single-table/relations/one-to-many-casecade-save/entity/Professor.ts new file mode 100644 index 0000000000..82c742be89 --- /dev/null +++ b/test/functional/table-inheritance/single-table/relations/one-to-many-casecade-save/entity/Professor.ts @@ -0,0 +1,15 @@ +import {ChildEntity} from "../../../../../../../src/decorator/entity/ChildEntity"; +import {Staff} from "./Staff"; +import {Column} from "../../../../../../../src"; + +@ChildEntity("PROFESSOR") +export class Professor extends Staff { + + constructor(className: string) { + super(); + this.className = className; + } + + @Column() + className: string; +} diff --git a/test/functional/table-inheritance/single-table/relations/one-to-many-casecade-save/entity/Researcher.ts b/test/functional/table-inheritance/single-table/relations/one-to-many-casecade-save/entity/Researcher.ts new file mode 100644 index 0000000000..c85ff87a3f --- /dev/null +++ b/test/functional/table-inheritance/single-table/relations/one-to-many-casecade-save/entity/Researcher.ts @@ -0,0 +1,15 @@ +import {ChildEntity} from "../../../../../../../src/decorator/entity/ChildEntity"; +import {Staff} from "./Staff"; +import {Column} from "../../../../../../../src"; + +@ChildEntity("RESEARCHER") +export class Researcher extends Staff { + + constructor(areaOfStudy: string) { + super(); + this.areaOfStudy = areaOfStudy; + } + + @Column() + areaOfStudy: string; +} diff --git a/test/functional/table-inheritance/single-table/relations/one-to-many-casecade-save/entity/Staff.ts b/test/functional/table-inheritance/single-table/relations/one-to-many-casecade-save/entity/Staff.ts new file mode 100644 index 0000000000..191e8ab950 --- /dev/null +++ b/test/functional/table-inheritance/single-table/relations/one-to-many-casecade-save/entity/Staff.ts @@ -0,0 +1,17 @@ +import {Column, Entity, ManyToOne, PrimaryGeneratedColumn, TableInheritance} from "../../../../../../../src"; +import {Faculty} from "./Faculty"; + +@Entity() +@TableInheritance({ column: { name: "type", type: "varchar" } }) +export class Staff { + + @PrimaryGeneratedColumn() + id: number; + + @ManyToOne(type => Faculty, faculty => faculty.staff) + faculty: Faculty; + + @Column() + type: string; + +} diff --git a/test/functional/table-inheritance/single-table/relations/one-to-many-casecade-save/one-to-many-cascade-save.ts b/test/functional/table-inheritance/single-table/relations/one-to-many-casecade-save/one-to-many-cascade-save.ts new file mode 100644 index 0000000000..42d5c8631b --- /dev/null +++ b/test/functional/table-inheritance/single-table/relations/one-to-many-casecade-save/one-to-many-cascade-save.ts @@ -0,0 +1,42 @@ +import "reflect-metadata"; +import { + closeTestingConnections, + createTestingConnections, + reloadTestingDatabases +} from "../../../../../utils/test-utils"; +import {expect} from "chai"; +import {Connection} from "../../../../../../src/connection/Connection"; +import {Faculty} from "./entity/Faculty"; +import {Professor} from "./entity/Professor"; +import {Researcher} from "./entity/Researcher"; + +describe("table-inheritance > single-table > relations > one-to-many-cascade-save", () => { + + let connections: Connection[]; + before(async () => connections = await createTestingConnections({ + entities: [__dirname + "/entity/*{.js,.ts}"] + })); + beforeEach(() => reloadTestingDatabases(connections)); + after(() => closeTestingConnections(connections)); + + it("should work correctly with OneToMany relations", () => Promise.all(connections.map(async connection => { + + // ------------------------------------------------------------------------- + // Create + // ------------------------------------------------------------------------- + + const researcher = new Researcher("Economics"); + await connection.getRepository(Researcher).save(researcher); + + const faculty1 = new Faculty(); + faculty1.name = "Economics"; + faculty1.staff = [ new Professor("Economics 101"), researcher ]; + await connection.getRepository(Faculty).save(faculty1); + + const loadedFaculty = await connection.getRepository(Faculty).findOne() as Faculty; + + expect(loadedFaculty.staff.find(staff => staff.type === "PROFESSOR")).to.not.be.undefined; + expect(loadedFaculty.staff.find(staff => staff.type === "RESEARCHER")).to.not.be.undefined; + }))); + +});