import "reflect-metadata"; import {expect} from "chai"; import {Record} from "./entity/Record"; import {Connection} from "../../../src/connection/Connection"; import {closeTestingConnections, createTestingConnections, reloadTestingDatabases} from "../../utils/test-utils"; import {RecordData} from "./entity/RecordData"; describe("github issues > #204 jsonb array is not persisted correctly", () => { let connections: Connection[]; before(async () => connections = await createTestingConnections({ entities: [Record], enabledDrivers: ["postgres"] // because only postgres supports jsonb type })); beforeEach(() => reloadTestingDatabases(connections)); after(() => closeTestingConnections(connections)); it("should persist json and jsonb arrays correctly", () => Promise.all(connections.map(async connection => { const record = new Record(); record.datas = [ new RecordData("hello1", "hello2", "hello3", "hello4", true, false), new RecordData("hi1", "hi2", "hi3", "hi4", false, true), new RecordData("bye1", "bye2", "bye3", "bye4", false, false), ]; record.configs = [ { id: 1, option1: "1", option2: "1", option3: "1", isActive: true, extra: { data1: "one", data2: "two" } }, { id: 2, option1: "2", option2: "2", option3: "2", isActive: false, extra: { data1: "one", data2: "two" } }, { id: 3, option1: "3", option2: "3", option3: "3", isActive: true, extra: { data1: "one", data2: "two" } }, ]; await connection.manager.save(record); const foundRecord = await connection.manager.findOne(Record, record.id); expect(foundRecord).to.be.not.undefined; foundRecord!.datas.should.be.eql([ new RecordData("hello1", "hello2", "hello3", "hello4", true, false), new RecordData("hi1", "hi2", "hi3", "hi4", false, true), new RecordData("bye1", "bye2", "bye3", "bye4", false, false), ]); foundRecord!.configs.should.be.eql([ { id: 1, option1: "1", option2: "1", option3: "1", isActive: true, extra: { data1: "one", data2: "two" } }, { id: 2, option1: "2", option2: "2", option3: "2", isActive: false, extra: { data1: "one", data2: "two" } }, { id: 3, option1: "3", option2: "3", option3: "3", isActive: true, extra: { data1: "one", data2: "two" } }, ]); }))); });