import "reflect-metadata"
import { DataSource } from "../../../src/data-source/DataSource"
import {
    closeTestingConnections,
    createTestingConnections,
    reloadTestingDatabases,
} from "../../utils/test-utils"
import { Document } from "../bulk-save-case2/entity/Document"

describe("benchmark > bulk-save > case-querybuilder", () => {
    let connections: DataSource[]
    before(
        async () =>
            (connections = await createTestingConnections({
                __dirname,
                enabledDrivers: ["postgres"],
            })),
    )
    beforeEach(() => reloadTestingDatabases(connections))
    after(() => closeTestingConnections(connections))

    it("testing bulk save of 10000 objects", () =>
        Promise.all(
            connections.map(async (connection) => {
                const documents: Document[] = []
                for (let i = 0; i < 10000; i++) {
                    const document = new Document()

                    document.id = i.toString()
                    document.docId = "label/" + i
                    document.context =
                        "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent vel faucibus nunc. Etiam volutpat vel urna in scelerisque. Cras a erat ipsum. "
                    document.label = "label/" + i
                    document.date = new Date()

                    documents.push(document)
                }

                await connection
                    .createQueryRunner()
                    .query(
                        `CREATE TABLE "document" ("id" text NOT NULL, "docId" text NOT NULL, "label" text NOT NULL, "context" text NOT NULL, "date" TIMESTAMP WITH TIME ZONE NOT NULL, CONSTRAINT "PK_e57d3357f83f3cdc0acffc3d777" PRIMARY KEY ("id"))`,
                    )
                await connection.manager
                    .createQueryBuilder()
                    .insert()
                    .into("document", [
                        "id",
                        "docId",
                        "label",
                        "context",
                        "date",
                    ])
                    .values(documents)
                    .execute()
            }),
        ))
})
