diff --git a/src/app/store.ts b/src/app/store.ts index 866803d84..1b640bb9c 100644 --- a/src/app/store.ts +++ b/src/app/store.ts @@ -81,7 +81,7 @@ export function setupTestStore(initialState: Partial) { }); store.run(function* (): Operation { - const group = yield* parallel([...tasks, bootup.run()]); + const group = yield* parallel(tasks); yield* group; }); diff --git a/src/auth/token.test.ts b/src/auth/token.test.ts new file mode 100644 index 000000000..e42f2ca67 --- /dev/null +++ b/src/auth/token.test.ts @@ -0,0 +1,41 @@ +// @vitest-environment node +import { setupTestStore } from "@app/app/store"; +import { testEnv } from "@app/mocks"; +import { defaultToken } from "@app/schema"; +import { revokeAllTokens } from "./token"; + +const sleep = (n: number) => + new Promise((resolve) => { + setTimeout(() => { + resolve(); + }, n); + }); + +describe("revokeAllTokens", () => { + it("should use the elevated token", async () => { + let elevated = false; + let body = ""; + revokeAllTokens.use(function* (ctx) { + elevated = ctx.elevated; + body = ctx.request?.body as string; + return; + }); + + const store = setupTestStore({ + env: testEnv, + token: defaultToken({ tokenId: "1" }), + elevatedToken: defaultToken({ tokenId: "2" }), + }); + store.dispatch(revokeAllTokens()); + + await sleep(100); + + expect(elevated).toBe(true); + expect(JSON.parse(body)).toEqual({ + except_tokens: [ + `${testEnv.authUrl}/tokens/1`, + `${testEnv.authUrl}/tokens/2`, + ], + }); + }); +}); diff --git a/src/auth/token.ts b/src/auth/token.ts index c40f5f847..c940ed502 100644 --- a/src/auth/token.ts +++ b/src/auth/token.ts @@ -150,6 +150,7 @@ export const exchangeToken = authApi.post( export const revokeAllTokens = authApi.post( "/tokens/revoke_all_accessible", function* onRevokeAll(ctx, next) { + ctx.elevated = true; const env = yield* select(selectEnv); const token = yield* select(selectToken); const elevated = yield* select(schema.elevatedToken.select); diff --git a/src/test/index.tsx b/src/test/index.tsx index e1d23c8ce..6625acc2e 100644 --- a/src/test/index.tsx +++ b/src/test/index.tsx @@ -39,6 +39,7 @@ export const setupAppIntegrationTest = ( ...initState.env, }, }); + store.run(bootup.run()); const App = () => { return ( @@ -69,6 +70,7 @@ export const setupIntegrationTest = ( ...initState.env, }, }); + store.run(bootup.run()); const TestProvider = ({ children }: { children: React.ReactNode }) => { const router = createMemoryRouter(