test: integration tests (#40)

Co-authored-by: Gregor Martynus <39992+gr2m@users.noreply.github.com>
This commit is contained in:
Parker Brown
2023-09-05 08:32:55 -07:00
committed by GitHub
parent 49ce228ea7
commit 10f155294b
10 changed files with 2021 additions and 8 deletions

19
tests/README.md Normal file
View File

@@ -0,0 +1,19 @@
# Tests
Add one test file per scenario. You can run them in isolation with:
```bash
node tests/post-token-set.test.js
```
All tests are run together in [tests/index.js](index.js), which can be execauted with ava
```
npx ava tests/index.js
```
or with npm
```
npm test
```

14
tests/index.js Normal file
View File

@@ -0,0 +1,14 @@
import { readdirSync } from "node:fs";
import { execa } from "execa";
import test from "ava";
const tests = readdirSync("tests").filter((file) => file.endsWith(".test.js"));
for (const file of tests) {
test(file, async (t) => {
const { stderr, stdout } = await execa("node", [`tests/${file}`]);
t.snapshot(stderr, "stderr");
t.snapshot(stdout, "stdout");
});
}

View File

@@ -0,0 +1,25 @@
import { MockAgent, setGlobalDispatcher } from "undici";
// state variables are set as environment variables with the prefix STATE_
// https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#sending-values-to-the-pre-and-post-actions
process.env.STATE_token = "secret123";
const mockAgent = new MockAgent();
setGlobalDispatcher(mockAgent);
// Provide the base url to the request
const mockPool = mockAgent.get("https://api.github.com");
// intercept the request
mockPool
.intercept({
path: "/installation/token",
method: "DELETE",
headers: {
authorization: "token secret123",
},
})
.reply(204);
await import("../post.js");

View File

@@ -0,0 +1,5 @@
// state variables are set as environment variables with the prefix STATE_
// https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#sending-values-to-the-pre-and-post-actions
delete process.env.STATE_token;
await import("../post.js");

View File

@@ -0,0 +1,25 @@
# Snapshot report for `tests/index.js`
The actual snapshot is saved in `index.js.snap`.
Generated by [AVA](https://avajs.dev).
## post-token-set.test.js
> stderr
''
> stdout
'Token revoked'
## post-token-unset.test.js
> stderr
''
> stdout
'Token is not set'

Binary file not shown.