Read a valueless count as unstated, and pin a CRLF receipt end to end
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Csos3Vfm66NrAywQUe3e4V
This commit is contained in:
+3
-2
@@ -66,12 +66,13 @@ const patterns = {
|
|||||||
stat: field('stat'),
|
stat: field('stat'),
|
||||||
sub: field('sub'),
|
sub: field('sub'),
|
||||||
submitDate: field('submit date'),
|
submitDate: field('submit date'),
|
||||||
// The last field, and the only one that may hold a space: it carries the message's own start.
|
// The one field that may hold a space, carrying the message's own start, so it ends at its line.
|
||||||
text: /\btext:([^\r\n]*)/i,
|
text: /\btext:([^\r\n]*)/i,
|
||||||
};
|
};
|
||||||
|
|
||||||
function toNumber(value: string | undefined): number | undefined {
|
function toNumber(value: string | undefined): number | undefined {
|
||||||
if (value === undefined) return undefined;
|
// Number('') is 0, which would report a receipt that stated no count as one that stated none sent.
|
||||||
|
if (value === undefined || value === '') return undefined;
|
||||||
|
|
||||||
const parsed = Number(value);
|
const parsed = Number(value);
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -61,7 +61,7 @@ describe('parseReceipt()', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('leaves absent fields undefined rather than guessing', () => {
|
test('leaves absent fields undefined rather than guessing', () => {
|
||||||
const receipt = parseReceipt('id:abc stat:UNDELIV');
|
const receipt = parseReceipt('id:abc sub: stat:UNDELIV');
|
||||||
|
|
||||||
assert.equal(receipt.id, 'abc');
|
assert.equal(receipt.id, 'abc');
|
||||||
assert.equal(receipt.stat, 'UNDELIV');
|
assert.equal(receipt.stat, 'UNDELIV');
|
||||||
@@ -94,6 +94,7 @@ describe('dlrFromPdu()', () => {
|
|||||||
assert.equal(dlr.statusId, 2);
|
assert.equal(dlr.statusId, 2);
|
||||||
assert.equal(dlr.errorCode, '000');
|
assert.equal(dlr.errorCode, '000');
|
||||||
assert.equal(dlr.doneDate?.toISOString(), '2025-08-25T14:31:00.000Z');
|
assert.equal(dlr.doneDate?.toISOString(), '2025-08-25T14:31:00.000Z');
|
||||||
|
assert.equal(dlrFromPdu(deliverSm('id:beef-1\r\nstat:DELIVRD'))?.smsId, 'beef-1');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('maps every spec status code back to its message state and id', () => {
|
test('maps every spec status code back to its message state and id', () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user