test/ask-user-request-identity.test.js
Rama main · réplica de lectura del repositorio original.
var test = require('node:test');
var assert = require('node:assert/strict');
var identity = require('../lib/ask-user-request-identity');
var normalize = require('../lib/yoke/user-input').normalizeQuestions;
function input() { return { questions: [{ question: 'Choose?', options: [{ label: 'A' }, { label: 'B' }] }] }; }
function event(value) { return { type: 'tool_executing', name: 'AskUserQuestion', id: 'exact-call', input: value }; }
test('raw Claude and normalized questions share identity in either delivery order', function () {
var raw = input(), normalized = { questions: normalize(raw) };
assert.equal(identity.sameAskUserRequest(event(raw), 'exact-call', normalized), true);
assert.equal(identity.sameAskUserRequest(event(normalized), 'exact-call', raw), true);
assert.equal(identity.sameAskUserRequest(event(raw), 'another-call', normalized), false);
});
test('changed questions, choices, flags and exact review targets never collapse', function () {
[function (value) { value.questions[0].question = 'Different?'; },
function (value) { value.questions[0].options[0].label = 'Different'; },
function (value) { value.questions[0].required = false; },
function (value) { value.questions[0].review = { revision: 2 }; },
function (value) { value.questions[0].options[0].markdown = 'Different evidence'; }].forEach(function (change) {
var raw = input(), next = input(); change(next);
assert.equal(identity.sameAskUserRequest(event(raw), 'exact-call', next), false);
});
});
test('legacy invalid schemas retain exact comparison rather than acquiring defaults', function () {
var legacy = { questions: [{ question: 'Legacy?', options: [{ label: 'Only' }] }] };
assert.equal(identity.sameAskUserRequest(event(legacy), 'exact-call', legacy), true);
assert.equal(identity.sameAskUserRequest(event(legacy), 'exact-call', input()), false);
});