Files
2026-07-13 12:30:28 +08:00

128 lines
3.2 KiB
JavaScript

import assert from 'node:assert/strict';
import { mkdtempSync } from 'node:fs';
import { tmpdir } from 'node:os';
import path from 'node:path';
import { pathToFileURL } from 'node:url';
import { build } from 'esbuild';
import { test } from 'vitest';
async function loadHelper() {
const tempDir = mkdtempSync(path.join(tmpdir(), 'pinme-worker-metadata-'));
const outfile = path.join(tempDir, 'workerMetadata.cjs');
await build({
entryPoints: [path.resolve('bin/utils/workerMetadata.ts')],
outfile,
bundle: true,
platform: 'node',
format: 'cjs',
target: 'node18',
});
return import(pathToFileURL(outfile).href);
}
function validMetadata(projectName = 'demo-project') {
return JSON.stringify({
main_module: 'worker.js',
project_name: projectName,
bindings: [
{
type: 'secret_text',
name: 'API_KEY',
text: 'real-api-key',
},
{
type: 'plain_text',
name: 'PROJECT_NAME',
text: projectName,
},
],
compatibility_date: '2024-01-01',
});
}
test('validateWorkerMetadataForCreate accepts platform metadata', async () => {
const { validateWorkerMetadataForCreate } = await loadHelper();
assert.doesNotThrow(() => {
validateWorkerMetadataForCreate(validMetadata(), 'demo-project');
});
});
test('validateWorkerMetadataForCreate rejects template placeholder metadata', async () => {
const { validateWorkerMetadataForCreate } = await loadHelper();
const templateMetadata = JSON.stringify({
api_key: 'xxx',
main_module: 'worker.js',
project_name: 'project_name',
compatibility_date: '2024-01-01',
bindings: [
{
type: 'secret_text',
name: 'API_KEY',
text: 'xxx',
},
],
});
assert.throws(
() => validateWorkerMetadataForCreate(templateMetadata, 'demo-project'),
/real API_KEY binding/,
);
});
test('validateWorkerMetadataForCreate rejects flagged API_KEY placeholder', async () => {
const { validateWorkerMetadataForCreate } = await loadHelper();
const metadata = JSON.stringify({
main_module: 'worker.js',
project_name: 'demo-project',
bindings: [
{
type: 'secret_text',
name: 'API_KEY',
text: '__PINME_API_KEY__',
},
{
type: 'plain_text',
name: 'PROJECT_NAME',
text: 'demo-project',
},
],
});
assert.throws(
() => validateWorkerMetadataForCreate(metadata, 'demo-project'),
/real API_KEY binding/,
);
});
test('validateWorkerMetadataForCreate requires matching PROJECT_NAME binding', async () => {
const { validateWorkerMetadataForCreate } = await loadHelper();
const metadata = JSON.stringify({
main_module: 'worker.js',
project_name: 'demo-project',
bindings: [
{
type: 'secret_text',
name: 'API_KEY',
text: 'real-api-key',
},
],
});
assert.throws(
() => validateWorkerMetadataForCreate(metadata, 'demo-project'),
/PROJECT_NAME binding/,
);
});
test('validateWorkerMetadataForCreate rejects invalid JSON', async () => {
const { validateWorkerMetadataForCreate } = await loadHelper();
assert.throws(
() => validateWorkerMetadataForCreate('{not json', 'demo-project'),
/valid JSON/,
);
});