Spaces:
Sleeping
Sleeping
File size: 1,901 Bytes
cb43fbd | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | import {
oauthTokenRequestSchema,
oauthConsentRequestSchema,
oauthClientCreateRequestSchema,
} from './oauth.schema';
import { describe, it, expect } from 'vitest';
describe('oauthTokenRequestSchema', () => {
it('is permissive across grant types and passes extras through', () => {
expect(
oauthTokenRequestSchema.safeParse({
grant_type: 'authorization_code',
client_id: 'c',
code: 'x',
redirect_uri: 'u',
code_verifier: 'v',
}).success,
).toBe(true);
expect(
oauthTokenRequestSchema.safeParse({
grant_type: 'client_credentials',
client_id: 'c',
client_secret: 's',
scope: 'a b',
}).success,
).toBe(true);
expect(oauthTokenRequestSchema.safeParse({}).success).toBe(true);
});
});
describe('oauthConsentRequestSchema', () => {
it('requires the PKCE consent fields + approved flag', () => {
expect(
oauthConsentRequestSchema.safeParse({
client_id: 'c',
redirect_uri: 'u',
scope: 's',
code_challenge: 'cc',
code_challenge_method: 'S256',
approved: true,
}).success,
).toBe(true);
expect(
oauthConsentRequestSchema.safeParse({
client_id: 'c',
redirect_uri: 'u',
scope: 's',
code_challenge: 'cc',
code_challenge_method: 'S256',
}).success,
).toBe(false);
});
});
describe('oauthClientCreateRequestSchema', () => {
it('requires name + allowed_scopes', () => {
expect(
oauthClientCreateRequestSchema.safeParse({
name: 'CLI',
allowed_scopes: ['trips:read'],
}).success,
).toBe(true);
expect(
oauthClientCreateRequestSchema.safeParse({ name: 'CLI' }).success,
).toBe(false);
expect(
oauthClientCreateRequestSchema.safeParse({ allowed_scopes: [] }).success,
).toBe(false);
});
});
|