From 7f73f8c23501e9300577bfa360d969ebe259b1da Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Tue, 23 Sep 2025 09:16:28 +0100 Subject: [PATCH] Add unit tests for `properties` module --- src/feature-flags/properties.test.ts | 58 ++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/feature-flags/properties.test.ts diff --git a/src/feature-flags/properties.test.ts b/src/feature-flags/properties.test.ts new file mode 100644 index 000000000..66e5ca979 --- /dev/null +++ b/src/feature-flags/properties.test.ts @@ -0,0 +1,58 @@ +import test from "ava"; +import * as sinon from "sinon"; + +import * as api from "../api-client"; +import { getRunnerLogger } from "../logging"; +import { parseRepositoryNwo } from "../repository"; +import { setupTests } from "../testing-utils"; + +import * as properties from "./properties"; + +setupTests(test); + +test("loadPropertiesFromApi throws if response data is not an array", async (t) => { + sinon.stub(api, "getRepositoryProperties").resolves({ + headers: {}, + status: 200, + url: "", + data: {}, + }); + const logger = getRunnerLogger(true); + const mockRepositoryNwo = parseRepositoryNwo("owner/repo"); + await t.throwsAsync( + properties.loadPropertiesFromApi(logger, mockRepositoryNwo), + ); +}); + +test("loadPropertiesFromApi throws if response data contains unexpected objects", async (t) => { + sinon.stub(api, "getRepositoryProperties").resolves({ + headers: {}, + status: 200, + url: "", + data: [{}], + }); + const logger = getRunnerLogger(true); + const mockRepositoryNwo = parseRepositoryNwo("owner/repo"); + await t.throwsAsync( + properties.loadPropertiesFromApi(logger, mockRepositoryNwo), + ); +}); + +test("loadPropertiesFromApi loads known properties", async (t) => { + sinon.stub(api, "getRepositoryProperties").resolves({ + headers: {}, + status: 200, + url: "", + data: [ + { property_name: "github-codeql-extra-queries", value: "+queries" }, + { property_name: "unknown-property", value: "something" }, + ] satisfies properties.RepositoryProperty[], + }); + const logger = getRunnerLogger(true); + const mockRepositoryNwo = parseRepositoryNwo("owner/repo"); + const response = await properties.loadPropertiesFromApi( + logger, + mockRepositoryNwo, + ); + t.deepEqual(response, { "github-codeql-extra-queries": "+queries" }); +});