import test from 'node:test'; import assert from 'node:assert/strict'; import { parsePushSubscriptionCancelRequest, parsePushSubscriptionCityUpdate, parsePushSubscriptionConfirmReply, parsePushSubscriptionHelpRequest, parsePushSubscriptionListRequest, parsePushSubscriptionModifyRequest, } from './push-subscription-parser.mjs'; test('parsePushSubscriptionConfirmReply accepts numeric ids and custom times', () => { assert.equal(parsePushSubscriptionConfirmReply('11'), null); const one = parsePushSubscriptionConfirmReply('1'); assert.equal(one.item.key, 'morning'); assert.equal(one.hour, null); const news = parsePushSubscriptionConfirmReply('2 7点'); assert.equal(news.item.key, 'news'); assert.equal(news.hour, 7); assert.equal(news.minute, 0); assert.equal(parsePushSubscriptionConfirmReply('10').item.key, 'surprise'); assert.equal(parsePushSubscriptionConfirmReply('你好'), null); }); test('parsePushSubscriptionCancelRequest detects id and alias cancel', () => { assert.equal(parsePushSubscriptionCancelRequest('取消2').item.key, 'news'); assert.equal(parsePushSubscriptionCancelRequest('取消早安').item.key, 'morning'); assert.deepEqual(parsePushSubscriptionCancelRequest('全部取消'), { all: true }); }); test('parsePushSubscriptionModifyRequest parses id and alias modify', () => { const news = parsePushSubscriptionModifyRequest('2改到7点'); assert.equal(news.item.key, 'news'); assert.equal(news.hour, 7); const morning = parsePushSubscriptionModifyRequest('早安改到7点半'); assert.equal(morning.item.key, 'morning'); assert.equal(morning.minute, 30); }); test('parsePushSubscriptionListRequest and help request', () => { assert.equal(parsePushSubscriptionListRequest('我的订阅'), true); assert.equal(parsePushSubscriptionHelpRequest('订阅帮助'), true); }); test('parsePushSubscriptionConfirmReply parses weather city and time', () => { const shanghai = parsePushSubscriptionConfirmReply('3 上海'); assert.equal(shanghai.item.key, 'weather'); assert.equal(shanghai.options.city, '上海'); const timed = parsePushSubscriptionConfirmReply('3 7点 北京'); assert.equal(timed.hour, 7); assert.equal(timed.options.city, '北京'); }); test('parsePushSubscriptionCityUpdate parses weather city change', () => { const updated = parsePushSubscriptionCityUpdate('3改城市杭州'); assert.equal(updated.item.key, 'weather'); assert.equal(updated.options.city, '杭州'); });