Spaces:
Running
Running
File size: 3,253 Bytes
1b44660 |
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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
import type { Context } from 'hono';
import { beforeEach, describe, expect, it, vi } from 'vitest';
import type { HonoEnv } from '../src/app';
import { hasValidAuthToken } from '../src/lib/utils';
describe('hasValidAuthToken', () => {
// Mock Context object
let mockContext: Context<HonoEnv>;
const validToken = 'valid-token-12345';
beforeEach(() => {
// Reset mocks
vi.resetAllMocks();
// Create a mock context with request headers and environment
mockContext = {
req: {
header: vi.fn(),
},
env: {
API_TOKEN: validToken,
},
} as unknown as Context<HonoEnv>;
});
it('should return true when Authorization header has the correct Bearer token', () => {
// Setup header mock to return the valid token
mockContext.req.header = vi.fn().mockImplementation((name: string) => {
if (name === 'Authorization') return `Bearer ${validToken}`;
return undefined;
});
// Call the function
const result = hasValidAuthToken(mockContext);
// Assert
expect(result).toBe(true);
expect(mockContext.req.header).toHaveBeenCalledWith('Authorization');
});
it('should return false when Authorization header is missing', () => {
// Setup header mock to return undefined
mockContext.req.header = vi.fn().mockImplementation((name: string) => {
return undefined;
});
// Call the function
const result = hasValidAuthToken(mockContext);
// Assert
expect(result).toBe(false);
expect(mockContext.req.header).toHaveBeenCalledWith('Authorization');
});
it('should return false when Authorization header has incorrect token value', () => {
// Setup header mock to return an invalid token
mockContext.req.header = vi.fn().mockImplementation((name: string) => {
if (name === 'Authorization') return 'Bearer wrong-token';
return undefined;
});
// Call the function
const result = hasValidAuthToken(mockContext);
// Assert
expect(result).toBe(false);
expect(mockContext.req.header).toHaveBeenCalledWith('Authorization');
});
it('should return false when Authorization header uses a scheme other than Bearer', () => {
// Setup header mock to return a non-Bearer token
mockContext.req.header = vi.fn().mockImplementation((name: string) => {
if (name === 'Authorization') return `Basic ${validToken}`;
return undefined;
});
// Call the function
const result = hasValidAuthToken(mockContext);
// Assert
expect(result).toBe(false);
expect(mockContext.req.header).toHaveBeenCalledWith('Authorization');
});
it('should return false when API_TOKEN environment variable is not set or empty', () => {
// Mock the environment with an empty API_TOKEN
mockContext.env.API_TOKEN = '';
// Setup header mock to return a valid token format
mockContext.req.header = vi.fn().mockImplementation((name: string) => {
if (name === 'Authorization') return `Bearer ${validToken}`;
return undefined;
});
// Call the function
const result = hasValidAuthToken(mockContext);
// Assert
expect(result).toBe(false);
expect(mockContext.req.header).toHaveBeenCalledWith('Authorization');
});
});
|