Files
granthi-review/test/trailers.test.js
T

43 lines
1.6 KiB
JavaScript
Raw Normal View History

import { test } from 'node:test';
import assert from 'node:assert/strict';
import { parseTrailers, agentSlug } from '../src/lib/trailers.js';
test('parses standard Co-Authored-By trailer', () => {
const msg = 'fix: thing\n\nCo-Authored-By: Claude Fable 5 <[email protected]>';
assert.deepEqual(parseTrailers(msg), [{ name: 'Claude Fable 5', email: '[email protected]' }]);
});
test('case-insensitive and tolerant spacing', () => {
const msg = 'x\nco-authored-by: Codex Bot <[email protected]> ';
assert.deepEqual(parseTrailers(msg), [{ name: 'Codex Bot', email: '[email protected]' }]);
});
test('multiple distinct trailers', () => {
const msg = 'x\nCo-Authored-By: A <[email protected]>\nCo-Authored-By: B <[email protected]>';
assert.equal(parseTrailers(msg).length, 2);
});
test('dedupes identical trailers', () => {
const msg = 'x\nCo-Authored-By: A <[email protected]>\nCo-authored-by: A <[email protected]>';
assert.equal(parseTrailers(msg).length, 1);
});
test('trailer without email', () => {
const msg = 'x\nCo-Authored-By: Mystery Agent';
assert.deepEqual(parseTrailers(msg), [{ name: 'Mystery Agent', email: '' }]);
});
test('ignores non-trailer lines', () => {
assert.deepEqual(parseTrailers('Co-Authored-By appears in prose but not as trailer: nope\nplain line'), []);
assert.deepEqual(parseTrailers(''), []);
assert.deepEqual(parseTrailers(null), []);
});
test('agentSlug from email localpart', () => {
assert.equal(agentSlug({ name: 'Claude Fable 5', email: '[email protected]' }), 'noreply');
});
test('agentSlug from name when no email', () => {
assert.equal(agentSlug({ name: 'My Agent!', email: '' }), 'my-agent');
});