diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 724745272..8d0ca84a1 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -172,7 +172,7 @@ jobs: test-js-bindings: name: - Test JS Bindings + Test JS Packages # use the same image we use for compiling runs-on: ubuntu-22.04 services: @@ -201,12 +201,15 @@ jobs: uses: oven-sh/setup-bun@v2 - name: Install JS dependencies run: bun install - - name: Build TypeScript code + - name: Build backend-jsonrpc working-directory: packages/@postgrestools/backend-jsonrpc run: bun run build - - name: Run JS tests + - name: Run backend-jsonrpc test working-directory: packages/@postgrestools/backend-jsonrpc run: bun run test + - name: Run cli test + working-directory: packages/@postgrestools/postgrestools + run: bun run test codegen: name: Check Codegen diff --git a/packages/@postgrestools/postgrestools/bin/postgrestools b/packages/@postgrestools/postgrestools/bin/postgrestools index fa4c5ac27..72de7de3b 100755 --- a/packages/@postgrestools/postgrestools/bin/postgrestools +++ b/packages/@postgrestools/postgrestools/bin/postgrestools @@ -21,9 +21,9 @@ const PLATFORMS = { }; function isMusl() { - let stderr; + let stdout; try { - stderr = execSync("ldd --version", { + stdout = execSync("ldd --version", { stdio: [ "ignore", // stdin "pipe", // stdout – glibc systems print here @@ -31,9 +31,9 @@ function isMusl() { ], }); } catch (err) { - stderr = err.stderr; + stdout = err.stderr; } - if (stderr.indexOf("musl") > -1) { + if (typeof stdout === 'string' && stdout.indexOf("musl") > -1) { return true; } return false; diff --git a/packages/@postgrestools/postgrestools/package.json b/packages/@postgrestools/postgrestools/package.json index a172d65f3..247ba4157 100644 --- a/packages/@postgrestools/postgrestools/package.json +++ b/packages/@postgrestools/postgrestools/package.json @@ -40,5 +40,8 @@ "@postgrestools/cli-x86_64-linux-gnu": "", "@postgrestools/cli-aarch64-linux-gnu": "", "@postgrestools/cli-x86_64-linux-musl": "" + }, + "scripts": { + "test": "bun test" } } diff --git a/packages/@postgrestools/postgrestools/test/bin.test.js b/packages/@postgrestools/postgrestools/test/bin.test.js new file mode 100644 index 000000000..9b85042e5 --- /dev/null +++ b/packages/@postgrestools/postgrestools/test/bin.test.js @@ -0,0 +1,62 @@ +import { describe, it, expect } from "bun:test"; +import { spawn } from "child_process"; +import { join, dirname } from "path"; +import { fileURLToPath } from "url"; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const binPath = join(__dirname, "../bin/postgrestools"); +const testSqlPath = join(__dirname, "test.sql"); + +describe("postgrestools bin", () => { + + it("should check a SQL file successfully", async () => { + const result = await new Promise((resolve) => { + const proc = spawn("node", [binPath, "check", testSqlPath], { + env: { ...process.env }, + }); + + let stdout = ""; + let stderr = ""; + + proc.stdout.on("data", (data) => { + stdout += data.toString(); + }); + + proc.stderr.on("data", (data) => { + stderr += data.toString(); + }); + + proc.on("close", (code) => { + resolve({ code, stdout, stderr }); + }); + }); + + expect(result.code).toBe(0); + expect(result.stderr).toBe(""); + }); + + it("should fail when file doesn't exist", async () => { + const result = await new Promise((resolve) => { + const proc = spawn("node", [binPath, "check", "nonexistent.sql"], { + env: { ...process.env }, + }); + + let stdout = ""; + let stderr = ""; + + proc.stdout.on("data", (data) => { + stdout += data.toString(); + }); + + proc.stderr.on("data", (data) => { + stderr += data.toString(); + }); + + proc.on("close", (code) => { + resolve({ code, stdout, stderr }); + }); + }); + + expect(result.code).not.toBe(0); + }); +}); diff --git a/packages/@postgrestools/postgrestools/test/test.sql b/packages/@postgrestools/postgrestools/test/test.sql new file mode 100644 index 000000000..9e13a3eff --- /dev/null +++ b/packages/@postgrestools/postgrestools/test/test.sql @@ -0,0 +1 @@ +select 1; \ No newline at end of file