// #!/usr/bin/env ts-node
// tslint:disable:max-line-length
// tslint:disable:no-shadowed-variable
import test from 'blue-tape'
import {
MessagePayload, MessageType,
} from 'wechaty-puppet'
import {
PadplusMessagePayload,
} from '../schemas'
import { messageRawPayloadParser } from './message-raw-payload-parser'
test('messageRawPayloadParser', async t => {
t.skip('tbw')
// t.test('text', async t => {
// const PADPLUS_MESSAGE_PAYLOAD_TEXT: PadplusMessagePayload = {
// content : '1111',
// continue : 1,
// description : 'c7259a70-212f-11e8-b67d-57995e2021bf : 1111',
// from_user : 'qq512436430',
// msg_id : '8394773793402534033',
// msg_source : '\n',
// msg_type : 5,
// status : 1,
// sub_type : 1,
// timestamp : 1526958809,
// to_user : 'wxid_zj2cahpwzgie12',
// uin : 324216852,
// }
// const EXPECTED_MESSAGE_PAYLOAD_TEXT: MessagePayload = {
// //
// }
// })
// t.test('voice', async t => {
// const PADPLUS_MESSAGE_PAYLOAD_VOICE: PadplusMessagePayload = {
// // tslint:disable-next-line:max-line-length
// content : '',
// continue : 1,
// // tslint:disable-next-line:max-line-length
// data : 'AiMhU0lMS19WMwwApyt096juSeXgI3BDDQCnLFlmk03Zs+jP3PAPKwCl25PNLFW6BB0qb19HJLOX8jNasMdEoy5zCGi7oeggHLLgougrgHupZAT/JQCzXLZSGM0J6g1bFIaU9CaCFKAmfkcM+qu5tQ7vzkSYUEQewdk/JQCzFL9EakQ1L5872PLkNqYe3kA1v6HpiHQdS1h8YJ4507ppLIP/IgCyokKxq71fmfx2HtTnnZBLNNwV/gZaIjDthMM3MFX9IqD/IQCyigZIiC2yGWY7JeMNn1rjK92ZRng5HTD+b/gMnlCPvP8iALI12PcpjLOhoe5kPniDXyUhKtkef05/XkihsvlfQqeNcc4kALIh11fsM9qg1hI/kshvCDlpOnLK90HDH5pVcCWJwX5yEV1I0iUAsb1V0DQxiHU6z79AbfCjWYROOmPaXqcx+jmmNXQp/BjmWxpEGyMAsb2CJGNlN2CupGGC5PQM4w7VeQ/Ly6v7ocqaTcbJYWB5+GcjALG+EQv/VaMIh2dTDCzombbq3LrEkzUEMXq98tjvT4MZZcvvJQCxvYRdld90Z6M/mphCymtkeQiUfqJDeTjK62AtAsJa8zV9vnv/JQCyL39zaSDbhnSIedzlI9utf9+yv8T3t1g+R2Ux4c7V+VX793S/JwCyVGvCQcBMcBpCFh31bc0MWJpTX7/oKn7TbPNvSKsCsxyalZxSR38iALKe3hXuPLlD/mjjdG9ewZ7/OGc1NZ4A5Eq8SVR3o70XQP8eALKhgzykWS9ozp7IMuJYfuHRNs64UoiICErnq96VUSMAsqXlNEUqdH9P9B/tg4CVWL3fdNHtH0O8DS4xkLhLJlA/QP8fALLGI+HAXGqaMBvfek845ko+DjkM01Vmn87I2rNXllMdALMYXlNzVm0GH1V7z+iLGTOJHq6ND9vsDO8Cs4nbIQCzEh/Rz34nULpdnTakqsuH47xfkmiaAEapzeRO9z/qlF8fALMT8WRMIUAxI3AMO36gyE9lE9gPExjzlMg3leoOCf8kALMhsWxNqJc2o1HlEcYWVkQcfioTEy8gMmxzKwlE5nNeTBiLHx4As4qYQV2UP++vl/LtHJ6A3sK9sr7ewhg8WAWPYk//KQCl/DLrDXAYzsOR8C6d+r/mOEF8Wej//jpd/zulq8Eqzja6e7VIpJLt0x4AtD1p5xeGWXJHolR2Evxg77MvBpB+zVGLDl4DMQEvIwCz9vV1Pk+94Jzd+jJvqqQK0H3RCeVQ7VTLyFVpawOI/7bONyUAs/cPUQpMmnUd2HCyUZ9On00i6/jkBJJLEHnjv6kdFGVh7p2N4ygAs/t0gfPo2MgEJ8NWkx2HNuayaYCXw+UAesM/9838bxpB0OyIi3p//yIAs/t3VtBIKhsKjOw47v0Ct5mQeWO2XSC/8Z4PQdzffGDdHyoAs/eZy5rRBo3Z5jN5wqKHFbEAXLJkz50qpM+IHoUokBnLtXTGMCSqdsCnKAC0A6dM/hzvuBFOEX8yanWaSSxDSQOFk7uSyf5MCY43uPaMOZg6TPJDKAC0ZduCgPUWK5+lTfKiCVYZuwZIOX4LH3Kr9Ijx7ztY2OcWr+UHT/M/KAC0ZMEXpweCECuwXtu36+eK3EJr7PNShRLfnQ3lc11exmTOkaQ2txBTIgC0ZQk8FAMdpRQKDk63qoA2es1syBxlOL9diX4T8xPscTN/HwC0Pc7MG7SBa2Y/0CnacuhMtnTZrE2Gg4l9b7XNX1c/IQCz6fUTipq0r/6aOeKBEbXc1qc/xK6uUPwTChiAoXsuxv8bALODm9jCiXaNTKXcoBxLcsoXJGgyuKs6TPl2vx4As3i93wXJEe57VcxpAFtjumtPUgSRe1OYkrMO0am/HACzBnXuRxgtsY+fXIRqWtT40LpKReVXQRydnxZLHACyd9L1CxEdao0q/mw9Gwg1M1/CIvS84o6tDYv3GwCxwg6BN+futJBH++wNmI/p1f7hsHd0Adsun38dALGRy75HsC1WkZqbSW+8yYu/UyUQmbUbB9tleWdfHACwZU8IVtSXZPkcabYxVsWXP2dmQHmRvOSu16l/HgCwAKCem3sjP5QvhEN2wvoLUGT0E60VLb4xBc/lLIkbALADOqe30R4oYa2RA/bx0a/fm5g2e76goPTrXyIAsBs636JoyGKFwZQBCK66/AoU1PZYjKPs60rih3VktCwXTysAs0Gb2DwFnqmR63HtcaGvfLxfHkFwiHZDoQ/D9UoakTT2od81BuO1Pn7jJyoAtoNAOaGJbLjZfNgYN727fa+KLkMiSFP59Wh/4Ic989B6WJqnBwnvrNNwKwC4O0BLi44+1J0itbyOF7NL9hYrmExjsFgX4yat2/ycP3MWTo9U89OK6HPfKgC4xVzFiwHqJdm8ZGkvVTWc7iSI7iFqNrzmxWnPg1CF89bIvLtXPEhHzo8jALjrgm3+BJBxoM4IjN9Ov5LxJ0aI2nDJzVlOkFuWGELLkGnnIAC3/Zn/tCqF3eQk/7VAmFBTxMRe5yE5tF8LQQjmY4Re7y4Ats2WKuzrz1/pR3hDP1lzOzu83KxPRsu0cG/V29xDS8VWa7sxWSgnD3SHkyjlXyIAmErcQPigcQUEi00qvmHd1kCJ/mU2sw3O1IJwAbDrZPkb/yoAmHdcoRvJ2SxUuKb7wrxi1nqoexUBJwfHUv94KscvpAAxO+m/+pOfjBbfMgCYaOWxqwC27ByZY7/qCWuMn6/mfGwLPmNa+FGycXoyu6msggsd/G9CBRSpLskxZ+4sAywAl+Pku+tLC8ubkV7+/RJPUuAhZaib8UfWrnywJegKE54G0TUXKKhobQnabN8nAJaA4J2QGRm6IrYI6l6ep1wiTSe/sJFfA9fDO4nrhsC2MzvwC8VvlywAksMJIn05dQFjvoZ8ld8NU39c6XcFe+pEPvREfrWPtMPr3ORuSD2v8WCLZx8xAJFjvlRzb5ucJ4nNsYVtYkE7rnLrsAzvsq2SCVawjQNuCSbrwGugcRXF0Y0IuTu2+f8vAJGghOMpzEMXKavTJSWx+tc/rXX7L/XZBB3DPch//qOWIfyjMtL7E2M2K4Vaghd/LwCiwCu/Ysd1InEkepArMxn3q4JMsvveg2gtw8OfoUDySqG9QGQ76KtOvaz/1N5eMzMAtadI83X5eYcEa602VmURkAMLKqHmlVaXkeGm3n5LU963ha0eXw56GFGQmNk1WI7LYoaXKAC2Anm8GOaPjmHpjogwyrfarlzghfBS7F/stT18J4lVxSv/mJ1hy83dKQC2Anm8wBp1qBu2q0EvV/JBp+mZnLepYVESK7eaHSDhzFXLqxwWPfndFygAtf+7ffQzZFIe3QIkUuOKnzf4yohu6VxiGFtx2Az7/WHxamrLr3cmHyMAteiU2x8AyKGPylgH46YdnlRpFRwGhOC8/tbig+3Ll7u2TesyAJI4Eq7NzsBPdZD5rdnO2Ec7m5Z0OxPUeZiZztzIRNx9iJbrEg1pDx+/l60rjIoxBQpzKQCX7TtLv/xxqlLEmrC7D9ENyKHTcen+ndzhLbD86mMqgzHtikua7Si3NSIAleXJRniwATlTucfuFcJTFPOA1E+NL68JcBsn4n7FQM0aCicAlg/d4hIE0IeiAc7zsX3ygS9dRO7+p1+g71fnx0c5nkwff0o1OHK/JwCYH233jI6RSc3bGkEwnnuO7SRXO8w1GeqVxOvLzgrF7FlO5lkvFf8oAJc2C2SzsXjeXyijTRQApRuXET45cockuSkq8f25I72ZqMBoL/NL2jUrAJPxo4c0CYe14KI1CKcnhOPeNvT+fGSuLtePoTJRdH1MXQfdXxvlds3yTe8sAJHCMmxrJAEuwEFIs47ICyhJYdEuT/EFe0NMem8ZsWOwB1Zig5/9J7d9n0qPLQCRoSIcX7vCymwVmkATHv+h1sjCp8dbmVRPJH6wCKHEsHYFoXHP8T11go0LVg8uAJLqcnd1AGVssaCP/oTeww6UV3qY3bG/v0GModQUOO8yvtj5vu+Mg8OO1H2wuU8uAKMCC/dZE8jRhCOVLdulmnomUfHioJarG+u3290qyq7Bs7+qzmsghNpJ5xhApz8nALZzx/IIEJOv497ee/9OpatmQ7kR0FytPQzKXe9o7VOIZahZvhR6ayMAtsNwIsbWkVMsg73K/IQKKpfnPJNr8Jk2JXqE+UvRqCJyOP8eALbA7zLr0bUi6olrMN1REZJ2Qt85Mse2qSMKo0ULnyUAtjl5X5kJvxvQilDxzA1q5/h2arjlDGBi4sLZ3giMnnkYcsTZ0zUAk4CV6PxyOVgovyRZHuec71XE0jE8mTmyWvvGbAae3Up7yt+jl6fjkSEY/f1Ud9PNbbZ8zr8rAJbVPscVHfKVjb4R17d0CVysDJNhqO9pzpGSe0berOOiqlPTzYY3BP2Sv8sqAJXLWklHccAWH94wnCbxZwQHFOYl9FulxjbH9xOgNKS33iQTK1bXntLA/yMAlcW9mPxsSa1imULCboHZg5JCzeQPtU27GdHx7UL2i3zS4v8lAJWgpxBF1bR9YAUMefUE3k9k6VZydqTVUU9mSzyzhQhB5l1tDTMqAJQiiddXFiQJAJYLMaW0LGPIV783dW8MCph4USLBVxsGnsWwREFor5CUTSwAkvSv6pz93h/xFFIFG4JV+EsvnJEoVwCcJ8ZulllwE9szYw2sLjWg/vWoqz8pAJF3GFJwHFcs2I/lbamiZ1sycmSqBk2phNBkvnInBcrh/VqE/O+4ZwXyJACQLsNJ+cqkywyfTAh646XCOBjuspD6HIS9KZdlBk0fkAeKQuknAKKSlD22iR9mbgqMojMyGw8GNFRhJXgCUMtUYcydlSV0mT5M/f7NfyMAtPOgVOwkdgQgxqfeM+EuVF+qgzJHoaWCP+0/XmJcwLiBR9IsALVKsAokyVCgjIiyCfKPYADEA8hNPBhjHwx6qGGbHZNCERR7s5nEkPcMqqLPJwC1nkRsiufU/t9wKKS9dA9zH+4/+PevklRocp76ncfkvJNwWmU+z4UoALWcBMIhn2JTSjGt/xSbyXyIcrqelwL0BUdwoM1PxwjyINO0eRMT2V8mALWjLtIcMZaGG8Ga89psYSv9lakZgJeDGf9oqRb+CdjHhk//Gp2nKAC1gg9De5h3Xo3SV1xJ9XnSyb7sP9WxvZ9wz9pEuoaAIFL448RNurhlJAC0WPxznPuVniwH8SdD3jqs6cNXLqpgvXOOgRvwX1cxg1CngK8vALQdi6ESjmCLjrv+JlP8E9ybPkoVkUzuUgz58dbMhJ1jz2GA+5yfTUgylCieTAXfLgCTdcLYjWv+m/dhAXdOe0Fga2dYHqGDzVVrwrSL4g+9kNXsGs6mr+FyVpmBIlF/KwCUkEsJJQ5zR1ABN70xuzkLHmYv2ZxAn6dRLez3iklzdrgkgPoVdPCgFEZvLQCVy1WMsXZTpuBATAdMMkGMnqhzjiX8AywnKZGgkVNzUh737Le02K9lsguDB3spAJU5ZTSnjIv45e6BhttIR3kdGpXk2trSNptHmMt4Kh8r05OopM5x0rb/KACREi8IWiyycSCznadtZytx8ea/ITsXeC1qWrrS7WVyXC97cL1c1aI/IACOn+pAtFP5BzJDHQ0TjyRGwvW8zBEkeNb61b2fRABg+CsAjXw4XEngvNV5Q2Brd8602uWP0XqbFHBPmvdtGijJRCKSuWpiepNmevp8VysAjQ790Iha+wlQIOt64PmNadS1NXNKisefrrCoAEIdqvw/sGVDd9y4fHnZPxkAs4aAer03MjKVadXhfLECT9NBxtoF6oEtUx0AsvyhjHArMWmMjPJAE7tJoNq1X/fpqFDStU2QOXsdALI2LWW+zvH8JD9oJPKGEG3NFerV/Yz+TAR+1xZPHQCyNi8qdFoJvdCfvng+1vgXgzhLwFhLSF4f2/RlaRwAsjYvHioVkwFNCRlqYzLGOBk7D7TRiO6S/qkefR4AsgU8GqCOpk1XJSvx4L5Wdi3cOSdtIU+kRXq7FkJ/IwCxTe9/nZ9p893wKFazftsc8a53k5ZwGzRjO+C7VwsHXA+LPx0AsU5Epny7kj1ZXwTqRg3HIqHWzgVNXfJ8JqTsIl0dALFMQeKzWs66glucLfHl10umgYdGrYoplk2dMYbfGQCxJWIsg3XopNcheIIRDGAXQ8ne+oZFzbU3GgCwdoY+/uIoqhhaoWBFuhGuKEs1fk8WLqDy6R8AsGbYXZYcw8eBX5bk/dRqO/LiOHFt/b27XJXfIwTZxB8AsBrLw8GZbVR0vhfY7bMpB7KYfV1CadQVizxTl73p/RwAsN4yl4zhvpU9LKRS0moB1pQGVYHJo3fjah2//x0AsHaFrDGr9UUdktX97RBhGC49cvJ4IkfN9O/zgwYdALB2ki7hlML8ud6aUhXhRJivDDPZUTbda7uZZ+xfHACwchxE1p4f7juO4zdpJejwiPirQMbfPSof+OdXGwCwchxE7PEXYgGan7Rj/Q4E9Ar3SRALjSm11gcbALBvl1cg8luj45zYjOB3ExKFkG1BUK7oVBG+LxwAsG6I5um9Ppksa7ChlK1Dbo7jvZ0PiulBmNwfPxwAsG7rtSoEjW5yrqK6lpB+SV0zfDPLeugKTdngbxgAsHJUQcLeGRNGAmo/wAmfg/P1eLTN1z8fHQCwchopfCf/u8Hi1qhfxXUNWfdYGsHkhHHcptY5HxoAsHCSlpvI4wEzO2+ZPY4WTNfSvyOjuoh9EbMbALBKXA5hn7usM8ZdGwXUZtNXw8Pr8IqIqimy+g==',
// description : '李佳芮 : [语音]',
// from_user : 'qq512436430',
// msg_id : '8502371723610127059',
// msg_source : '',
// msg_type : 5,
// status : 1,
// sub_type : 34,
// timestamp : 1526984922,
// to_user : 'wxid_zj2cahpwzgie12',
// uin : 324216852,
// }
// const EXPECTED_MESSAGE_PAYLOAD_VOICE: MessagePayload = {
// //
// }
// })
})
test('sys', async t => {
const PADPLUS_MESSAGE_PAYLOAD_SYS: PadplusMessagePayload = {
content: '23238546298@chatroom:\n\n\t\n\t\t\n\t\t\n\t\t\n\t\t\tinvite\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\n',
createTime: 1568205434181,
fromMemberUserName: '23238546298@chatroom',
fromUserName: '23238546298@chatroom',
imgBuf: '',
imgStatus: 1,
l1MsgType: 5,
msgId: '1745697108690097034',
msgSource: '',
msgSourceCd: 2,
msgType: 10002,
newMsgId: 1745697108690097200,
pushContent: '',
status: 4,
toUserName: 'wxid_zovb9ol86m7l22',
uin: '2963338780',
wechatUserName: 'wxid_zovb9ol86m7l22',
}
const EXPECTED_MESSAGE_PAYLOAD_SYS: MessagePayload = {
fromId: undefined,
id: '1745697108690097034',
mentionIdList: [],
roomId: '23238546298@chatroom',
text: '\n\t\n\t\t\n\t\t\n\t\t\n\t\t\tinvite\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\n',
timestamp: 1568205434181,
toId: 'wxid_zovb9ol86m7l22',
type: MessageType.Unknown,
}
const payload = await messageRawPayloadParser(PADPLUS_MESSAGE_PAYLOAD_SYS)
// console.log('payload:', payload)
t.deepEqual(payload, EXPECTED_MESSAGE_PAYLOAD_SYS, 'should parse sys message payload')
})
test('room invitation created by others', async t => {
const MESSAGE_PAYLOAD: PadplusMessagePayload = {
appMsgType: 5,
content: 'view500',
createTime: 1568205752199,
fileName: '邀请你加入群聊',
fromUserName: 'lylezhuifeng',
imgBuf: '',
imgStatus: 0,
l1MsgType: 5,
msgId: '7451739954714199526',
msgSource: '',
msgSourceCd: 2,
msgType: 49,
newMsgId: 7451739954714199000,
pushContent: '',
status: 3,
toUserName: 'wxid_zovb9ol86m7l22',
uin: '2963338780',
wechatUserName: 'wxid_zovb9ol86m7l22',
}
const EXPECTED_PAYLOAD: MessagePayload = {
filename: '7451739954714199526-to-be-implement.txt',
fromId: 'lylezhuifeng',
id: '7451739954714199526',
mentionIdList: [],
roomId: undefined,
text: 'view500',
timestamp: 1568205752199,
toId: 'wxid_zovb9ol86m7l22',
type: MessageType.Url,
}
const payload = await messageRawPayloadParser(MESSAGE_PAYLOAD)
t.deepEqual(payload, EXPECTED_PAYLOAD, 'should parse room invitation message payload')
})
test('room ownership transfer message', async t => {
const MESSAGE_PAYLOAD: PadplusMessagePayload = {
content: '你已成为新群主',
createTime: 1568206018206,
fromUserName: '18295482296@chatroom',
imgBuf: '',
imgStatus: 1,
l1MsgType: 5,
msgId: '6345486005160255967',
msgSource: '',
msgSourceCd: 2,
msgType: 10000,
newMsgId: 6345486005160255000,
pushContent: '',
status: 4,
toUserName: 'wxid_zovb9ol86m7l22',
uin: '2963338780',
wechatUserName: 'wxid_zovb9ol86m7l22',
}
const EXPECTED_PAYLOAD: MessagePayload = {
fromId: undefined,
id: '6345486005160255967',
mentionIdList: [],
roomId: '18295482296@chatroom',
text: '你已成为新群主',
timestamp: 1568206018206,
toId: 'wxid_zovb9ol86m7l22',
type: MessageType.Unknown,
}
const payload = await messageRawPayloadParser(MESSAGE_PAYLOAD)
t.deepEqual(payload, EXPECTED_PAYLOAD, 'should parse ower transfer message')
})
test('share card peer to peer', async t => {
const MESSAGE_PAYLOAD: PadplusMessagePayload = {
content: '',
createTime: 1568206141208,
fromUserName: 'lylezhuifeng',
imgBuf: '',
imgStatus: 1,
l1MsgType: 5,
msgId: '4856541606299990582',
msgSource: '',
msgSourceCd: 2,
msgType: 42,
newMsgId: 4856541606299991000,
pushContent: '高原ོ : [名片]苏畅',
status: 3,
toUserName: 'wxid_zovb9ol86m7l22',
uin: '2963338780',
wechatUserName: 'wxid_zovb9ol86m7l22',
}
const EXPECTED_PAYLOAD: MessagePayload = {
fromId: 'lylezhuifeng',
id: '4856541606299990582',
mentionIdList: [],
roomId: undefined,
text: '',
timestamp: 1568206141208,
toId: 'wxid_zovb9ol86m7l22',
type: MessageType.Contact,
}
const payload = await messageRawPayloadParser(MESSAGE_PAYLOAD)
t.deepEqual(payload, EXPECTED_PAYLOAD, 'should parse share card message peer to peer')
})
test('share card in room', async t => {
const MESSAGE_PAYLOAD: PadplusMessagePayload = {
content: 'lylezhuifeng:\n\n\n',
createTime: 1568206684229,
fileName: '\n\t0\n\t3\n\n',
fromMemberNickName: '高原ོ ',
fromMemberUserName: 'lylezhuifeng',
fromUserName: '18295482296@chatroom',
imgBuf: '',
imgStatus: 1,
l1MsgType: 5,
msgId: '2899852992039617138',
msgSource: '\n\t0\n\t3\n\n',
msgSourceCd: 2,
msgType: 42,
newMsgId: 2899852992039617000,
pushContent: '高原ོ : [名片]百年-句子技术支持',
status: 3,
toUserName: 'wxid_zovb9ol86m7l22',
uin: '2963338780',
wechatUserName: 'wxid_zovb9ol86m7l22',
}
const EXPECTED_PAYLOAD: MessagePayload = {
fromId: 'lylezhuifeng',
id: '2899852992039617138',
mentionIdList: [],
roomId: '18295482296@chatroom',
text: '\n\n',
timestamp: 1568206684229,
toId: 'wxid_zovb9ol86m7l22',
type: MessageType.Contact,
}
const payload = await messageRawPayloadParser(MESSAGE_PAYLOAD)
t.deepEqual(payload, EXPECTED_PAYLOAD, 'should parse share card message peer to peer')
})
test('attachment file with ext .xlsx', async t => {
const MESSAGE_PAYLOAD: PadplusMessagePayload = {
appMsgType: 6,
content: '报价.xlsx6011934@cdn_304e020100044730450201000204d8e50c6e02033d0af80204ba30feb602045d78f1e10420777869645f7a6f7662396f6c38366d376c323235305f313536383230373332390204010400050201000400_0780b7157995b47c0e88275d0c40da6a_1xlsx304e020100044730450201000204d8e50c6e02033d0af80204ba30feb602045d78f1e10420777869645f7a6f7662396f6c38366d376c323235305f3135363832303733323902040104000502010004000780b7157995b47c0e88275d0c40da6a0420e8bc8986eb1539bbab10d396e814dlylezhuifeng01',
createTime: 1568207329248,
fileName: '报价.xlsx',
fromUserName: 'lylezhuifeng',
imgBuf: '',
imgStatus: 1,
l1MsgType: 5,
msgId: '4361591746319570095',
msgSource: '\n',
msgSourceCd: 2,
msgType: 49,
newMsgId: 4361591746319570000,
pushContent: '高原ོ : [文件]报价.xlsx',
status: 3,
toUserName: 'wxid_zovb9ol86m7l22',
uin: '2963338780',
wechatUserName: 'wxid_zovb9ol86m7l22',
}
const EXPECTED_PAYLOAD: MessagePayload = {
filename: '报价.xlsx',
fromId: 'lylezhuifeng',
id: '4361591746319570095',
mentionIdList: [],
roomId: undefined,
text: '报价.xlsx6011934@cdn_304e020100044730450201000204d8e50c6e02033d0af80204ba30feb602045d78f1e10420777869645f7a6f7662396f6c38366d376c323235305f313536383230373332390204010400050201000400_0780b7157995b47c0e88275d0c40da6a_1xlsx304e020100044730450201000204d8e50c6e02033d0af80204ba30feb602045d78f1e10420777869645f7a6f7662396f6c38366d376c323235305f3135363832303733323902040104000502010004000780b7157995b47c0e88275d0c40da6a0420e8bc8986eb1539bbab10d396e814dlylezhuifeng01',
timestamp: 1568207329248,
toId: 'wxid_zovb9ol86m7l22',
type: MessageType.Attachment,
}
const payload = await messageRawPayloadParser(MESSAGE_PAYLOAD)
t.deepEqual(payload, EXPECTED_PAYLOAD, 'should parse share card message peer to peer')
})
test('others recalled message in room', async t => {
const MESSAGE_PAYLOAD: PadplusMessagePayload = {
content: 'lylezhuifeng:\n18295482296@chatroom16720456216800642263058603981',
createTime: 1568207817258,
fromMemberUserName: 'lylezhuifeng',
fromUserName: '18295482296@chatroom',
imgBuf: '',
imgStatus: 1,
l1MsgType: 5,
msgId: '7451323945505661106',
msgSource: '',
msgSourceCd: 2,
msgType: 10002,
newMsgId: 7451323945505661000,
pushContent: '',
status: 4,
toUserName: 'wxid_zovb9ol86m7l22',
uin: '2963338780',
wechatUserName: 'wxid_zovb9ol86m7l22',
}
const EXPECTED_PAYLOAD: MessagePayload = {
fromId: 'lylezhuifeng',
id: '7451323945505661106',
mentionIdList: [],
roomId: '18295482296@chatroom',
text: '6800642263058603981',
timestamp: 1568207817258,
toId: 'wxid_zovb9ol86m7l22',
type: MessageType.Recalled,
}
const payload = await messageRawPayloadParser(MESSAGE_PAYLOAD)
t.deepEqual(payload,
EXPECTED_PAYLOAD,
'should parse recalled message in room')
})
test('bot recalled message in room', async t => {
const MESSAGE_PAYLOAD: PadplusMessagePayload = {
appMsgType: undefined,
content: '23446751259@chatroom1670494294245587684513446090',
createTime: 1568776956065,
fileName: undefined,
fromMemberNickName: undefined,
fromMemberUserName: undefined,
fromUserName: '23446751259@chatroom',
imgBuf: '',
imgStatus: 1,
l1MsgType: 5,
msgId: '3195375600040238004',
msgSource: '',
msgSourceCd: 2,
msgType: 10002,
newMsgId: 3195375600040238000,
pushContent: '',
status: 4,
toUserName: 'wxid_v7j3e9kna9l912',
uin: '2978186714',
url: undefined,
wechatUserName: 'wxid_v7j3e9kna9l912',
}
const EXPECTED_PAYLOAD: MessagePayload = {
fromId: 'wxid_v7j3e9kna9l912',
id: '3195375600040238004',
mentionIdList: [],
roomId: '23446751259@chatroom',
text: '245587684513446090',
timestamp: 1568776956065,
toId: 'wxid_v7j3e9kna9l912',
type: MessageType.Recalled,
}
const payload = await messageRawPayloadParser(MESSAGE_PAYLOAD)
t.deepEqual(payload,
EXPECTED_PAYLOAD,
'should parse recalled message in room')
})
test('others recalled message in private chat', async t => {
const MESSAGE_PAYLOAD: PadplusMessagePayload = {
appMsgType: undefined,
content: '\n\t\n\t\tSoul001001\n\t\t1093970572\n\t\t3169605043756821364\n\t\t\n\t\n\n',
createTime: 1568777325070,
fileName: undefined,
fromMemberNickName: undefined,
fromMemberUserName: undefined,
fromUserName: 'Soul001001',
imgBuf: '',
imgStatus: 1,
l1MsgType: 5,
msgId: '8551294433062845570',
msgSource: '',
msgSourceCd: 2,
msgType: 10002,
newMsgId: 8551294433062845000,
pushContent: '',
status: 4,
toUserName: 'wxid_v7j3e9kna9l912',
uin: '2978186714',
url: undefined,
wechatUserName: 'wxid_v7j3e9kna9l912',
}
const EXPECTED_PAYLOAD: MessagePayload = {
fromId: 'Soul001001',
id: '8551294433062845570',
mentionIdList: [],
roomId: undefined,
text: '3169605043756821364',
timestamp: 1568777325070,
toId: 'wxid_v7j3e9kna9l912',
type: MessageType.Recalled,
}
const payload = await messageRawPayloadParser(MESSAGE_PAYLOAD)
t.deepEqual(payload,
EXPECTED_PAYLOAD,
'should parse recalled message in private message')
})
test('bot recalled message in private chat', async t => {
const MESSAGE_PAYLOAD: PadplusMessagePayload = {
appMsgType: undefined,
content: 'Soul00100116704942975435185973422451659',
createTime: 1568777162068,
fileName: undefined,
fromMemberNickName: undefined,
fromMemberUserName: undefined,
fromUserName: 'Soul001001',
imgBuf: '',
imgStatus: 1,
l1MsgType: 5,
msgId: '5403623995065243191',
msgSource: '',
msgSourceCd: 2,
msgType: 10002,
newMsgId: 5403623995065244000,
pushContent: '',
status: 4,
toUserName: 'wxid_v7j3e9kna9l912',
uin: '2978186714',
url: undefined,
wechatUserName: 'wxid_v7j3e9kna9l912',
}
const EXPECTED_PAYLOAD: MessagePayload = {
fromId: 'wxid_v7j3e9kna9l912',
id: '5403623995065243191',
mentionIdList: [],
roomId: undefined,
text: '5435185973422451659',
timestamp: 1568777162068,
toId: 'Soul001001',
type: MessageType.Recalled,
}
const payload = await messageRawPayloadParser(MESSAGE_PAYLOAD)
t.deepEqual(payload,
EXPECTED_PAYLOAD,
'should parse recalled message in private message')
})
// test('Official account sent url', async t => {
// const MESSAGE_PAYLOAD: PadplusMessagePayload = {
// content: '5100000- 015597078651000000020000000000200
001',
// data: null,
// fromUser: 'gh_87e03c422b73',
// messageId: '1006688399',
// messageSource: '\n\t3\n\t\n\t\t0\n\t\t\n\t\n\t0\n\t1\n\t1\n\n',
// messageType: 49,
// status: 3,
// timestamp: 1559707890,
// toUser: 'wxid_x01jgln69ath22',
// }
// const EXPECTED_PAYLOAD: MessagePayload = {
// filename: '1006688399-to-be-implement.txt',
// fromId: 'gh_87e03c422b73',
// id: '1006688399',
// mentionIdList: undefined,
// roomId: undefined,
// text: '5100000- 015597078651000000020000000000200
001',
// timestamp: 1559707890,
// toId: 'wxid_x01jgln69ath22',
// type: MessageType.Recalled,
// }
// const payload = await messageRawPayloadParser(MESSAGE_PAYLOAD)
// t.deepEqual(payload, EXPECTED_PAYLOAD, 'should parse official account sent url.')
// })
// test('Special Official account sent url', async t => {
// const MESSAGE_PAYLOAD = {
// content: '\n \n \n \n \n 5\n 1\n \n 0\n \n \n \n 0\n \n \n \n \n \n \n \n \n \n 0\n 0\n \n \n \n - \n 0\n \n \n \n \n 1559707142\n \n \n \n 504497991\n \n \n \n \n \n \n \n 0\n 0\n 0\n \n \n 0\n 0\n \n \n \n \n 840787998215241730\n \n \n 2\n 0\n 0\n
\n \n - \n 0\n \n \n \n \n 1559707142\n \n \n \n 504497993\n \n \n \n \n \n \n \n 0\n 0\n 0\n \n \n 0\n 0\n \n \n \n \n 840787998986993664\n \n \n 2\n 0\n 0\n
\n \n - \n 0\n \n \n \n \n 1559707142\n \n \n \n 504497994\n \n \n \n \n \n \n \n 0\n 0\n 0\n \n \n 0\n 0\n \n \n \n \n 840787999741968385\n \n \n 2\n 0\n 0\n
\n \n \n \n \n \n \n \n \n 0\n \n \n \n \n \n \n \n 1\n \n \n \n \n \n \n \n',
// data: null,
// fromUser: 'wxid_2965349653612',
// messageId: '1601417885',
// messageSource: '\n\t\n\t\t\n\t\t0\n\t\n\t0\n\t3\n\t0\n\n',
// messageType: 49,
// status: 3,
// timestamp: 1559707752,
// toUser: 'wxid_x01jgln69ath22',
// }
// const EXPECTED_PAYLOAD: MessagePayload = {
// filename: '1601417885-to-be-implement.txt',
// fromId: 'wxid_2965349653612',
// id: '1601417885',
// mentionIdList: undefined,
// roomId: undefined,
// text: '\n \n \n \n \n 5\n 1\n \n 0\n \n \n \n 0\n \n \n \n \n \n \n \n \n \n 0\n 0\n \n \n \n - \n 0\n \n \n \n \n 1559707142\n \n \n \n 504497991\n \n \n \n \n \n \n \n 0\n 0\n 0\n \n \n 0\n 0\n \n \n \n \n 840787998215241730\n \n \n 2\n 0\n 0\n
\n \n - \n 0\n \n \n \n \n 1559707142\n \n \n \n 504497993\n \n \n \n \n \n \n \n 0\n 0\n 0\n \n \n 0\n 0\n \n \n \n \n 840787998986993664\n \n \n 2\n 0\n 0\n
\n \n - \n 0\n \n \n \n \n 1559707142\n \n \n \n 504497994\n \n \n \n \n \n \n \n 0\n 0\n 0\n \n \n 0\n 0\n \n \n \n \n 840787999741968385\n \n \n 2\n 0\n 0\n
\n \n \n \n \n \n \n \n \n 0\n \n \n \n \n \n \n \n 1\n \n \n \n \n \n \n \n',
// timestamp: 1559707752,
// toId: 'wxid_x01jgln69ath22',
// type: MessageType.Recalled,
// }
// const payload = await messageRawPayloadParser(MESSAGE_PAYLOAD)
// t.deepEqual(payload, EXPECTED_PAYLOAD, 'should parse official account sent url.')
// })
test('Transfer money message', async t => {
const MESSAGE_PAYLOAD = {
appMsgType: 2000,
content: '20001',
createTime: 1568207943259,
fileName: '微信转账',
fromUserName: 'lylezhuifeng',
imgBuf: '',
imgStatus: 1,
l1MsgType: 5,
msgId: '2632022077853375799',
msgSource: '',
msgSourceCd: 2,
msgType: 49,
newMsgId: 2632022077853376000,
pushContent: '高原ོ : [转账]',
status: 3,
toUserName: 'wxid_zovb9ol86m7l22',
uin: '2963338780',
wechatUserName: 'wxid_zovb9ol86m7l22',
}
const EXPECTED_PAYLOAD: MessagePayload = {
filename: '2632022077853375799-to-be-implement.txt',
fromId: 'lylezhuifeng',
id: '2632022077853375799',
mentionIdList: [],
roomId: undefined,
text: '20001',
timestamp: 1568207943259,
toId: 'wxid_zovb9ol86m7l22',
type: MessageType.Transfer,
}
const payload = await messageRawPayloadParser(MESSAGE_PAYLOAD)
t.deepEqual(payload, EXPECTED_PAYLOAD, 'should parse transfer money message.')
})
// test('Transfer money confirm message', async t => {
// const MESSAGE_PAYLOAD = {
// content: '\n\n\n\n\n2000\n\n\n\n\n\n\n\n3\n\n\n\n\n\n\n\n\n\n\n\n',
// data: null,
// fromUser: 'wxid_x01jgln69ath22',
// messageId: '1601417905',
// messageSource: '',
// messageType: 49,
// status: 3,
// timestamp: 1559715714,
// toUser: 'lylezhuifeng',
// }
// const EXPECTED_PAYLOAD: MessagePayload = {
// filename: '1601417905-to-be-implement.txt',
// fromId: 'wxid_x01jgln69ath22',
// id: '1601417905',
// mentionIdList: undefined,
// roomId: undefined,
// text: '\n\n\n\n\n2000\n\n\n\n\n\n\n\n3\n\n\n\n\n\n\n\n\n\n\n\n',
// timestamp: 1559715714,
// toId: 'lylezhuifeng',
// type: MessageType.Transfer,
// }
// const payload = await messageRawPayloadParser(MESSAGE_PAYLOAD)
// t.deepEqual(payload, EXPECTED_PAYLOAD, 'should parse transfer money confirm message.')
// })