Skip to content

Commit 31667d7

Browse files
committed
test: README authentication example
1 parent d19684a commit 31667d7

File tree

1 file changed

+94
-0
lines changed

1 file changed

+94
-0
lines changed

test/request.test.ts

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { getUserAgent } from "universal-user-agent";
22
import fetchMock from "fetch-mock";
33
import { Headers, RequestInit } from "node-fetch";
4+
import { createAppAuth } from "@octokit/auth-app";
5+
import lolex from "lolex";
46

57
import { request } from "../src";
68
import {
@@ -62,6 +64,98 @@ describe("request()", () => {
6264
});
6365
});
6466

67+
it("README authentication example", async () => {
68+
const clock = lolex.install({
69+
now: 0,
70+
toFake: ["Date"]
71+
});
72+
const APP_ID = 1;
73+
const PRIVATE_KEY = `-----BEGIN RSA PRIVATE KEY-----
74+
MIIEpAIBAAKCAQEA1c7+9z5Pad7OejecsQ0bu3aozN3tihPmljnnudb9G3HECdnH
75+
lWu2/a1gB9JW5TBQ+AVpum9Okx7KfqkfBKL9mcHgSL0yWMdjMfNOqNtrQqKlN4kE
76+
p6RD++7sGbzbfZ9arwrlD/HSDAWGdGGJTSOBM6pHehyLmSC3DJoR/CTu0vTGTWXQ
77+
rO64Z8tyXQPtVPb/YXrcUhbBp8i72b9Xky0fD6PkEebOy0Ip58XVAn2UPNlNOSPS
78+
ye+Qjtius0Md4Nie4+X8kwVI2Qjk3dSm0sw/720KJkdVDmrayeljtKBx6AtNQsSX
79+
gzQbeMmiqFFkwrG1+zx6E7H7jqIQ9B6bvWKXGwIDAQABAoIBAD8kBBPL6PPhAqUB
80+
K1r1/gycfDkUCQRP4DbZHt+458JlFHm8QL6VstKzkrp8mYDRhffY0WJnYJL98tr4
81+
4tohsDbqFGwmw2mIaHjl24LuWXyyP4xpAGDpl9IcusjXBxLQLp2m4AKXbWpzb0OL
82+
Ulrfc1ZooPck2uz7xlMIZOtLlOPjLz2DuejVe24JcwwHzrQWKOfA11R/9e50DVse
83+
hnSH/w46Q763y4I0E3BIoUMsolEKzh2ydAAyzkgabGQBUuamZotNfvJoDXeCi1LD
84+
8yNCWyTlYpJZJDDXooBU5EAsCvhN1sSRoaXWrlMSDB7r/E+aQyKua4KONqvmoJuC
85+
21vSKeECgYEA7yW6wBkVoNhgXnk8XSZv3W+Q0xtdVpidJeNGBWnczlZrummt4xw3
86+
xs6zV+rGUDy59yDkKwBKjMMa42Mni7T9Fx8+EKUuhVK3PVQyajoyQqFwT1GORJNz
87+
c/eYQ6VYOCSC8OyZmsBM2p+0D4FF2/abwSPMmy0NgyFLCUFVc3OECpkCgYEA5OAm
88+
I3wt5s+clg18qS7BKR2DuOFWrzNVcHYXhjx8vOSWV033Oy3yvdUBAhu9A1LUqpwy
89+
Ma+unIgxmvmUMQEdyHQMcgBsVs10dR/g2xGjMLcwj6kn+xr3JVIZnbRT50YuPhf+
90+
ns1ScdhP6upo9I0/sRsIuN96Gb65JJx94gQ4k9MCgYBO5V6gA2aMQvZAFLUicgzT
91+
u/vGea+oYv7tQfaW0J8E/6PYwwaX93Y7Q3QNXCoCzJX5fsNnoFf36mIThGHGiHY6
92+
y5bZPPWFDI3hUMa1Hu/35XS85kYOP6sGJjf4kTLyirEcNKJUWH7CXY+00cwvTkOC
93+
S4Iz64Aas8AilIhRZ1m3eQKBgQCUW1s9azQRxgeZGFrzC3R340LL530aCeta/6FW
94+
CQVOJ9nv84DLYohTVqvVowdNDTb+9Epw/JDxtDJ7Y0YU0cVtdxPOHcocJgdUGHrX
95+
ZcJjRIt8w8g/s4X6MhKasBYm9s3owALzCuJjGzUKcDHiO2DKu1xXAb0SzRcTzUCn
96+
7daCswKBgQDOYPZ2JGmhibqKjjLFm0qzpcQ6RPvPK1/7g0NInmjPMebP0K6eSPx0
97+
9/49J6WTD++EajN7FhktUSYxukdWaCocAQJTDNYP0K88G4rtC2IYy5JFn9SWz5oh
98+
x//0u+zd/R/QRUzLOw4N72/Hu+UG6MNt5iDZFCtapRaKt6OvSBwy8w==
99+
-----END RSA PRIVATE KEY-----`;
100+
// see https://runkit.com/gr2m/reproducable-jwt
101+
const BEARER =
102+
"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOi0zMCwiZXhwIjo1NzAsImlzcyI6MX0.q3foRa78U3WegM5PrWLEh5N0bH1SD62OqW66ZYzArp95JBNiCbo8KAlGtiRENCIfBZT9ibDUWy82cI4g3F09mdTq3bD1xLavIfmTksIQCz5EymTWR5v6gL14LSmQdWY9lSqkgUG0XCFljWUglEP39H4yeHbFgdjvAYg3ifDS12z9oQz2ACdSpvxPiTuCC804HkPVw8Qoy0OSXvCkFU70l7VXCVUxnuhHnk8-oCGcKUspmeP6UdDnXk-Aus-eGwDfJbU2WritxxaXw6B4a3flTPojkYLSkPBr6Pi0H2-mBsW_Nvs0aLPVLKobQd4gqTkosX3967DoAG8luUMhrnxe8Q";
103+
const mock = fetchMock
104+
.sandbox()
105+
.postOnce("https://api.github.com/app/installations/123/access_tokens", {
106+
token: "secret123",
107+
expires_at: "1970-01-01T01:00:00.000Z",
108+
permissions: {
109+
metadata: "read"
110+
},
111+
repository_selection: "all"
112+
})
113+
.getOnce(
114+
"https://api.github.com/app",
115+
{ id: 123 },
116+
{
117+
headers: {
118+
accept: "application/vnd.github.machine-man-preview+json",
119+
"user-agent": userAgent,
120+
authorization: `bearer ${BEARER}`
121+
}
122+
}
123+
)
124+
.postOnce(
125+
"https://api.github.com/repos/octocat/hello-world/issues",
126+
{ id: 456 },
127+
{
128+
headers: {
129+
accept: "application/vnd.github.machine-man-preview+json",
130+
"user-agent": userAgent,
131+
authorization: `token secret123`
132+
}
133+
}
134+
);
135+
const auth = createAppAuth({
136+
id: APP_ID,
137+
privateKey: PRIVATE_KEY,
138+
installationId: 123
139+
});
140+
const requestWithAuth = request.defaults({
141+
mediaType: {
142+
previews: ["machine-man"]
143+
},
144+
request: {
145+
fetch: mock,
146+
hook: auth.hook
147+
}
148+
});
149+
await requestWithAuth("GET /app");
150+
await requestWithAuth("POST /repos/:owner/:repo/issues", {
151+
owner: "octocat",
152+
repo: "hello-world",
153+
title: "Hello from the engine room"
154+
});
155+
expect(mock.done()).toBe(true);
156+
clock.reset();
157+
});
158+
65159
it("Request with body", () => {
66160
const mock = fetchMock
67161
.sandbox()

0 commit comments

Comments
 (0)