mirror of
https://wget.la/https://github.com/Wxw-Gu/WechatExplorer
synced 2026-10-06 22:00:49 +08:00
feat: mac发送能力重构为libtmwechat
- 发送改走本地host, 在微信登录时触发 - 删除旧OneBot及对应UI控制面
This commit is contained in:
@@ -0,0 +1,138 @@
|
||||
import { describe, expect, it, vi } from 'vitest'
|
||||
|
||||
vi.mock('electron', () => ({
|
||||
app: {
|
||||
getAppPath: () => '/fixture/app',
|
||||
isPackaged: false
|
||||
}
|
||||
}))
|
||||
|
||||
import {
|
||||
deriveMacWechatSenderStatus,
|
||||
shouldClearWechatRestartRequired
|
||||
} from '../../src/main/services/mac-wechat-runtime-manager'
|
||||
import type {
|
||||
MacWechatBindingStatus,
|
||||
MacWechatRuntimeManifest,
|
||||
MacWechatRuntimeSnapshot
|
||||
} from '../../src/shared/personal-wechat-mac-runtime'
|
||||
|
||||
const AGENT_HASH = 'a'.repeat(64)
|
||||
const ADDRESS_PROFILE_HASH = 'b'.repeat(64)
|
||||
|
||||
const manifest: MacWechatRuntimeManifest = {
|
||||
runtime: 'tm-wechat-native',
|
||||
version: '0.1.0',
|
||||
platform: 'darwin-arm64',
|
||||
architecture: 'arm64',
|
||||
protocolVersion: 1,
|
||||
buildCommit: 'test',
|
||||
tmSendSourceSha256: AGENT_HASH,
|
||||
addressProfileSha256: ADDRESS_PROFILE_HASH,
|
||||
supportedWechatVersions: ['4.1.11.53'],
|
||||
capabilities: ['text', 'image', 'voice']
|
||||
}
|
||||
|
||||
function snapshot(overrides: Partial<MacWechatRuntimeSnapshot> = {}): MacWechatRuntimeSnapshot {
|
||||
return {
|
||||
lifecycle: 'online',
|
||||
wechatRestartRequired: false,
|
||||
endpoint: 'http://127.0.0.1:4290',
|
||||
port: 4290,
|
||||
manifest,
|
||||
...overrides
|
||||
}
|
||||
}
|
||||
|
||||
function binding(overrides: Partial<MacWechatBindingStatus> = {}): MacWechatBindingStatus {
|
||||
return {
|
||||
runtime: true,
|
||||
hostPid: 123,
|
||||
runtimeState: 'ready',
|
||||
runtimeVersion: 'tm-wechat-runtime/0.1.0',
|
||||
embeddedAgentSha256: AGENT_HASH,
|
||||
embeddedAddressProfileSha256: ADDRESS_PROFILE_HASH,
|
||||
wechatRunning: true,
|
||||
wechatPid: 456,
|
||||
wechatVersion: '4.1.11.53',
|
||||
supported: true,
|
||||
bindingState: 'ready',
|
||||
bound: true,
|
||||
boundWechatPid: 456,
|
||||
sessionAttached: true,
|
||||
scriptLoaded: true,
|
||||
sendContextReady: true,
|
||||
canSendText: true,
|
||||
canSendImage: true,
|
||||
canSendVoice: true,
|
||||
attachCount: 1,
|
||||
...overrides
|
||||
}
|
||||
}
|
||||
|
||||
describe('macOS native runtime sender status mapping', () => {
|
||||
it('exposes capabilities only for a ready binding with matching runtime identity', () => {
|
||||
expect(
|
||||
deriveMacWechatSenderStatus({ snapshot: snapshot(), binding: binding(), manifest })
|
||||
).toMatchObject({
|
||||
state: 'online',
|
||||
runtimeReady: true,
|
||||
attachReady: true,
|
||||
baseAddressReady: true,
|
||||
messageListenerReady: true,
|
||||
canSend: true,
|
||||
canSendText: true,
|
||||
canSendImage: true,
|
||||
canSendVoice: true
|
||||
})
|
||||
})
|
||||
|
||||
it('rejects a live host whose embedded runtime identity does not match the manifest', () => {
|
||||
const status = deriveMacWechatSenderStatus({
|
||||
snapshot: snapshot(),
|
||||
binding: binding({ embeddedAgentSha256: 'b'.repeat(64) }),
|
||||
manifest
|
||||
})
|
||||
|
||||
expect(status).toMatchObject({
|
||||
state: 'error',
|
||||
runtimeReady: false,
|
||||
canSend: false,
|
||||
canSendText: false,
|
||||
canSendImage: false,
|
||||
canSendVoice: false
|
||||
})
|
||||
expect(status.error).toContain('Native Runtime 不一致')
|
||||
})
|
||||
|
||||
it('maps a stale binding to a rebind-required stopped state', () => {
|
||||
expect(
|
||||
deriveMacWechatSenderStatus({
|
||||
snapshot: snapshot(),
|
||||
binding: binding({ bindingState: 'stale', sendContextReady: false }),
|
||||
manifest
|
||||
})
|
||||
).toMatchObject({
|
||||
state: 'stopped',
|
||||
message: '检测到微信已重启,请重新绑定',
|
||||
canSend: false
|
||||
})
|
||||
})
|
||||
|
||||
it('keeps restart-required errors above otherwise ready binding state', () => {
|
||||
expect(
|
||||
deriveMacWechatSenderStatus({
|
||||
snapshot: snapshot({ wechatRestartRequired: true }),
|
||||
binding: binding(),
|
||||
manifest
|
||||
})
|
||||
).toMatchObject({ state: 'error', canSend: false })
|
||||
})
|
||||
|
||||
it('clears restart-required only after WeChat has a different positive pid', () => {
|
||||
expect(shouldClearWechatRestartRequired(100, 200)).toBe(true)
|
||||
expect(shouldClearWechatRestartRequired(100, 100)).toBe(false)
|
||||
expect(shouldClearWechatRestartRequired(0, 200)).toBe(false)
|
||||
expect(shouldClearWechatRestartRequired(100, 0)).toBe(false)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user