@juzi/wechaty
Version:
Wechaty is a RPA SDK for Chatbot Makers.
99 lines (78 loc) • 2.63 kB
text/typescript
import {
test,
sinon,
} from 'tstest'
import { function as FP } from 'fp-ts'
/**
* Huan(202201): must import `./wechaty-impl.js` first
*
* Or will throw error:
*
* ReferenceError: Cannot access 'wechatifyUserModuleMixin' before initialization
* at file:///home/huan/git/wechaty/wechaty/src/wechaty/wechaty-base.ts:58:3 *
*
* TODO: find out why
*/
import '../wechaty/wechaty-impl.js'
import {
gErrorMixin,
} from '../wechaty-mixins/mod.js'
import {
WechatySkeleton,
} from '../wechaty/wechaty-skeleton.js'
import {
pluginMixin,
PluginMixin,
ProtectedPropertyPluginMixin,
} from './plugin-mixin.js'
import { miscMixin } from './misc-mixin.js'
import { puppetMixin } from './puppet-mixin.js'
import { ioMixin } from './io-mixin.js'
import { wechatifyUserModuleMixin } from './wechatify-user-module-mixin.js'
test('ProtectedPropertyPluginMixin', async t => {
type NotExistInMixin = Exclude<ProtectedPropertyPluginMixin, keyof InstanceType<PluginMixin>>
type NotExistTest = NotExistInMixin extends never ? true : false
const noOneLeft: NotExistTest = true
t.ok(noOneLeft, 'should match Mixin properties for every protected property')
})
test('PluginMixin smoke testing', async t => {
const sandbox = sinon.createSandbox({
useFakeTimers: true,
})
const mixinBase = FP.pipe(
WechatySkeleton,
gErrorMixin,
ioMixin,
wechatifyUserModuleMixin,
puppetMixin,
miscMixin,
pluginMixin,
)
class PluginMixinTest extends mixinBase {
counter = 0
}
const Plugin = (wechaty: any) => {
wechaty.counter++
return () => wechaty.counter--
}
const pluginMixinTest = new PluginMixinTest({ puppet: '@juzi/wechaty-puppet-mock' })
let future
const unuse = pluginMixinTest.use(Plugin)
t.equal(pluginMixinTest.counter, 1, 'should call plugin function right after use before start')
future = pluginMixinTest.start()
t.equal(pluginMixinTest.counter, 1, 'should call plugin function right after start')
/**
* finish initializing the system
*/
await sandbox.clock.runAllAsync()
await future
// t.equal(pluginMixinTest.counter, 1, 'should call plugin function after start')
future = pluginMixinTest.stop()
await sandbox.clock.runAllAsync()
await future
t.equal(pluginMixinTest.counter, 1, 'should not clean plugin context after stop')
unuse()
t.equal(pluginMixinTest.counter, 0, 'should clean plugin context after call unuse()')
sandbox.restore()
})