wrangler 0.0.0-e178d6fb → 0.0.0-e1c2f5b9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -2
- package/bin/wrangler.js +31 -11
- package/miniflare-dist/index.mjs +1340 -330
- package/package.json +40 -13
- package/src/__tests__/access.test.ts +25 -0
- package/src/__tests__/api-dev.test.ts +238 -0
- package/src/__tests__/api-devregistry.test.js +64 -0
- package/src/__tests__/api.test.ts +80 -0
- package/src/__tests__/configuration.test.ts +683 -470
- package/src/__tests__/d1.test.ts +123 -0
- package/src/__tests__/delete.test.ts +263 -0
- package/src/__tests__/deployments.test.ts +105 -0
- package/src/__tests__/dev.test.tsx +453 -70
- package/src/__tests__/dialogs.test.tsx +40 -0
- package/src/__tests__/generate.test.ts +235 -0
- package/src/__tests__/get-host-from-url.test.ts +16 -0
- package/src/__tests__/helpers/mock-auth-domain.ts +20 -0
- package/src/__tests__/helpers/mock-cfetch.ts +92 -26
- package/src/__tests__/helpers/mock-console.ts +11 -2
- package/src/__tests__/helpers/mock-dialogs.ts +1 -1
- package/src/__tests__/helpers/mock-get-zone-from-host.ts +8 -0
- package/src/__tests__/helpers/mock-known-routes.ts +7 -0
- package/src/__tests__/helpers/mock-kv.ts +1 -1
- package/src/__tests__/helpers/mock-oauth-flow.ts +74 -53
- package/src/__tests__/helpers/mock-process.ts +8 -13
- package/src/__tests__/helpers/msw/handlers/access.ts +13 -0
- package/src/__tests__/helpers/msw/handlers/deployments.ts +59 -0
- package/src/__tests__/helpers/msw/handlers/namespaces.ts +104 -0
- package/src/__tests__/helpers/msw/handlers/oauth.ts +31 -0
- package/src/__tests__/helpers/msw/handlers/r2.ts +80 -0
- package/src/__tests__/helpers/msw/handlers/script.ts +75 -0
- package/src/__tests__/helpers/msw/handlers/user.ts +63 -0
- package/src/__tests__/helpers/msw/handlers/zones.ts +22 -0
- package/src/__tests__/helpers/msw/index.ts +21 -0
- package/src/__tests__/helpers/worker-scripts/child-wrangler.toml +1 -0
- package/src/__tests__/helpers/worker-scripts/hello-world-worker.js +5 -0
- package/src/__tests__/helpers/worker-scripts/hello-world-wrangler.toml +1 -0
- package/src/__tests__/helpers/worker-scripts/parent-worker.js +8 -0
- package/src/__tests__/helpers/worker-scripts/parent-wrangler.toml +5 -0
- package/src/__tests__/index.test.ts +103 -97
- package/src/__tests__/init.test.ts +1484 -382
- package/src/__tests__/jest.setup.ts +88 -5
- package/src/__tests__/kv.test.ts +655 -540
- package/src/__tests__/logout.test.ts +47 -0
- package/src/__tests__/metrics.test.ts +95 -45
- package/src/__tests__/middleware.scheduled.test.ts +145 -0
- package/src/__tests__/middleware.test.ts +750 -0
- package/src/__tests__/pages-deployment-tail.test.ts +884 -0
- package/src/__tests__/pages.test.ts +1301 -119
- package/src/__tests__/paths.test.ts +39 -0
- package/src/__tests__/publish.test.ts +2266 -1180
- package/src/__tests__/pubsub.test.ts +211 -88
- package/src/__tests__/queues.test.ts +522 -0
- package/src/__tests__/r2.test.ts +363 -203
- package/src/__tests__/secret.test.ts +261 -59
- package/src/__tests__/tail.test.ts +352 -151
- package/src/__tests__/test-old-node-version.js +3 -3
- package/src/__tests__/tsconfig-sanity.ts +12 -0
- package/src/__tests__/tsconfig.json +8 -0
- package/src/__tests__/tsconfig.tsbuildinfo +1 -0
- package/src/__tests__/type-generation.test.ts +233 -0
- package/src/__tests__/user.test.ts +59 -73
- package/src/__tests__/utils-collectKeyValues.test.ts +47 -0
- package/src/__tests__/validate-dev-props.test.ts +56 -0
- package/src/__tests__/whoami.test.tsx +114 -66
- package/src/__tests__/worker-namespace.test.ts +154 -155
- package/src/api/dev.ts +170 -38
- package/src/api/index.ts +1 -0
- package/src/bundle-reporter.tsx +41 -2
- package/src/bundle.ts +668 -81
- package/src/cfetch/index.ts +40 -3
- package/src/cfetch/internal.ts +144 -32
- package/src/cli.ts +4 -3
- package/src/config/config.ts +27 -3
- package/src/config/environment.ts +131 -7
- package/src/config/index.ts +128 -8
- package/src/config/validation-helpers.ts +19 -6
- package/src/config/validation.ts +411 -14
- package/src/config-cache.ts +3 -2
- package/src/create-worker-preview.ts +31 -6
- package/src/create-worker-upload-form.ts +84 -22
- package/src/d1/backups.tsx +223 -0
- package/src/d1/constants.ts +2 -0
- package/src/d1/create.tsx +63 -0
- package/src/d1/delete.tsx +56 -0
- package/src/d1/execute.tsx +352 -0
- package/src/d1/formatTimeAgo.ts +14 -0
- package/src/d1/index.ts +101 -0
- package/src/d1/list.tsx +48 -0
- package/src/d1/migrations/apply.tsx +196 -0
- package/src/d1/migrations/create.tsx +77 -0
- package/src/d1/migrations/helpers.ts +147 -0
- package/src/d1/migrations/index.tsx +3 -0
- package/src/d1/migrations/list.tsx +79 -0
- package/src/d1/migrations/options.ts +18 -0
- package/src/d1/options.ts +22 -0
- package/src/d1/types.tsx +24 -0
- package/src/d1/utils.ts +48 -0
- package/src/delete.ts +108 -0
- package/src/deployments.ts +83 -0
- package/src/deprecated/index.ts +145 -0
- package/src/dev/dev-vars.ts +11 -8
- package/src/dev/dev.tsx +220 -58
- package/src/dev/get-local-persistence-path.tsx +31 -0
- package/src/dev/local.tsx +740 -181
- package/src/dev/remote.tsx +340 -123
- package/src/dev/start-server.ts +543 -0
- package/src/dev/use-esbuild.ts +61 -7
- package/src/dev/validate-dev-props.ts +31 -0
- package/src/dev-registry.tsx +201 -0
- package/src/dev.tsx +614 -258
- package/src/dialogs.tsx +41 -8
- package/src/{worker-namespace.ts → dispatch-namespace.ts} +23 -22
- package/src/docs/index.ts +97 -0
- package/src/entry.ts +3 -2
- package/src/environment-variables/factory.ts +88 -0
- package/src/environment-variables/misc-variables.ts +30 -0
- package/src/generate/index.ts +300 -0
- package/src/git-client.ts +100 -7
- package/src/index.tsx +249 -1560
- package/src/init.ts +626 -150
- package/src/inspect.ts +137 -32
- package/src/{metrics/is-ci.ts → is-ci.ts} +0 -0
- package/src/is-interactive.ts +4 -0
- package/src/jest.d.ts +4 -0
- package/src/{kv.ts → kv/helpers.ts} +3 -3
- package/src/kv/index.ts +596 -0
- package/src/logger.ts +27 -8
- package/src/metrics/index.ts +1 -0
- package/src/metrics/metrics-config.ts +4 -4
- package/src/metrics/metrics-dispatcher.ts +1 -0
- package/src/metrics/metrics-usage-headers.ts +24 -0
- package/src/metrics/send-event.ts +13 -8
- package/src/miniflare-cli/assets.ts +172 -465
- package/src/miniflare-cli/index.ts +149 -24
- package/src/miniflare-cli/tsconfig.json +9 -0
- package/src/miniflare-cli/tsconfig.tsbuildinfo +1 -0
- package/src/miniflare-cli/types.ts +11 -0
- package/src/module-collection.ts +12 -3
- package/src/pages/build.tsx +108 -42
- package/src/pages/constants.ts +11 -0
- package/src/pages/deployment-tails.tsx +284 -0
- package/src/pages/deployments.tsx +9 -31
- package/src/pages/dev.tsx +417 -108
- package/src/pages/errors.ts +66 -0
- package/src/pages/functions/buildPlugin.ts +86 -84
- package/src/pages/functions/buildWorker.ts +121 -106
- package/src/pages/functions/routes-consolidation.test.ts +250 -0
- package/src/pages/functions/routes-consolidation.ts +73 -0
- package/src/pages/functions/routes-transformation.test.ts +282 -0
- package/src/pages/functions/routes-transformation.ts +115 -0
- package/src/pages/functions/routes-validation.test.ts +403 -0
- package/src/pages/functions/routes-validation.ts +202 -0
- package/src/pages/functions/tsconfig.json +8 -0
- package/src/pages/functions/tsconfig.tsbuildinfo +1 -0
- package/src/pages/functions.tsx +82 -0
- package/src/pages/hash.tsx +13 -0
- package/src/pages/index.tsx +73 -55
- package/src/pages/projects.tsx +9 -3
- package/src/pages/prompt-select-project.tsx +31 -0
- package/src/pages/publish.tsx +183 -60
- package/src/pages/types.ts +1 -0
- package/src/pages/upload.tsx +107 -56
- package/src/pages/utils.ts +13 -2
- package/src/paths.ts +49 -4
- package/src/proxy.ts +375 -157
- package/src/publish/index.ts +270 -0
- package/src/{publish.ts → publish/publish.ts} +431 -188
- package/src/pubsub/pubsub-commands.tsx +4 -3
- package/src/queues/cli/commands/consumer/add.ts +71 -0
- package/src/queues/cli/commands/consumer/index.ts +22 -0
- package/src/queues/cli/commands/consumer/remove.ts +38 -0
- package/src/queues/cli/commands/create.ts +25 -0
- package/src/queues/cli/commands/delete.ts +26 -0
- package/src/queues/cli/commands/index.ts +36 -0
- package/src/queues/cli/commands/list.ts +25 -0
- package/src/queues/client.ts +135 -0
- package/src/queues/utils.ts +18 -0
- package/src/r2/constants.ts +4 -0
- package/src/r2/helpers.ts +131 -0
- package/src/r2/index.ts +289 -0
- package/src/routes.ts +140 -0
- package/src/secret/index.ts +379 -0
- package/src/sites.tsx +3 -3
- package/src/tail/createTail.ts +379 -0
- package/src/tail/filters.ts +4 -6
- package/src/tail/index.ts +199 -284
- package/src/tail/printing.ts +43 -3
- package/src/tsconfig-sanity.ts +16 -0
- package/src/type-generation.ts +181 -0
- package/src/user/access.ts +68 -0
- package/src/user/auth-variables.ts +113 -0
- package/src/user/choose-account.tsx +1 -1
- package/src/user/index.ts +0 -1
- package/src/user/user.tsx +116 -49
- package/src/utils/collectKeyValues.ts +14 -0
- package/src/whoami.tsx +80 -2
- package/src/worker.ts +69 -9
- package/src/yargs-types.ts +24 -0
- package/src/zones.ts +124 -9
- package/templates/__tests__/pages-dev-util.test.ts +128 -0
- package/templates/__tests__/tsconfig-sanity.ts +12 -0
- package/templates/__tests__/tsconfig.json +8 -0
- package/templates/__tests__/tsconfig.tsbuildinfo +1 -0
- package/templates/d1-beta-facade.js +205 -0
- package/templates/facade.d.ts +14 -0
- package/templates/first-party-worker-module-facade.ts +19 -0
- package/templates/format-dev-errors.ts +33 -0
- package/templates/init-tests/test-jest-new-worker.js +23 -0
- package/templates/init-tests/test-vitest-new-worker.js +24 -0
- package/templates/init-tests/test-vitest-new-worker.ts +25 -0
- package/templates/middleware/common.ts +62 -0
- package/templates/middleware/loader-modules.ts +82 -0
- package/templates/middleware/loader-sw.ts +233 -0
- package/templates/middleware/middleware-miniflare3-json-error.ts +20 -0
- package/templates/middleware/middleware-pretty-error.ts +40 -0
- package/templates/middleware/middleware-scheduled.ts +15 -0
- package/templates/new-worker.js +1 -1
- package/templates/pages-dev-pipeline.ts +31 -0
- package/templates/pages-dev-util.ts +52 -0
- package/templates/pages-shim.ts +4 -1
- package/templates/pages-template-plugin.ts +21 -5
- package/templates/pages-template-worker.ts +37 -9
- package/templates/{static-asset-facade.js → serve-static-assets.ts} +23 -7
- package/templates/service-bindings-module-facade.js +54 -0
- package/templates/service-bindings-sw-facade.js +42 -0
- package/templates/tsconfig-sanity.ts +11 -0
- package/templates/tsconfig.init.json +106 -0
- package/templates/tsconfig.json +5 -102
- package/templates/tsconfig.tsbuildinfo +1 -0
- package/wrangler-dist/cli.d.ts +621 -42
- package/wrangler-dist/cli.js +144441 -102606
- package/src/environment-variables.ts +0 -35
- package/src/faye-websocket.d.ts +0 -6
- package/src/generate.ts +0 -33
- package/src/miniflare-cli/enum-keys.ts +0 -17
- package/src/preview.ts +0 -31
- package/src/r2.ts +0 -50
- package/src/user/env-vars.ts +0 -46
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { render } from "ink-testing-library";
|
|
2
|
+
import { rest } from "msw";
|
|
2
3
|
import React from "react";
|
|
3
4
|
import { writeAuthConfigFile } from "../user";
|
|
4
5
|
import { getUserInfo, WhoAmI } from "../whoami";
|
|
5
|
-
import {
|
|
6
|
-
createFetchResult,
|
|
7
|
-
setMockRawResponse,
|
|
8
|
-
setMockResponse,
|
|
9
|
-
unsetAllMocks,
|
|
10
|
-
} from "./helpers/mock-cfetch";
|
|
11
6
|
import { mockConsoleMethods } from "./helpers/mock-console";
|
|
12
7
|
import { useMockIsTTY } from "./helpers/mock-istty";
|
|
8
|
+
import {
|
|
9
|
+
msw,
|
|
10
|
+
mswSuccessOauthHandlers,
|
|
11
|
+
mswSuccessUserHandlers,
|
|
12
|
+
} from "./helpers/msw";
|
|
13
13
|
import { runInTempDir } from "./helpers/run-in-tmp";
|
|
14
14
|
import type { UserInfo } from "../whoami";
|
|
15
15
|
|
|
@@ -21,12 +21,12 @@ describe("getUserInfo()", () => {
|
|
|
21
21
|
const { setIsTTY } = useMockIsTTY();
|
|
22
22
|
|
|
23
23
|
beforeEach(() => {
|
|
24
|
+
msw.use(...mswSuccessOauthHandlers, ...mswSuccessUserHandlers);
|
|
24
25
|
setIsTTY(true);
|
|
25
26
|
});
|
|
26
27
|
|
|
27
28
|
afterEach(() => {
|
|
28
29
|
process.env = ENV_COPY;
|
|
29
|
-
unsetAllMocks();
|
|
30
30
|
});
|
|
31
31
|
|
|
32
32
|
it("should return undefined if there is no config file", async () => {
|
|
@@ -44,30 +44,54 @@ describe("getUserInfo()", () => {
|
|
|
44
44
|
process.env = {
|
|
45
45
|
CLOUDFLARE_API_TOKEN: "123456789",
|
|
46
46
|
};
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
47
|
+
msw.use(
|
|
48
|
+
rest.get("*/user", (_, res, ctx) => {
|
|
49
|
+
return res.once(
|
|
50
|
+
ctx.status(200),
|
|
51
|
+
ctx.json({
|
|
52
|
+
success: false,
|
|
53
|
+
errors: [
|
|
54
|
+
{
|
|
55
|
+
code: 9109,
|
|
56
|
+
message: "Uauthorized to access requested resource",
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
messages: [],
|
|
60
|
+
result: {},
|
|
61
|
+
})
|
|
62
|
+
);
|
|
63
|
+
}),
|
|
64
|
+
rest.get("*/accounts", (request, res, ctx) => {
|
|
65
|
+
const headersObject = request.headers.all();
|
|
66
|
+
delete headersObject["user-agent"];
|
|
67
|
+
|
|
68
|
+
expect(headersObject).toMatchInlineSnapshot(`
|
|
69
|
+
Object {
|
|
70
|
+
"accept": "*/*",
|
|
71
|
+
"accept-encoding": "gzip,deflate",
|
|
72
|
+
"authorization": "Bearer 123456789",
|
|
73
|
+
"connection": "close",
|
|
74
|
+
"host": "api.cloudflare.com",
|
|
75
|
+
}
|
|
76
|
+
`);
|
|
77
|
+
return res.once(
|
|
78
|
+
ctx.status(200),
|
|
79
|
+
ctx.json({
|
|
80
|
+
success: true,
|
|
81
|
+
errors: [],
|
|
82
|
+
messages: [],
|
|
83
|
+
result: [],
|
|
84
|
+
})
|
|
85
|
+
);
|
|
86
|
+
})
|
|
51
87
|
);
|
|
52
|
-
setMockResponse("/accounts", () => []);
|
|
53
88
|
const userInfo = await getUserInfo();
|
|
54
89
|
expect(userInfo?.email).toBeUndefined();
|
|
55
90
|
});
|
|
56
|
-
|
|
57
91
|
it("should say it's using an API token when one is set", async () => {
|
|
58
92
|
process.env = {
|
|
59
93
|
CLOUDFLARE_API_TOKEN: "123456789",
|
|
60
94
|
};
|
|
61
|
-
setMockResponse("/user", () => {
|
|
62
|
-
return { email: "user@example.com" };
|
|
63
|
-
});
|
|
64
|
-
setMockResponse("/accounts", () => {
|
|
65
|
-
return [
|
|
66
|
-
{ name: "Account One", id: "account-1" },
|
|
67
|
-
{ name: "Account Two", id: "account-2" },
|
|
68
|
-
{ name: "Account Three", id: "account-3" },
|
|
69
|
-
];
|
|
70
|
-
});
|
|
71
95
|
|
|
72
96
|
const userInfo = await getUserInfo();
|
|
73
97
|
expect(userInfo).toEqual({
|
|
@@ -87,13 +111,6 @@ describe("getUserInfo()", () => {
|
|
|
87
111
|
CLOUDFLARE_API_KEY: "123456789",
|
|
88
112
|
CLOUDFLARE_EMAIL: "user@example.com",
|
|
89
113
|
};
|
|
90
|
-
setMockResponse("/accounts", () => {
|
|
91
|
-
return [
|
|
92
|
-
{ name: "Account One", id: "account-1" },
|
|
93
|
-
{ name: "Account Two", id: "account-2" },
|
|
94
|
-
{ name: "Account Three", id: "account-3" },
|
|
95
|
-
];
|
|
96
|
-
});
|
|
97
114
|
|
|
98
115
|
const userInfo = await getUserInfo();
|
|
99
116
|
expect(userInfo).toEqual({
|
|
@@ -114,13 +131,6 @@ describe("getUserInfo()", () => {
|
|
|
114
131
|
CLOUDFLARE_EMAIL: "user@example.com",
|
|
115
132
|
CLOUDFLARE_API_TOKEN: "123456789",
|
|
116
133
|
};
|
|
117
|
-
setMockResponse("/accounts", () => {
|
|
118
|
-
return [
|
|
119
|
-
{ name: "Account One", id: "account-1" },
|
|
120
|
-
{ name: "Account Two", id: "account-2" },
|
|
121
|
-
{ name: "Account Three", id: "account-3" },
|
|
122
|
-
];
|
|
123
|
-
});
|
|
124
134
|
|
|
125
135
|
const userInfo = await getUserInfo();
|
|
126
136
|
expect(userInfo).toEqual({
|
|
@@ -145,18 +155,6 @@ describe("getUserInfo()", () => {
|
|
|
145
155
|
|
|
146
156
|
it("should return the user's email and accounts if authenticated via config token", async () => {
|
|
147
157
|
writeAuthConfigFile({ oauth_token: "some-oauth-token" });
|
|
148
|
-
|
|
149
|
-
setMockResponse("/user", () => {
|
|
150
|
-
return { email: "user@example.com" };
|
|
151
|
-
});
|
|
152
|
-
setMockResponse("/accounts", () => {
|
|
153
|
-
return [
|
|
154
|
-
{ name: "Account One", id: "account-1" },
|
|
155
|
-
{ name: "Account Two", id: "account-2" },
|
|
156
|
-
{ name: "Account Three", id: "account-3" },
|
|
157
|
-
];
|
|
158
|
-
});
|
|
159
|
-
|
|
160
158
|
const userInfo = await getUserInfo();
|
|
161
159
|
|
|
162
160
|
expect(userInfo).toEqual({
|
|
@@ -173,26 +171,17 @@ describe("getUserInfo()", () => {
|
|
|
173
171
|
|
|
174
172
|
it("should display a warning message if the config file contains a legacy api_token field", async () => {
|
|
175
173
|
writeAuthConfigFile({ api_token: "API_TOKEN" });
|
|
176
|
-
setMockResponse("/user", () => {
|
|
177
|
-
return { email: "user@example.com" };
|
|
178
|
-
});
|
|
179
|
-
setMockResponse("/accounts", () => {
|
|
180
|
-
return [
|
|
181
|
-
{ name: "Account One", id: "account-1" },
|
|
182
|
-
{ name: "Account Two", id: "account-2" },
|
|
183
|
-
{ name: "Account Three", id: "account-3" },
|
|
184
|
-
];
|
|
185
|
-
});
|
|
186
174
|
await getUserInfo();
|
|
175
|
+
|
|
187
176
|
expect(std.warn).toMatchInlineSnapshot(`
|
|
188
|
-
|
|
177
|
+
"[33m▲ [43;33m[[43;30mWARNING[43;33m][0m [1mIt looks like you have used Wrangler 1's \`config\` command to login with an API token.[0m
|
|
189
178
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
179
|
+
This is no longer supported in the current version of Wrangler.
|
|
180
|
+
If you wish to authenticate via an API token then please set the \`CLOUDFLARE_API_TOKEN\`
|
|
181
|
+
environment variable.
|
|
193
182
|
|
|
194
|
-
|
|
195
|
-
|
|
183
|
+
"
|
|
184
|
+
`);
|
|
196
185
|
});
|
|
197
186
|
});
|
|
198
187
|
|
|
@@ -205,11 +194,43 @@ describe("WhoAmI component", () => {
|
|
|
205
194
|
);
|
|
206
195
|
});
|
|
207
196
|
|
|
208
|
-
it("should display the user's email and
|
|
197
|
+
it("should display the user's email, accounts and OAuth scopes", async () => {
|
|
198
|
+
const user: UserInfo = {
|
|
199
|
+
authType: "OAuth Token",
|
|
200
|
+
apiToken: "some-oauth-token",
|
|
201
|
+
email: "user@example.com",
|
|
202
|
+
tokenPermissions: ["scope1:read", "scope2:write", "scope3"],
|
|
203
|
+
accounts: [
|
|
204
|
+
{ name: "Account One", id: "account-1" },
|
|
205
|
+
{ name: "Account Two", id: "account-2" },
|
|
206
|
+
{ name: "Account Three", id: "account-3" },
|
|
207
|
+
],
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
const { lastFrame } = render(<WhoAmI user={user}></WhoAmI>);
|
|
211
|
+
|
|
212
|
+
expect(lastFrame()).toContain(
|
|
213
|
+
"You are logged in with an OAuth Token, associated with the email 'user@example.com'!"
|
|
214
|
+
);
|
|
215
|
+
expect(lastFrame()).toMatch(/Account Name .+ Account ID/);
|
|
216
|
+
expect(lastFrame()).toMatch(/Account One .+ account-1/);
|
|
217
|
+
expect(lastFrame()).toMatch(/Account Two .+ account-2/);
|
|
218
|
+
expect(lastFrame()).toMatch(/Account Three .+ account-3/);
|
|
219
|
+
expect(lastFrame()).toContain(
|
|
220
|
+
"Token Permissions: If scopes are missing, you may need to logout and re-login."
|
|
221
|
+
);
|
|
222
|
+
expect(lastFrame()).toContain("- scope1 (read)");
|
|
223
|
+
expect(lastFrame()).toContain("- scope2 (write)");
|
|
224
|
+
expect(lastFrame()).toContain("- scope3");
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
// For the case where the cache hasn't updated to include the scopes array
|
|
228
|
+
it("should display the user's email and accounts, but no OAuth scopes if none provided", async () => {
|
|
209
229
|
const user: UserInfo = {
|
|
210
230
|
authType: "OAuth Token",
|
|
211
231
|
apiToken: "some-oauth-token",
|
|
212
232
|
email: "user@example.com",
|
|
233
|
+
tokenPermissions: undefined,
|
|
213
234
|
accounts: [
|
|
214
235
|
{ name: "Account One", id: "account-1" },
|
|
215
236
|
{ name: "Account Two", id: "account-2" },
|
|
@@ -227,4 +248,31 @@ describe("WhoAmI component", () => {
|
|
|
227
248
|
expect(lastFrame()).toMatch(/Account Two .+ account-2/);
|
|
228
249
|
expect(lastFrame()).toMatch(/Account Three .+ account-3/);
|
|
229
250
|
});
|
|
251
|
+
|
|
252
|
+
it("should display the user's email, accounts and link to view token permissions for non-OAuth tokens", async () => {
|
|
253
|
+
const user: UserInfo = {
|
|
254
|
+
authType: "API Token",
|
|
255
|
+
apiToken: "some-api-token",
|
|
256
|
+
email: "user@example.com",
|
|
257
|
+
tokenPermissions: undefined,
|
|
258
|
+
accounts: [
|
|
259
|
+
{ name: "Account One", id: "account-1" },
|
|
260
|
+
{ name: "Account Two", id: "account-2" },
|
|
261
|
+
{ name: "Account Three", id: "account-3" },
|
|
262
|
+
],
|
|
263
|
+
};
|
|
264
|
+
|
|
265
|
+
const { lastFrame } = render(<WhoAmI user={user}></WhoAmI>);
|
|
266
|
+
|
|
267
|
+
expect(lastFrame()).toContain(
|
|
268
|
+
"You are logged in with an API Token, associated with the email 'user@example.com'!"
|
|
269
|
+
);
|
|
270
|
+
expect(lastFrame()).toMatch(/Account Name .+ Account ID/);
|
|
271
|
+
expect(lastFrame()).toMatch(/Account One .+ account-1/);
|
|
272
|
+
expect(lastFrame()).toMatch(/Account Two .+ account-2/);
|
|
273
|
+
expect(lastFrame()).toMatch(/Account Three .+ account-3/);
|
|
274
|
+
expect(lastFrame()).toContain(
|
|
275
|
+
"To see token permissions visit https://dash.cloudflare.com/profile/api-tokens"
|
|
276
|
+
);
|
|
277
|
+
});
|
|
230
278
|
});
|