message.spec.js 5.1 KB
Newer Older
1
const test = require('tape')
2
const Message = require('../src/message')
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
3 4
const Contact = require('../src/contact')
const Puppet = require('../src/puppet')
5

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
6
const log = require('../src/npmlog-env')
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
7 8

Contact.attach(new Puppet())
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
9 10 11 12 13 14 15 16 17 18

test('Message constructor parser test', t => {
  const rawData = JSON.parse('{"MsgId":"179242112323992762","FromUserName":"@0bb3e4dd746fdbd4a80546aef66f4085","ToUserName":"@16d20edf23a3bf3bc71bb4140e91619f3ff33b4e33f7fcd25e65c1b02c7861ab","MsgType":1,"Content":"test123","Status":3,"ImgStatus":1,"CreateTime":1461652670,"VoiceLength":0,"PlayLength":0,"FileName":"","FileSize":"","MediaId":"","Url":"","AppMsgType":0,"StatusNotifyCode":0,"StatusNotifyUserName":"","RecommendInfo":{"UserName":"","NickName":"","QQNum":0,"Province":"","City":"","Content":"","Signature":"","Alias":"","Scene":0,"VerifyFlag":0,"AttrStatus":0,"Sex":0,"Ticket":"","OpCode":0},"ForwardFlag":0,"AppInfo":{"AppID":"","Type":0},"HasProductId":0,"Ticket":"","ImgHeight":0,"ImgWidth":0,"SubMsgType":0,"NewMsgId":179242112323992770,"MMPeerUserName":"@0bb3e4dd746fdbd4a80546aef66f4085","MMDigest":"test123","MMIsSend":false,"MMIsChatRoom":false,"MMUnread":true,"LocalID":"179242112323992762","ClientMsgId":"179242112323992762","MMActualContent":"test123","MMActualSender":"@0bb3e4dd746fdbd4a80546aef66f4085","MMDigestTime":"14:37","MMDisplayTime":1461652670,"MMTime":"14:37"}')

  const EXPECTED = {
    id:       '179242112323992762'
    , from:   '@0bb3e4dd746fdbd4a80546aef66f4085'
  }
  const m = new Message(rawData)

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
19 20
  t.equal(m.id          , EXPECTED.id   , 'id right')
  t.equal(m.get('from') , EXPECTED.from , 'from right')
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
21

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
22 23
  const s = m.toString()
  t.equal(typeof s, 'string', 'toString()')
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
24 25 26 27

  t.end()
})

28 29 30
test('Message ready() promise testing', t => {
  // must different with other rawData, because Contact class with load() will cache the result. or use Contact.resetPool()
  const rawData = JSON.parse('{"MsgId":"3009511950433684462","FromUserName":"@0748ee480711bf20af91c298a0d7dcc77c30a680c1004157386b81cf13474823","ToUserName":"@b58f91e0c5c9e841e290d862ddb63c14","MsgType":1,"Content":"哈哈","Status":3,"ImgStatus":1,"CreateTime":1462887888,"VoiceLength":0,"PlayLength":0,"FileName":"","FileSize":"","MediaId":"","Url":"","AppMsgType":0,"StatusNotifyCode":0,"StatusNotifyUserName":"","RecommendInfo":{"UserName":"","NickName":"","QQNum":0,"Province":"","City":"","Content":"","Signature":"","Alias":"","Scene":0,"VerifyFlag":0,"AttrStatus":0,"Sex":0,"Ticket":"","OpCode":0},"ForwardFlag":0,"AppInfo":{"AppID":"","Type":0},"HasProductId":0,"Ticket":"","ImgHeight":0,"ImgWidth":0,"SubMsgType":0,"NewMsgId":3009511950433684500,"MMPeerUserName":"@0748ee480711bf20af91c298a0d7dcc77c30a680c1004157386b81cf13474823","MMDigest":"哈哈","MMIsSend":false,"MMIsChatRoom":false,"MMUnread":false,"LocalID":"3009511950433684462","ClientMsgId":"3009511950433684462","MMActualContent":"哈哈","MMActualSender":"@0748ee480711bf20af91c298a0d7dcc77c30a680c1004157386b81cf13474823","MMDigestTime":"21:44","MMDisplayTime":1462887888,"MMTime":"21:44","_h":104,"_index":0,"_offsetTop":0,"$$hashKey":"098"}')
31

32 33 34 35 36 37 38 39 40 41
  const expectedFromUserName  = '@0748ee480711bf20af91c298a0d7dcc77c30a680c1004157386b81cf13474823'
  const expectedToUserName    = '@b58f91e0c5c9e841e290d862ddb63c14'
  const expectedFromNickName  = 'From Nick Name Test'
  const expectedToNickName    = 'To Nick Name Test'
  const expectedMsgId        = '3009511950433684462'

  Contact.init()

  // Mock
  Contact.puppet.getContact = function (id) {
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
42
    log.silly('TestMessage', `mocked getContact(${id})`)
43 44 45
    return new Promise((resolve,reject) => {
      let obj = {}
      switch (id) {
46
        case expectedFromUserName:
47 48 49 50 51
          obj = {
            UserName: expectedFromUserName
            , NickName: expectedFromNickName
          }
          break
52
        case expectedToUserName:
53 54 55 56 57 58
          obj = {
            UserName: expectedToUserName
            , NickName: expectedToNickName
          }
          break
        default:
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
59
          log.error('TestMessage', `mocked getContact(${id}) unknown`)
60 61
          break
      }
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
62
      log.silly('TestMessage', 'setTimeout mocked getContact')
63
      setTimeout(r => {
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
64
        log.silly('TestMessage', 'mocked getContact resolved')
65 66 67 68 69 70 71
        return resolve(obj)
      }, 200)
    })
  }

  const m = new Message(rawData)

72
  t.equal(m.id, expectedMsgId, 'id/MsgId right')
73

74 75
  const p = m.ready()
  p.then(r => {
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
76 77 78 79 80 81
    const fc = Contact.load(m.get('from'))
    const tc = Contact.load(m.get('to'))
    t.equal(fc.get('id')   , expectedFromUserName, 'contact ready for FromUserName')
    t.equal(fc.get('name') , expectedFromNickName, 'contact ready for FromNickName')
    t.equal(tc.get('id')   , expectedToUserName  , 'contact ready for ToUserName')
    t.equal(tc.get('name') , expectedToNickName  , 'contact ready for ToNickName')
82 83
  })
  .catch(e => t.fail('m.ready() rejected: ' + e))
84
  .then(_ => t.end()) // test end
85 86
})

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
87
test('TBW: Message static method', t => {
88 89
  Contact.attach(new Puppet())

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
  const m = Message.find({
    id: 'xxx'
  }, {
    limit: 1
  })

  t.ok(m.get('id'), 'Message.find')

  const ms = Message.findAll({
    from: 'yyy'
  }, {
    limit: 2
  })

  t.equal(ms.length, 2, 'Message.findAll with limit 2')

  t.end()
})