Files
BYW-VoiceHub/tests/server/clear-aggregate-bindings-policy.test.ts
T

109 lines
3.4 KiB
TypeScript

import assert from 'node:assert/strict'
import test from 'node:test'
import { resolveAvatarSource } from '../../server/utils/user-avatar.ts'
test('清除聚合登录绑定:准确识别聚合登录身份并排除其他提供商', () => {
const identities = [
{ id: 1, userId: 101, provider: 'aggregate:qq', providerUserId: 'qq_123' },
{ id: 2, userId: 101, provider: 'aggregate:wx', providerUserId: 'wx_456' },
{ id: 3, userId: 101, provider: 'github', providerUserId: 'gh_789' },
{ id: 4, userId: 102, provider: 'aggregate', providerUserId: 'agg_999' },
{ id: 5, userId: 102, provider: 'casdoor', providerUserId: 'cas_888' },
{ id: 6, userId: 103, provider: 'google', providerUserId: 'goog_777' }
]
const isAggregate = (provider: string) => provider === 'aggregate' || provider.startsWith('aggregate:')
const targetIdentities = identities.filter((i) => isAggregate(i.provider))
const remainingIdentities = identities.filter((i) => !isAggregate(i.provider))
assert.equal(targetIdentities.length, 3)
assert.deepEqual(
targetIdentities.map((i) => i.id),
[1, 2, 4]
)
const affectedUserIds = Array.from(new Set(targetIdentities.map((i) => i.userId)))
assert.deepEqual(affectedUserIds, [101, 102])
assert.equal(remainingIdentities.length, 3)
assert.deepEqual(
remainingIdentities.map((i) => i.id),
[3, 5, 6]
)
})
test('清除聚合登录绑定:当用户头像来源为聚合登录且拥有其他第三方身份时,正确回退头像', () => {
const user = {
id: 101,
avatarProvider: 'aggregate:qq',
avatarProviderUserId: 'qq_123'
}
const allUserIdentities = [
{
id: 1,
userId: 101,
provider: 'aggregate:qq',
providerUserId: 'qq_123',
avatar: 'https://example.com/qq.png',
createdAt: new Date('2024-01-01')
},
{
id: 2,
userId: 101,
provider: 'github',
providerUserId: 'gh_789',
avatar: 'https://example.com/gh.png',
createdAt: new Date('2024-01-02')
}
]
const targetKeys = new Set(['aggregate:qq:qq_123'])
const remainingIdentities = allUserIdentities.filter(
(i) => !targetKeys.has(`${i.provider}:${i.providerUserId}`)
)
const isAvatarSourceDeleted =
user.avatarProvider &&
(user.avatarProvider === 'aggregate' ||
user.avatarProvider.startsWith('aggregate:') ||
targetKeys.has(`${user.avatarProvider}:${user.avatarProviderUserId}`))
assert.equal(isAvatarSourceDeleted, true)
const fallback = resolveAvatarSource(user, remainingIdentities)
assert.deepEqual(fallback, {
provider: 'github',
providerUserId: 'gh_789',
url: 'https://example.com/gh.png'
})
})
test('清除聚合登录绑定:当用户头像来源为聚合登录且无其他第三方身份时,头像源置为 null', () => {
const user = {
id: 102,
avatarProvider: 'aggregate',
avatarProviderUserId: 'agg_999'
}
const allUserIdentities = [
{
id: 4,
userId: 102,
provider: 'aggregate',
providerUserId: 'agg_999',
avatar: 'https://example.com/agg.png',
createdAt: new Date('2024-01-01')
}
]
const targetKeys = new Set(['aggregate:agg_999'])
const remainingIdentities = allUserIdentities.filter(
(i) => !targetKeys.has(`${i.provider}:${i.providerUserId}`)
)
const fallback = resolveAvatarSource(user, remainingIdentities)
assert.equal(fallback, null)
})