104 lines
3.0 KiB
JavaScript
104 lines
3.0 KiB
JavaScript
/**
|
|
* Unit Tests for General Utilities
|
|
* Tests request ID generation and document ID validation
|
|
*/
|
|
|
|
import { test, describe } from 'node:test';
|
|
import assert from 'node:assert';
|
|
import crypto from 'node:crypto';
|
|
|
|
// Set up globals that server.js would provide
|
|
globalThis.crypto = crypto;
|
|
globalThis.config = { google: {}, server: {}, sitemap: {} };
|
|
|
|
import { generateRequestId, validateDocumentId } from '../../src/proxy.js';
|
|
|
|
describe('Unit: Request ID Generation', () => {
|
|
|
|
test('T046: Should generate unique request ID', () => {
|
|
const id1 = generateRequestId();
|
|
const id2 = generateRequestId();
|
|
|
|
assert.ok(id1, 'Should generate ID');
|
|
assert.ok(id2, 'Should generate second ID');
|
|
assert.notStrictEqual(id1, id2, 'IDs should be unique');
|
|
});
|
|
|
|
test('T046: Should generate ID with req_ prefix', () => {
|
|
const id = generateRequestId();
|
|
assert.ok(id.startsWith('req_'), 'Should start with req_ prefix');
|
|
});
|
|
|
|
test('T046: Should generate valid UUID format', () => {
|
|
const id = generateRequestId();
|
|
const uuidPart = id.substring(4); // Remove 'req_' prefix
|
|
|
|
// UUID v4 format: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
|
|
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
assert.ok(uuidRegex.test(uuidPart), 'Should be valid UUID v4');
|
|
});
|
|
|
|
});
|
|
|
|
describe('Unit: Document ID Validation', () => {
|
|
|
|
test('T046: Should accept valid Google Drive IDs', () => {
|
|
const validIds = [
|
|
'1BxAA_example123',
|
|
'abcdefghijklmnop',
|
|
'12345678',
|
|
'test-doc-id_123',
|
|
'ABCDEFGH-IJKLMNOP_12345678'
|
|
];
|
|
|
|
for (const id of validIds) {
|
|
assert.ok(
|
|
validateDocumentId(id),
|
|
`Should accept valid ID: ${id}`
|
|
);
|
|
}
|
|
});
|
|
|
|
test('T046: Should reject IDs that are too short', () => {
|
|
const shortId = 'abc1234'; // 7 characters (minimum is 8)
|
|
assert.strictEqual(validateDocumentId(shortId), false);
|
|
});
|
|
|
|
test('T046: Should reject IDs that are too long', () => {
|
|
const longId = 'a'.repeat(129); // 129 characters (maximum is 128)
|
|
assert.strictEqual(validateDocumentId(longId), false);
|
|
});
|
|
|
|
test('T046: Should reject IDs with invalid characters', () => {
|
|
const invalidIds = [
|
|
'invalid@id',
|
|
'invalid id', // space
|
|
'invalid/id', // slash
|
|
'invalid#id', // hash
|
|
'invalid.id', // period
|
|
'invalid$id' // dollar sign
|
|
];
|
|
|
|
for (const id of invalidIds) {
|
|
assert.strictEqual(
|
|
validateDocumentId(id),
|
|
false,
|
|
`Should reject invalid ID: ${id}`
|
|
);
|
|
}
|
|
});
|
|
|
|
test('T046: Should reject null, undefined, and non-strings', () => {
|
|
assert.strictEqual(validateDocumentId(null), false);
|
|
assert.strictEqual(validateDocumentId(undefined), false);
|
|
assert.strictEqual(validateDocumentId(123), false);
|
|
assert.strictEqual(validateDocumentId({}), false);
|
|
assert.strictEqual(validateDocumentId([]), false);
|
|
});
|
|
|
|
test('T046: Should reject empty string', () => {
|
|
assert.strictEqual(validateDocumentId(''), false);
|
|
});
|
|
|
|
});
|