import "../../utils/test-setup" import { expect } from "chai" import { Record } from "./entity/Record" import { DataSource } from "../../../src" 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: DataSource[] 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.findOneBy(Record, { id: 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" }, }, ]) }), )) })