pokemon-showdown/test/lib/postgres.js
Guangcong Luo 31a4289cc6
Refactor Teams plugin to use lib/database (#11109)
* Refactor Teams.save

Fixes a bug where passwords were changed every time a team was updated.

* Refactor Teams to use lib/database

* Add unit tests

(This found a bug which has also been fixed)

* Test more things

---------

Co-authored-by: Mia <49593536+mia-pi-git@users.noreply.github.com>
2025-08-04 21:51:42 -05:00

62 lines
2.0 KiB
JavaScript

"use strict";
const assert = require('assert').strict;
const { PGDatabase, SQL } = require('../../dist/lib/database');
const database = new PGDatabase();
const assertSQL = (sql, rawSql, args) => assert.deepEqual(
database._resolveSQL(sql), [rawSql, args || []]
);
describe("Postgres library", () => {
it("should support template strings", async () => {
assertSQL(SQL`INSERT INTO test (col1, col2) VALUES (${'a'}, ${'b'})`,
"INSERT INTO test (col1, col2) VALUES ($1, $2)", ["a", "b"]);
assertSQL(SQL`INSERT INTO test (${{ col1: "a", col2: "b" }})`,
`INSERT INTO test ("col1", "col2") VALUES ($1, $2)`, ["a", "b"]);
assertSQL(SQL`SELECT * FROM test ${SQL`WHERE `}${SQL`a = 1`} LIMIT 1`,
`SELECT * FROM test WHERE a = 1 LIMIT 1`);
assertSQL(SQL`SELECT ${undefined}1+1`,
`SELECT 1+1`);
assertSQL(SQL`SELECT ${[]}2+2`,
`SELECT 2+2`);
const constructed = SQL`SELECT `;
constructed.appendRaw(`3`);
constructed.append(SQL` + `);
constructed.append(3);
assertSQL(constructed, `SELECT 3 + $1`, [3]);
assertSQL(SQL`SELECT * FROM test ${[SQL`WHERE `, SQL`a = 2`]} LIMIT 1`,
`SELECT * FROM test WHERE a = 2 LIMIT 1`);
});
// only run these if you already have postgres configured
// TODO: update for new db
it.skip("Should be able to connect to a database", async () => {
this.database = new PGDatabase();
});
it.skip("Should be able to insert data", async () => {
await assert.doesNotThrowAsync(async () => {
await this.database.query(`CREATE TABLE test (col TEXT, col2 TEXT)`);
await this.database.query(
`INSERT INTO test (col, col2) VALUES ($1, $2)`,
['foo', 'bar']
);
});
});
it.skip("Should be able to run multiple statements in transaction", async () => {
await assert.doesNotThrowAsync(async () => {
await this.database.transaction(async worker => {
const tables = await worker.query(
`SELECT tablename FROM pg_catalog.pg_tables ` +
`WHERE tablename = 'test' LIMIT 1;`
);
for (const { tablename } of tables) {
await worker.query(`DROP TABLE ` + tablename);
}
});
});
});
});