mirror of
https://github.com/hanzoai/calendar.git
synced 2026-10-30 14:46:43 +00:00
* refactor: apply biome formatting to apps/web (batch 1) Formats apps/web non-modules directories: - apps/web/app - apps/web/lib - apps/web/pages - apps/web/styles - apps/web/server - apps/web/test - Root-level .ts and .mjs files Co-Authored-By: Claude Opus 4.5 <[email protected]> * refactor: apply biome formatting to apps/web/modules (batch 2) Formats smaller apps/web/modules directories: - onboarding, data-table, users, apps, auth - integration-attribute-sync, shell, availability - feature-flags, team, webhooks, getting-started - feature-opt-in, troubleshooter, schedules, notifications - signup-view.tsx Co-Authored-By: Claude Opus 4.5 <[email protected]> * refactor: apply biome formatting to apps/web/modules (batch 3) Formats medium apps/web/modules directories: - bookings - event-types - insights - embed Co-Authored-By: Claude Opus 4.5 <[email protected]> * refactor: apply biome formatting to apps/web/modules/ee (batch 4) Formats apps/web/modules/ee directory. Co-Authored-By: Claude Opus 4.5 <[email protected]> * refactor: apply biome formatting to apps/web (batch 5) Formats remaining apps/web directories: - apps/web/modules/settings - apps/web/modules/booking-audit - apps/web/playwright Co-Authored-By: Claude Opus 4.5 <[email protected]> * refactor: apply biome formatting to apps/web/components (batch 6) Formats remaining apps/web/components files. Co-Authored-By: Claude Opus 4.5 <[email protected]> * refactor: apply biome formatting to new apps/web files from main Formats newly added/modified files from main merge: - WorkflowStepContainer.tsx (resolved merge conflicts) - Newly moved files (blocklist, form-builder, schedules, etc.) - Other files modified in main Co-Authored-By: Claude Opus 4.5 <[email protected]> * refactor: apply biome formatting to new apps/web files from main Co-Authored-By: Claude Opus 4.5 <[email protected]> --------- Co-authored-by: Claude Opus 4.5 <[email protected]> Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
75 lines
1.9 KiB
TypeScript
75 lines
1.9 KiB
TypeScript
import { expect } from "@playwright/test";
|
|
import { randomBytes } from "node:crypto";
|
|
|
|
import { test } from "../lib/fixtures";
|
|
import type { PrismaClient } from "@calcom/prisma";
|
|
|
|
test.describe("OAuth - refresh tokens", () => {
|
|
test.afterEach(async ({ prisma, users }, testInfo) => {
|
|
const testPrefix = `e2e-oauth-refresh-status-${testInfo.testId}-`;
|
|
|
|
await prisma.oAuthClient.deleteMany({
|
|
where: {
|
|
name: {
|
|
startsWith: testPrefix,
|
|
},
|
|
},
|
|
});
|
|
|
|
await users.deleteAll();
|
|
});
|
|
|
|
async function createOAuthClient({
|
|
prisma,
|
|
name,
|
|
status,
|
|
clientType,
|
|
}: {
|
|
prisma: PrismaClient;
|
|
name: string;
|
|
status: "PENDING" | "APPROVED" | "REJECTED";
|
|
clientType: "PUBLIC" | "CONFIDENTIAL";
|
|
}) {
|
|
const clientId = randomBytes(32).toString("hex");
|
|
|
|
const client = await prisma.oAuthClient.create({
|
|
data: {
|
|
clientId,
|
|
name,
|
|
redirectUri: "https://example.com",
|
|
clientSecret: null,
|
|
clientType,
|
|
status,
|
|
},
|
|
});
|
|
|
|
return client;
|
|
}
|
|
|
|
test("token refresh fails if client is not approved", async ({ page, users, prisma }, testInfo) => {
|
|
const user = await users.create({ username: "oauth-refresh-status-check" });
|
|
await user.apiLogin();
|
|
|
|
const testPrefix = `e2e-oauth-refresh-status-${testInfo.testId}-`;
|
|
const client = await createOAuthClient({
|
|
prisma,
|
|
name: `${testPrefix}pending-${Date.now()}`,
|
|
status: "PENDING",
|
|
clientType: "PUBLIC",
|
|
});
|
|
|
|
const refreshResponse = await page.request.post("/api/auth/oauth/refreshToken", {
|
|
form: {
|
|
grant_type: "refresh_token",
|
|
client_id: client.clientId,
|
|
refresh_token: "fake-refresh-token",
|
|
},
|
|
});
|
|
|
|
expect(refreshResponse.status()).toBe(401);
|
|
|
|
const refreshJson = await refreshResponse.json();
|
|
expect(refreshJson.error).toBe("unauthorized_client");
|
|
});
|
|
});
|