/ opencodehub / tests / unit / auth.test.ts
swadhinbiswas feat: OpenCodeHub v1.1.0 - Enterprise Features & Storage Adapters · 2/15/2026
719a1cb
50 lines · 2.0 KB
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
import { describe, it, expect, beforeAll } from 'vitest';

let extractBearerToken: (authHeader: string | null) => string | null;
let validatePasswordStrength: (password: string) => { valid: boolean; errors: string[] };

beforeAll(async () => {
    process.env.JWT_SECRET = process.env.JWT_SECRET || "unit-test-jwt-secret-minimum-32-chars";
    const auth = await import("@/lib/auth");
    extractBearerToken = auth.extractBearerToken;
    validatePasswordStrength = auth.validatePasswordStrength;
});

describe('Auth Library', () => {
    describe('extractBearerToken', () => {
        it('should return null for null header', () => {
            expect(extractBearerToken(null)).toBeNull();
        });

        it('should return null for invalid format', () => {
            expect(extractBearerToken('Basic token')).toBeNull();
            expect(extractBearerToken('Bearer')).toBeNull();
        });

        it('should return token for valid Bearer header', () => {
            expect(extractBearerToken('Bearer mytoken')).toBe('mytoken');
            expect(extractBearerToken('Bearer   mytoken')).toBeNull(); // Strict split by space? Implementation uses split(' ') length 2.
        });
    });

    describe('validatePasswordStrength', () => {
        it('should fail for short passwords', () => {
            const result = validatePasswordStrength('Short1a');
            expect(result.valid).toBe(false);
            expect(result.errors).toContain('Password must be at least 8 characters long');
        });

        it('should fail for missing complexity', () => {
            const result = validatePasswordStrength('alllowercase1');
            expect(result.valid).toBe(false);
            expect(result.errors).toContain('Password must contain at least one uppercase letter');
        });

        it('should pass for valid password', () => {
            const result = validatePasswordStrength('ValidPass1');
            expect(result.valid).toBe(true);
            expect(result.errors).toHaveLength(0);
        });
    });
});