wechaty-puppet-official-account
Version:
Wechaty Puppet for WeChat Official Accounts
134 lines (110 loc) • 3.13 kB
text/typescript
import 'dotenv/config.js'
import { test } from 'tstest'
import cuid from 'cuid'
import ciInfo from 'ci-info'
import unirest from 'unirest'
import { getOaOptions } from '../../tests/fixtures/oa-options.js'
import { OfficialAccount } from './official-account.js'
/*
* refer to : https://github.com/wechaty/wechaty-puppet-official-account/issues/8
* try to fix global pr runtime test
*/
const isPR: boolean = !!(ciInfo.isPR)
void cuid // for testing
test('OfficialAccount smoke testing', async t => {
if (isPR) {
void t.skip('Skip for PR')
return
}
const WEBHOOK_PROXY_URL = [
'http://',
'wechaty-puppet-official-account',
'-',
cuid(),
// '.serverless.social',
'.localtunnel.chatie.io',
// '.test.localhost.localdomain',
].join('')
const oa = new OfficialAccount({
...getOaOptions(),
webhookProxyUrl : WEBHOOK_PROXY_URL,
})
await oa.start()
const future = new Promise(resolve => oa.once('message', resolve))
const PAYLOAD = {
Content : 'testing123',
CreateTime : '1596436942',
FromUserName : 'oOiiq59SLkf1AGuuTh668cxP8_Xs',
MsgId : '22855481560378379',
MsgType : 'text',
ToUserName : 'gh_27056d3d5d05',
}
const XML = `
<xml>
<ToUserName><![CDATA[${PAYLOAD.ToUserName}]]></ToUserName>
<FromUserName><![CDATA[${PAYLOAD.FromUserName}]]></FromUserName>
<CreateTime>${PAYLOAD.CreateTime}</CreateTime>
<MsgType><![CDATA[${PAYLOAD.MsgType}]]></MsgType>
<Content><![CDATA[${PAYLOAD.Content}]]></Content>
</xml>
`
const response = await unirest
.post(WEBHOOK_PROXY_URL)
// .headers({'Accept': 'application/json', 'Content-Type': 'application/json'})
.type('xml')
.send(XML)
t.equal(response.body, 'success', 'should get success response')
try {
await Promise.race([
future,
new Promise<void>((resolve, reject) => { void resolve; setTimeout(reject, 15000) }),
])
t.pass('should get a message emit event from oa instance')
} catch (e) {
t.fail('should not get timeout rejection')
}
// await new Promise(resolve => setTimeout(resolve, 100 * 1000))
await oa.stop()
})
test('updateAccessToken()', async t => {
if (isPR) {
await t.skip('Skip for PR')
return
}
const oa = new OfficialAccount({
...getOaOptions(),
port: 0,
})
await oa.start()
try {
t.ok(oa.accessToken, 'should get access token')
} catch (e) {
t.fail('should not be rejected')
}
await oa.stop()
})
test('sendCustomMessage()', async t => {
if (isPR) {
await t.skip('Skip for PR')
return
}
const oa = new OfficialAccount({
...getOaOptions(),
port: 0,
})
try {
await oa.start()
const ret = await oa.sendCustomMessage({
content: 'wechaty-puppet-official-account CI testing',
msgtype: 'text',
touser: 'oOiiq59SLkf1AGuuTh668cxP8_Xs',
})
t.not(ret, null, 'should get messageId')
} catch (e) {
console.error(e)
t.fail('should not be rejected')
} finally {
await oa.stop()
}
})