feat: prepare GoodBuddy 0.8.0
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
import { describe, expect, it, vi } from 'vitest'
|
||||
import {
|
||||
parseChannelEnvironment,
|
||||
startEnvironmentChannels
|
||||
} from './channel-env'
|
||||
|
||||
describe('channel environment bootstrap', () => {
|
||||
it('starts only complete credentials with a non-empty explicit allowlist', () => {
|
||||
expect(
|
||||
parseChannelEnvironment({
|
||||
GOODBUDDY_DINGTALK_CLIENT_ID: ' client-id ',
|
||||
GOODBUDDY_DINGTALK_CLIENT_SECRET: ' secret ',
|
||||
GOODBUDDY_DINGTALK_ALLOWED_SENDERS: ' USER-1,user-2 ',
|
||||
GOODBUDDY_DINGTALK_ALLOW_GROUPS: 'true',
|
||||
GOODBUDDY_WECOM_BOT_ID: 'bot-id',
|
||||
GOODBUDDY_WECOM_SECRET: 'wecom-secret'
|
||||
})
|
||||
).toEqual([
|
||||
{
|
||||
channel: 'dingtalk',
|
||||
clientId: 'client-id',
|
||||
clientSecret: 'secret',
|
||||
allowedSenderIds: ['user-1', 'user-2'],
|
||||
allowGroupMessages: true
|
||||
}
|
||||
])
|
||||
})
|
||||
|
||||
it('strictly parses booleans and comma-separated identities', () => {
|
||||
expect(() =>
|
||||
parseChannelEnvironment({
|
||||
GOODBUDDY_WECOM_ALLOW_GROUPS: 'TRUE'
|
||||
})
|
||||
).toThrow('必须是 true 或 false')
|
||||
expect(() =>
|
||||
parseChannelEnvironment({
|
||||
GOODBUDDY_WECOM_ALLOWED_SENDERS: 'user-1,,user-2'
|
||||
})
|
||||
).toThrow('包含空白身份')
|
||||
})
|
||||
|
||||
it('defaults groups off and contains asynchronous startup failures', async () => {
|
||||
const start = vi.fn(async () => {
|
||||
throw new Error('secret=must-not-escape')
|
||||
})
|
||||
const stop = vi.fn(async () => undefined)
|
||||
const onStartError = vi.fn()
|
||||
const createService = vi.fn(() => ({ start, stop }))
|
||||
const services = startEnvironmentChannels({
|
||||
env: {
|
||||
GOODBUDDY_WECOM_BOT_ID: 'bot-id',
|
||||
GOODBUDDY_WECOM_SECRET: 'secret',
|
||||
GOODBUDDY_WECOM_ALLOWED_SENDERS: 'user-1'
|
||||
},
|
||||
executor: vi.fn(async () => ({ status: 'completed' })),
|
||||
createWeComDriver: vi.fn(() => ({ channel: 'wecom' }) as never),
|
||||
createService,
|
||||
onStartError
|
||||
})
|
||||
|
||||
expect(services).toHaveLength(1)
|
||||
expect(createService).toHaveBeenCalledWith(
|
||||
expect.objectContaining({ channel: 'wecom' }),
|
||||
expect.any(Function),
|
||||
{
|
||||
allowedSenderIds: ['user-1'],
|
||||
allowGroupMessages: false
|
||||
}
|
||||
)
|
||||
await vi.waitFor(() => {
|
||||
expect(onStartError).toHaveBeenCalledWith(
|
||||
'wecom',
|
||||
'wecom 通道启动失败'
|
||||
)
|
||||
})
|
||||
expect(JSON.stringify(onStartError.mock.calls)).not.toContain(
|
||||
'must-not-escape'
|
||||
)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user