room.spec.ts 8.9 KB
Newer Older
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
1 2
import { test } from 'ava'
import {
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
3
  Room
4
  // , Wechaty
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
5
  , Config
6
  // , Message
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
7
  , Contact
8
  // , Puppet
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
9
  , PuppetWeb
10
  // , log
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
11
}  from '../'
12

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
13 14
Config.puppetInstance(new PuppetWeb())
// Room.attach(new PuppetWeb())
15

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
// test('Room smoke testing', async t => {

//   const UserName = '@0bb3e4dd746fdbd4a80546aef66f4085'
//   const NickName = 'Nick Name Test'
//   const EncryChatRoomId = '123456abcdef'

//   // Mock
//   const mockContactGetter = function (id) {
//     return new Promise((resolve,reject) => {
//       if (id!=UserName) return resolve({});
//       setTimeout(() => {
//         return resolve({
//           UserName: UserName
//           , NickName: NickName
//           , EncryChatRoomId: EncryChatRoomId
//         })
//       }, 200)
//     })
//   }

//   const r = new Room(UserName)

//   t.is(r.id, UserName, 'id/UserName right')

//   await r.ready(mockContactGetter)

//   // .then(r => {
//     t.is(r.get('id')   , UserName, 'UserName set')
//     t.is(r.get('topic') , NickName, 'NickName set')
//     t.is(r.get('encryId') , EncryChatRoomId, 'EncryChatRoomId set')

//     const s = r.toString()
//     t.is(typeof s, 'string', 'toString()')
//   // })
//   // .catch(e => t.fail('ready() rejected: ' + e))
//   // .then(_ => t.end()) // test end
// })

test('Room smoking test', async t => {
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
55
  /* tslint:disable:max-line-length */
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
56 57 58
  const RAW_OBJ = JSON.parse(`
  {"RemarkPYQuanPin":"","RemarkPYInitial":"","PYInitial":"TZZGQNTSHGFJ","PYQuanPin":"tongzhizhongguoqingniantianshihuiguanfangjia","Uin":0,"UserName":"@@e2355db381dc46a77c0b95516d05e7486135cb6370d8a6af66925d89d50ec278","NickName":"(通知)中国青年天使会官方家","HeadImgUrl":"/cgi-bin/mmwebwx-bin/webwxgetheadimg?seq=670397504&username=@@e2355db381dc46a77c0b95516d05e7486135cb6370d8a6af66925d89d50ec278&skey=","ContactFlag":2,"MemberCount":146,"MemberList":[{"Uin":0,"UserName":"@ecff4a7a86f23455dc42317269aa36ab","NickName":"童玮亮","AttrStatus":103423,"PYInitial":"","PYQuanPin":"","RemarkPYInitial":"","RemarkPYQuanPin":"","MemberStatus":0,"DisplayName":"","KeyWord":"dap","HeadImgUrl":"/cgi-bin/mmwebwx-bin/webwxgeticon?seq=0&username=@ecff4a7a86f23455dc42317269aa36ab&skey=@crypt_f9cec94b_f23a307a23231cfb5098faf91ff759ca&chatroomid=@4b8baa99bdfc354443711412126d2aaf"},{"Uin":0,"UserName":"@eac4377ecfd59e4321262f892177169f","NickName":"麦刚","AttrStatus":33674247,"PYInitial":"","PYQuanPin":"","RemarkPYInitial":"","RemarkPYQuanPin":"","MemberStatus":0,"DisplayName":"","KeyWord":"mai","HeadImgUrl":"/cgi-bin/mmwebwx-bin/webwxgeticon?seq=0&username=@eac4377ecfd59e4321262f892177169f&skey=@crypt_f9cec94b_f23a307a23231cfb5098faf91ff759ca&chatroomid=@4b8baa99bdfc354443711412126d2aaf"},{"Uin":0,"UserName":"@ad85207730aa94e006ddce28f74e6878","NickName":"田美坤Maggie","AttrStatus":112679,"PYInitial":"","PYQuanPin":"","RemarkPYInitial":"","RemarkPYQuanPin":"","MemberStatus":0,"DisplayName":"田美坤","KeyWord":"tia","HeadImgUrl":"/cgi-bin/mmwebwx-bin/webwxgeticon?seq=0&username=@ad85207730aa94e006ddce28f74e6878&skey=@crypt_f9cec94b_f23a307a23231cfb5098faf91ff759ca&chatroomid=@4b8baa99bdfc354443711412126d2aaf"},{"Uin":2351423900,"UserName":"@33cc239d22b20d56395bbbd0967b28b9","NickName":"周宏光","AttrStatus":327869,"PYInitial":"","PYQuanPin":"","RemarkPYInitial":"","RemarkPYQuanPin":"","MemberStatus":0,"DisplayName":"周宏光","KeyWord":"acc","HeadImgUrl":"/cgi-bin/mmwebwx-bin/webwxgeticon?seq=0&username=@33cc239d22b20d56395bbbd0967b28b9&skey=@crypt_f9cec94b_f23a307a23231cfb5098faf91ff759ca&chatroomid=@4b8baa99bdfc354443711412126d2aaf"},{"Uin":0,"UserName":"@5e77381e1e3b5641ddcee44670b6e83a","NickName":"牛文文","AttrStatus":100349,"PYInitial":"","PYQuanPin":"","RemarkPYInitial":"","RemarkPYQuanPin":"","MemberStatus":0,"DisplayName":"","KeyWord":"niu","HeadImgUrl":"/cgi-bin/mmwebwx-bin/webwxgeticon?seq=0&username=@5e77381e1e3b5641ddcee44670b6e83a&skey=@crypt_f9cec94b_f23a307a23231cfb5098faf91ff759ca&chatroomid=@4b8baa99bdfc354443711412126d2aaf"},{"Uin":0,"UserName":"@56941ef97f3e9c70af88667fdd613b44","NickName":"羊东 东方红酒窖","AttrStatus":33675367,"PYInitial":"","PYQuanPin":"","RemarkPYInitial":"","RemarkPYQuanPin":"","MemberStatus":0,"DisplayName":"","KeyWord":"Yan","HeadImgUrl":"/cgi-bin/mmwebwx-bin/webwxgeticon?seq=0&username=@56941ef97f3e9c70af88667fdd613b44&skey=@crypt_f9cec94b_f23a307a23231cfb5098faf91ff759ca&chatroomid=@4b8baa99bdfc354443711412126d2aaf"},{"Uin":0,"UserName":"@72c4767ce32db488871fdd1c27173b81","NickName":"李竹~英诺天使(此号已满)","AttrStatus":235261,"PYInitial":"","PYQuanPin":"","RemarkPYInitial":"","RemarkPYQuanPin":"","MemberStatus":0,"DisplayName":"","KeyWord":"liz","HeadImgUrl":"/cgi-bin/mmwebwx-bin/webwxgeticon?seq=0&username=@72c4767ce32db488871fdd1c27173b81&skey=@crypt_f9cec94b_f23a307a23231cfb5098faf91ff759ca&chatroomid=@4b8baa99bdfc354443711412126d2aaf"},{"Uin":0,"UserName":"@0b0e2eb9501ab2d84f9f800f6a0b4216","NickName":"周静彤 杨宁助理","AttrStatus":230885,"PYInitial":"","PYQuanPin":"","RemarkPYInitial":"","RemarkPYQuanPin":"","MemberStatus":0,"DisplayName":"","KeyWord":"zlo","HeadImgUrl":"/cgi-bin/mmwebwx-bin/webwxgeticon?seq=0&username=@0b0e2eb9501ab2d84f9f800f6a0b4216&skey=@crypt_f9cec94b_f23a307a23231cfb5098faf91ff759ca&chatroomid=@4b8baa99bdfc354443711412126d2aaf"},{"Uin":0,"UserName":"@4bfa767be0cd3fb78409b9735d1dcc57","NickName":"周哲 Jeremy","AttrStatus":33791995,"PYInitial":"","PYQuanPin":"","RemarkPYInitial":"","RemarkPYQuanPin":"","MemberStatus":0,"DisplayName":"","KeyWord":"zho","HeadImgUrl":"/cgi-bin/mmwebwx-bin/webwxgeticon?seq=0&username=@4bfa767be0cd3fb78409b9735d1dcc57&skey=@crypt_f9cec94b_f23a307a23231cfb5098faf91ff759ca&chatroomid=@4b8baa99bdfc354443711412126d2aaf"},{"Uin":0,"UserName":"@ad954bf2159a572b7743a5bc134739f4","NickName":"vicky张","AttrStatus":100477,"PYInitial":"","PYQuanPin":"","RemarkPYInitial":"","RemarkPYQuanPin":"","MemberStatus":0,"DisplayName":"","KeyWord":"hua","HeadImgUrl":"/cgi-bin/mmwebwx-bin/webwxgeticon?seq=0&username=@ad954bf2159a572b7743a5bc134739f4&skey=@crypt_f9cec94b_f23a307a23231cfb5098faf91ff759ca&chatroomid=@4b8baa99bdfc354443711412126d2aaf"}],"RemarkName":"","HideInputBarFlag":0,"Sex":0,"Signature":"","VerifyFlag":0,"OwnerUin":2351423900,"StarFriend":0,"AppAccountFlag":0,"Statues":0,"AttrStatus":0,"Province":"","City":"","Alias":"","SnsFlag":0,"UniFriend":0,"DisplayName":"","ChatRoomId":0,"KeyWord":"","EncryChatRoomId":"@4b8baa99bdfc354443711412126d2aaf","MMFromBatchGet":true,"MMOrderSymbol":"TONGZHIZHONGGUOQINGNIANTIANSHIHUIGUANFANGJIA","MMFromBatchget":true,"MMInChatroom":true}
  `)
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
59

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
60 61 62 63 64 65 66 67 68 69
  const EXPECTED = {
    id:             '@@e2355db381dc46a77c0b95516d05e7486135cb6370d8a6af66925d89d50ec278'
    , topic:        '(通知)中国青年天使会官方家'
    , encryId:      '@4b8baa99bdfc354443711412126d2aaf'
    , memberId1:    '@ad85207730aa94e006ddce28f74e6878'
    , memberNick1:  '田美坤'
    , memberId2:    '@72c4767ce32db488871fdd1c27173b81'
    , memberNick2:  '李竹~英诺天使(此号已满)'
    , ownerId:      '@33cc239d22b20d56395bbbd0967b28b9'
  }
70 71 72

  // Mock
  const mockContactGetter = function (id) {
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
73 74
    return new Promise((resolve, reject) => {
      if (id !== EXPECTED.id) return resolve({});
75
      setTimeout(() => {
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
76 77
        return resolve(RAW_OBJ)
      }, 10)
78 79 80
    })
  }

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
81
  const r = new Room(EXPECTED.id)
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
82

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
83
  t.is(r.id, EXPECTED.id, 'should set id/UserName right')
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
84 85

  await r.ready(mockContactGetter)
86

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
87 88
  t.is(r.get('id')      , EXPECTED.id, 'should set id/UserName')
  t.is(r.get('encryId') , EXPECTED.encryId, 'should set EncryChatRoomId')
89

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
90
  t.is(r.topic()        , EXPECTED.topic, 'should set topic/NickName')
91

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
92 93 94
  const contact1 = new Contact(EXPECTED.memberId1)
  const nick1 = r.nick(contact1)
  t.is(nick1, EXPECTED.memberNick1, 'should get nick1 from DisplayName')
95

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
96 97 98
  const contact2 = new Contact(EXPECTED.memberId2)
  const nick2 = r.nick(contact2)
  t.is(nick2, EXPECTED.memberNick2, 'should get nick2 from NickName because there is no DisplayName, ')
99

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
100
  t.truthy(r.has(contact1), 'should has contact1')
101 102
  const noSuchContact = new Contact('not exist id')
  t.false(r.has(noSuchContact), 'should has no this member')
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
103 104 105 106 107 108

  const owner = r.owner()
  t.true(owner === null || owner instanceof Contact, 'should get Contact instance for owner, or null')

  // wxApp hide uin for all contacts.
  // t.is(r.owner().id, EXPECTED.ownerId, 'should get owner right by OwnerUin & Uin')
109

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
110 111
  const contactA = r.member(EXPECTED.memberNick1)
  const contactB = r.member(EXPECTED.memberNick2)
112 113 114
  if (!contactA || !contactB) {
    throw new Error('no a or b')
  }
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
115 116 117 118 119
  t.is(contactA.id, EXPECTED.memberId1, 'should get the right id from nick 1')
  t.is(contactB.id, EXPECTED.memberId2, 'should get the right id from nick 2')

  const s = r.toString()
  t.is(typeof s, 'string', 'toString()')
120 121
})

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
122 123
test('Room static method', async t => {
  const room = await Room.find({
124
    topic: 'xxx'
125 126
  })

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
127
  t.truthy(room === null, 'should return null before login')
128

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
129
  const roomList = await Room.findAll({
130
    topic: 'yyy'
131 132
  })

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
133
  t.is(roomList.length, 0, 'should return empty array before login')
134

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
135
  // t.end()
136
})