diff --git a/src/puppet-padchat/padchat-manager.spec.ts b/src/puppet-padchat/padchat-manager.spec.ts index 4727281f9cc956dde9e73c6b266c80f1223b10b9..d352a08fb747e43ee42ab6727410d5f1c6b93a56 100755 --- a/src/puppet-padchat/padchat-manager.spec.ts +++ b/src/puppet-padchat/padchat-manager.spec.ts @@ -28,34 +28,37 @@ test('smoke testing', async t => { t.skip('tbw') }) -test('bridge cache should be release and can be re-init again.', async t => { - const bridge = new PadchatManagerTest({ +test('PadchatManager() cache should be release and can be re-init again.', async t => { + const manager = new PadchatManagerTest({ memory : new MemoryCard(), token : 'mock token', endpoint : WECHATY_PUPPET_PADCHAT_ENDPOINT, }) try { - await bridge.initCache('fake-token', 'fake-self-id') - await bridge.releaseCache() - await bridge.initCache('fake-token', 'fake-self-id') - t.pass('bridge cache init/release/init successed.') + await manager.initCache('fake-token', 'fake-self-id') + await manager.releaseCache() + await manager.initCache('fake-token', 'fake-self-id') + await manager.releaseCache() + t.pass('PadchatManager() cache init/release/init successed.') } catch (e) { t.fail(e) } }) -test('bridge should can be restart() after a start()', async t => { - const bridge = new PadchatManager({ +test.only('PadchatManager() should can be restart() after a start()', async t => { + const manager = new PadchatManager({ memory : new MemoryCard(), token : 'mock token', endpoint : WECHATY_PUPPET_PADCHAT_ENDPOINT, }) try { - await bridge.start() - await bridge.stop() - await bridge.start() - t.pass('bridge start/restart successed.') + await manager.start() + await manager.stop() + await manager.start() + await manager.stop() + t.pass('PadchatManager() start/restart successed.') } catch (e) { + console.error(e) t.fail(e) } }) diff --git a/src/puppet-padchat/padchat-manager.ts b/src/puppet-padchat/padchat-manager.ts index 2abde6d4658db47d69e9529cae54b22a862bd1fe..45a9da82ed5053d4eea313d113550237f4f906ad 100644 --- a/src/puppet-padchat/padchat-manager.ts +++ b/src/puppet-padchat/padchat-manager.ts @@ -222,7 +222,7 @@ export class PadchatManager extends PadchatRpc { if (this.delayQueueExecutorSubscription) { this.delayQueueExecutorSubscription.unsubscribe() - this.delayQueueExecutor.unsubscribe() + this.delayQueueExecutorSubscription = undefined } else { log.warn('PuppetPadchatManager', 'stop() subscript not exist') } diff --git a/src/puppet-padchat/pure-function-helpers/is-type.spec.ts b/src/puppet-padchat/pure-function-helpers/is-type.spec.ts index e3ad5589e61adf85d5068913caeffc886e65589e..ea81d1d15ee716861bb6c9c70e44cff0b248bbdb 100755 --- a/src/puppet-padchat/pure-function-helpers/is-type.spec.ts +++ b/src/puppet-padchat/pure-function-helpers/is-type.spec.ts @@ -18,30 +18,27 @@ test('isRoomId()', async t => { const ROOM_ID = 'xxx@chatroom' const NOT_ROOM_ID = 'xxxxxxx' - t.ok(isRoomId(ROOM_ID), 'should return true for ROOM_ID') - t.notOk(isRoomId(NOT_ROOM_ID), 'should return false for ROOM_ID') - t.throws(() => isRoomId(undefined), 'should throw exception for undifined') - t.doesNotThrow(() => isRoomId('test'), 'should not throw for string') + t.equal(isRoomId(ROOM_ID) , true, 'should return true for ROOM_ID') + t.equal(isRoomId(NOT_ROOM_ID) , false, 'should return false for ROOM_ID') + t.equal(isRoomId(undefined) , false, 'should return false for undifined') }) test('isContactId()', async t => { const CONTACT_ID = 'sxxfdsa' const NOT_CONTACT_ID = 'fdsafasd@chatroom' - t.ok(isContactId(CONTACT_ID), 'should return true for CONTACT_ID') - t.notOk(isContactId(NOT_CONTACT_ID), 'should return false for CONTACT_ID') - t.throws(() => isContactId(undefined), 'should throw exception for undifined') - t.doesNotThrow(() => isContactId('test'), 'should not throw for string') + t.equal(isContactId(CONTACT_ID) , true, 'should return true for CONTACT_ID') + t.equal(isContactId(NOT_CONTACT_ID) , false, 'should return false for CONTACT_ID') + t.equal(isContactId(undefined) , false , 'should return false for undifined') }) test('isContactOfficialId()', async t => { const OFFICIAL_CONTACT_ID = 'gh_sxxfdsa' const NOT_OFFICIAL_CONTACT_ID = 'fdsafasd@chatroom' - t.ok(isContactOfficialId(OFFICIAL_CONTACT_ID), 'should return true for OFFICIAL_CONTACT_ID') - t.notOk(isContactOfficialId(NOT_OFFICIAL_CONTACT_ID), 'should return false for NOT_OFFICIAL_CONTACT_ID') - t.throws(() => isContactOfficialId(undefined), 'should throw exception for undifined') - t.doesNotThrow(() => isContactOfficialId('test'), 'should not throw for string') + t.equal(isContactOfficialId(OFFICIAL_CONTACT_ID) , true, 'should return true for OFFICIAL_CONTACT_ID') + t.equal(isContactOfficialId(NOT_OFFICIAL_CONTACT_ID), false, 'should return false for NOT_OFFICIAL_CONTACT_ID') + t.equal(isContactOfficialId(undefined) , false, 'should return false for undifined') }) test('isStrangerV1()', async t => { diff --git a/src/puppet-puppeteer/puppeteer-room.spec.ts b/src/puppet-puppeteer/puppeteer-room.spec.ts index 9c78926710e7a7e445ade4dbf111220df0065e85..c881ac2d1b6f3476c59974f98d0a7c90e274115a 100755 --- a/src/puppet-puppeteer/puppeteer-room.spec.ts +++ b/src/puppet-puppeteer/puppeteer-room.spec.ts @@ -48,6 +48,10 @@ class WechatyTest extends Wechaty { } } +class PuppetPuppeteerTest extends PuppetPuppeteer { + public id?: string = undefined +} + // tslint:disable:max-line-length const ROOM_RAW_PAYLOAD: WebRoomRawPayload = 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 CONTACT_RAW_PAYLOAD_DICT = JSON.parse(`{"@ad85207730aa94e006ddce28f74e6878":{ "UserName": "@ad85207730aa94e006ddce28f74e6878","NickName": "田美坤Maggie","RemarkName": "" },"@72c4767ce32db488871fdd1c27173b81":{ "UserName": "@72c4767ce32db488871fdd1c27173b81","NickName": "李竹~英诺天使(此号已满)","RemarkName": "" },"@ecff4a7a86f23455dc42317269aa36ab":{ "UserName": "@ecff4a7a86f23455dc42317269aa36ab","NickName": "童玮亮","RemarkName": "童玮亮备注" }}`) @@ -84,21 +88,18 @@ test('Room smok testing', async t => { const sandbox = sinon.createSandbox() - const puppet = new PuppetPuppeteer({ + const puppet = new PuppetPuppeteerTest({ memory: new MemoryCard(), }) - class WechatyTest extends Wechaty { - public initPuppetAccessory(puppet: PuppetPuppeteer) { - super.initPuppetAccessory(puppet) - } - } const wechaty = new WechatyTest({ puppet }) wechaty.initPuppetAccessory(puppet) sandbox.stub(puppet, 'contactRawPayload').callsFake(mockContactRoomRawPayload) sandbox.stub(puppet, 'roomRawPayload').callsFake(mockContactRoomRawPayload) + sandbox.stub(puppet, 'id').value('pretend-to-be-logined') + const room = wechaty.Room.load(ROOM_EXPECTED.id) await room.ready() diff --git a/src/puppet/puppet.ts b/src/puppet/puppet.ts index 9a0cf4189c297ae9012623c64efdf50371c4af72..fef81d090c6c09234d73b428dcdd8f5dcefb47ad 100644 --- a/src/puppet/puppet.ts +++ b/src/puppet/puppet.ts @@ -667,7 +667,7 @@ export abstract class Puppet extends EventEmitter implements Sayable { log.verbose('Puppet', 'roomMemberSearch(%s, %s)', roomId, JSON.stringify(query)) if (!this.id) { - throw new Error('no puppet.id') + throw new Error('no puppet.id. need puppet to be login-ed for a search') } /**