43 lines
1.6 KiB
JavaScript
43 lines
1.6 KiB
JavaScript
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');
|
||
|
|
});
|