提交 12a81eb8 编写于 作者: Huan (李卓桓)'s avatar Huan (李卓桓)

Class Room bug fix & unit test

上级 7c2e8e60
......@@ -68,8 +68,25 @@ class Room extends EventEmitter{
})
}
owner() { return this.obj.memberList && this.obj.memberList[0] }
topic() { return UtilLib.plainText(this.obj.topic) }
owner() {
const ownerUin = this.obj.ownerUin
let memberList = this.obj.memberList || []
let user = Config.puppetInstance()
.user
if (user && user.get('uin') === ownerUin) {
return user
}
memberList = memberList.filter(m => m.Uin === ownerUin)
if (memberList.length > 0) {
return memberList[0]
}
return null
}
get(prop) { return this.obj[prop] || this.dirtyObj[prop] }
parse(rawObj) {
......@@ -77,9 +94,11 @@ class Room extends EventEmitter{
return {}
}
return {
id: rawObj.UserName
, encryId: rawObj.EncryChatRoomId // ???
, topic: rawObj.NickName
id: rawObj.UserName
, encryId: rawObj.EncryChatRoomId // ???
, topic: rawObj.NickName
, ownerUin: rawObj.OwnerUin
, memberList: this.parseMemberList(rawObj.MemberList)
, nickMap: this.parseNickMap(rawObj.MemberList)
}
......@@ -95,7 +114,9 @@ class Room extends EventEmitter{
parseNickMap(memberList) {
const nickMap = {}
if (memberList && memberList.map) {
memberList.forEach(m => nickMap[m.UserName] = m.DisplayName)
memberList.forEach(m => {
nickMap[m.UserName] = m.DisplayName || m.NickName
})
}
return nickMap
}
......@@ -172,7 +193,8 @@ class Room extends EventEmitter{
Config.puppetInstance().roomTopic(this, newTopic)
return newTopic
}
return this.get('topic')
// return this.get('topic')
return UtilLib.plainText(this.obj.topic)
}
nick(contact) {
......
......@@ -13,61 +13,106 @@ import {
Config.puppetInstance(new PuppetWeb())
// Room.attach(new PuppetWeb())
test('Room smoke testing', async t => {
// 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 => {
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}
`)
const UserName = '@0bb3e4dd746fdbd4a80546aef66f4085'
const NickName = 'Nick Name Test'
const EncryChatRoomId = '123456abcdef'
const EXPECTED = {
id: '@@e2355db381dc46a77c0b95516d05e7486135cb6370d8a6af66925d89d50ec278'
, topic: '(通知)中国青年天使会官方家'
, encryId: '@4b8baa99bdfc354443711412126d2aaf'
, memberId1: '@ad85207730aa94e006ddce28f74e6878'
, memberNick1: '田美坤'
, memberId2: '@72c4767ce32db488871fdd1c27173b81'
, memberNick2: '李竹~英诺天使(此号已满)'
, ownerId: '@33cc239d22b20d56395bbbd0967b28b9'
}
// Mock
const mockContactGetter = function (id) {
return new Promise((resolve,reject) => {
if (id!=UserName) return resolve({});
if (id!=EXPECTED.id) return resolve({});
setTimeout(() => {
return resolve({
UserName: UserName
, NickName: NickName
, EncryChatRoomId: EncryChatRoomId
})
}, 200)
return resolve(RAW_OBJ)
}, 10)
})
}
const r = new Room(UserName)
const r = new Room(EXPECTED.id)
t.is(r.id, UserName, 'id/UserName right')
t.is(r.id, EXPECTED.id, 'should set 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')
t.is(r.get('id') , EXPECTED.id, 'should set id/UserName')
t.is(r.get('encryId') , EXPECTED.encryId, 'should set EncryChatRoomId')
const s = r.toString()
t.is(typeof s, 'string', 'toString()')
// })
// .catch(e => t.fail('ready() rejected: ' + e))
// .then(_ => t.end()) // test end
})
/*
const rawData = JSON.parse('{"MsgId":"1120003476579027592","FromUserName":"@@4aa0ae1e1ebc568b613fa43ce93b478df0339f73340d87083822c2016d2e53d9","ToUserName":"@94e4b0db79ccc844d7bb4a2b1efac3ff","MsgType":1,"Content":"@9ad4ba13fac52c55d323521b67f7cc39:<br/>[Strong]","Status":3,"ImgStatus":1,"CreateTime":1462889712,"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":1120003476579027600,"MMPeerUserName":"@@4aa0ae1e1ebc568b613fa43ce93b478df0339f73340d87083822c2016d2e53d9","MMDigest":"感恩的心 ","MMIsSend":false,"MMIsChatRoom":true,"MMUnread":false,"LocalID":"1120003476579027592","ClientMsgId":"1120003476579027592","MMActualContent":"HTML-CODE","MMActualSender":"@9ad4ba13fac52c55d323521b67f7cc39","MMDigestTime":"22:15","MMDisplayTime":1462889712,"MMTime":"22:15","_h":126,"_index":0,"_offsetTop":0,"$$hashKey":"0QK", "MemberList": [{"Uin":0,"UserName":"@94e4b0db79ccc844d7bb4a2b1efac3ff","NickName":"李卓桓","AttrStatus":37996631,"PYInitial":"","PYQuanPin":"","RemarkPYInitial":"","RemarkPYQuanPin":"","MemberStatus":0,"DisplayName":"北京阿布","KeyWord":"liz"},{"Uin":0,"UserName":"@34887973779b7dd827366a31772cd83df223e6f71d9a79e44fe619aafe2901a4","NickName":"Tiger","AttrStatus":4292711,"PYInitial":"","PYQuanPin":"","RemarkPYInitial":"","RemarkPYQuanPin":"","MemberStatus":0,"DisplayName":"DisplayNameTiger","KeyWord":"","HeadImgUrl":"/cgi-bin/mmwebwx-bin/webwxgeticon?seq=0&username=@34887973779b7dd827366a31772cd83df223e6f71d9a79e44fe619aafe2901a4&skey=@crypt_f9cec94b_8517b7f9fec85f5a78a804c4f45f5536&chatroomid=@7b3dcd218431d79045cda3493c3179ae"}]}')
t.is(r.topic() , EXPECTED.topic, 'should set topic/NickName')
const EXPECTED = {
id: '1120003476579027592'
, from: '@0bb3e4dd746fdbd4a80546aef66f4085'
}
const g = new Room(rawData)
const contact1 = new Contact(EXPECTED.memberId1)
const nick1 = r.nick(contact1)
t.is(nick1, EXPECTED.memberNick1, 'should get nick1 from DisplayName')
t.is(g.id , EXPECTED.id , 'id right')
t.is(g.from.id , EXPECTED.from , 'from right')
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, ')
const s = g.toString()
t.is(typeof s, 'string', 'toString()')
t.truthy(r.has(contact1), 'should has contact1')
t.falsy(r.has(new Contact('not exist id'), 'should has no this member'))
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')
t.end()
const contactA = r.member(EXPECTED.memberNick1)
const contactB = r.member(EXPECTED.memberNick2)
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()')
})
*/
test('Room static method', async t => {
const room = await Room.find({
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册