| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- import { describe, expect, it } from 'vitest'
- import { PermissionRowSchema, TokenSchema } from './AccessToken.schemas'
- const validTokenData = {
- tokenName: 'My Token',
- expiresAt: 'day',
- resourceAccess: 'all-orgs' as const,
- permissionRows: [{ resource: 'organization:billing', actions: ['read'] }],
- }
- // --- PermissionRowSchema ---
- describe('PermissionRowSchema', () => {
- it('should pass for a valid permission row', () => {
- const result = PermissionRowSchema.safeParse({
- resource: 'organization:billing',
- actions: ['read'],
- })
- expect(result.success).toBe(true)
- })
- it('should fail when resource is empty', () => {
- const result = PermissionRowSchema.safeParse({
- resource: '',
- actions: ['read'],
- })
- expect(result.success).toBe(false)
- if (!result.success) {
- expect(result.error.issues[0].message).toBe('Please select a resource')
- }
- })
- it('should fail when actions is empty', () => {
- const result = PermissionRowSchema.safeParse({
- resource: 'organization:billing',
- actions: [],
- })
- expect(result.success).toBe(false)
- if (!result.success) {
- expect(result.error.issues[0].message).toBe('Please select at least one action')
- }
- })
- it('should fail when resource is missing', () => {
- const result = PermissionRowSchema.safeParse({ actions: ['read'] })
- expect(result.success).toBe(false)
- })
- it('should fail when actions is missing', () => {
- const result = PermissionRowSchema.safeParse({ resource: 'organization:billing' })
- expect(result.success).toBe(false)
- })
- })
- // --- TokenSchema ---
- describe('TokenSchema', () => {
- it('should pass for valid token data', () => {
- const result = TokenSchema.safeParse(validTokenData)
- expect(result.success).toBe(true)
- })
- it('should fail when tokenName is empty', () => {
- const result = TokenSchema.safeParse({ ...validTokenData, tokenName: '' })
- expect(result.success).toBe(false)
- if (!result.success) {
- const nameError = result.error.issues.find((i) => i.path.includes('tokenName'))
- expect(nameError?.message).toBe('Please enter a name for the token')
- }
- })
- it('should fail when tokenName is missing', () => {
- const { tokenName, ...rest } = validTokenData
- const result = TokenSchema.safeParse(rest)
- expect(result.success).toBe(false)
- })
- it('should fail when permissionRows is empty', () => {
- const result = TokenSchema.safeParse({ ...validTokenData, permissionRows: [] })
- expect(result.success).toBe(false)
- if (!result.success) {
- const permError = result.error.issues.find((i) => i.path.includes('permissionRows'))
- expect(permError?.message).toBe('Please configure at least one permission')
- }
- })
- it('should fail when resourceAccess is not a valid enum value', () => {
- const result = TokenSchema.safeParse({ ...validTokenData, resourceAccess: 'invalid' })
- expect(result.success).toBe(false)
- })
- it('should accept all valid resourceAccess enum values', () => {
- for (const value of ['all-orgs', 'selected-orgs', 'selected-projects'] as const) {
- const result = TokenSchema.safeParse({ ...validTokenData, resourceAccess: value })
- expect(result.success).toBe(true)
- }
- })
- describe('expiresAt preprocessing', () => {
- it('should convert "never" to undefined', () => {
- const result = TokenSchema.safeParse({ ...validTokenData, expiresAt: 'never' })
- expect(result.success).toBe(true)
- if (result.success) {
- expect(result.data.expiresAt).toBeUndefined()
- }
- })
- it('should pass through other string values', () => {
- const result = TokenSchema.safeParse({ ...validTokenData, expiresAt: 'day' })
- expect(result.success).toBe(true)
- if (result.success) {
- expect(result.data.expiresAt).toBe('day')
- }
- })
- it('should allow expiresAt to be omitted', () => {
- const { expiresAt, ...rest } = validTokenData
- const result = TokenSchema.safeParse(rest)
- expect(result.success).toBe(true)
- })
- })
- describe('custom expiry refinement', () => {
- it('should fail when expiresAt is "custom" and customExpiryDate is not provided', () => {
- const result = TokenSchema.safeParse({
- ...validTokenData,
- expiresAt: 'custom',
- customExpiryDate: undefined,
- })
- expect(result.success).toBe(false)
- if (!result.success) {
- const customError = result.error.issues.find((i) => i.path.includes('expiresAt'))
- expect(customError?.message).toBe('Please select a custom expiry date')
- }
- })
- it('should fail when expiresAt is "custom" and customExpiryDate is empty string', () => {
- const result = TokenSchema.safeParse({
- ...validTokenData,
- expiresAt: 'custom',
- customExpiryDate: '',
- })
- expect(result.success).toBe(false)
- })
- it('should pass when expiresAt is "custom" and customExpiryDate is provided', () => {
- const result = TokenSchema.safeParse({
- ...validTokenData,
- expiresAt: 'custom',
- customExpiryDate: '2026-12-31T00:00:00Z',
- })
- expect(result.success).toBe(true)
- })
- it('should pass when expiresAt is not "custom" even without customExpiryDate', () => {
- const result = TokenSchema.safeParse({
- ...validTokenData,
- expiresAt: 'day',
- })
- expect(result.success).toBe(true)
- })
- })
- describe('nested permissionRows validation', () => {
- it('should fail when a permission row has an empty resource', () => {
- const result = TokenSchema.safeParse({
- ...validTokenData,
- permissionRows: [{ resource: '', actions: ['read'] }],
- })
- expect(result.success).toBe(false)
- })
- it('should fail when a permission row has empty actions', () => {
- const result = TokenSchema.safeParse({
- ...validTokenData,
- permissionRows: [{ resource: 'organization:billing', actions: [] }],
- })
- expect(result.success).toBe(false)
- })
- it('should pass with multiple valid permission rows', () => {
- const result = TokenSchema.safeParse({
- ...validTokenData,
- permissionRows: [
- { resource: 'organization:billing', actions: ['read'] },
- { resource: 'organization:members', actions: ['read', 'write'] },
- ],
- })
- expect(result.success).toBe(true)
- })
- })
- })
|