Part of https://github.com/actions/create-github-app-token/issues/43 This PR adds tests for [`main.js`](https://github.com/actions/create-github-app-token/blob/main/lib/main.js), similar to [the tests that already exist for `post.js`](https://github.com/actions/create-github-app-token/tree/main/tests). Specifically, it tests that: - `main` exits with an error when `GITHUB_REPOSITORY` is missing. - `main` exits with an error when `GITHUB_REPOSITORY_OWNER` is missing. - `main` successfully obtains a token when… - …the `owner` and `repositories` inputs are set (and the latter is a single repo). - …the `owner` and `repositories` inputs are set (and the latter is a list of repos). - …the `owner` input is set (to an org), but the `repositories` input isn’t set. - …the `owner` input is set (to a user), but the `repositories` input isn’t set. - …the `owner` input is not set, but the `repositories` input is set. - …neither the `owner` nor `repositories` input is set. ❧ Architecturally, in order to keep individual tests concise, this PR adds `tests/main.js`, which: - sets commonly-used inputs, environment variables, and mocks, then - calls a callback function that can edit the variables and add additional mocks, then - runs `main.js` itself. The `tests/main-token-get-*.test.js` test files run `tests/main.js` with various scenario-specific callback functions.
26 lines
798 B
JavaScript
26 lines
798 B
JavaScript
import { test } from "./main.js";
|
|
|
|
// Verify `main` successfully obtains a token when neither the `owner` nor `repositories` input is set.
|
|
await test((mockPool) => {
|
|
delete process.env.INPUT_OWNER;
|
|
delete process.env.INPUT_REPOSITORIES;
|
|
|
|
// Mock installation id request
|
|
const mockInstallationId = "123456";
|
|
mockPool
|
|
.intercept({
|
|
path: `/repos/${process.env.GITHUB_REPOSITORY}/installation`,
|
|
method: "GET",
|
|
headers: {
|
|
accept: "application/vnd.github.v3+json",
|
|
"user-agent": "actions/create-github-app-token",
|
|
// Intentionally omitting the `authorization` header, since JWT creation is not idempotent.
|
|
},
|
|
})
|
|
.reply(
|
|
200,
|
|
{ id: mockInstallationId },
|
|
{ headers: { "content-type": "application/json" } }
|
|
);
|
|
});
|