184 lines
4.3 KiB
TypeScript
184 lines
4.3 KiB
TypeScript
import test from 'node:test'
|
|
import assert from 'node:assert/strict'
|
|
|
|
import {
|
|
canReuseAffiliateDashBindSnapshot,
|
|
isAffiliateDashBindSnapshotStale,
|
|
shouldRefreshAffiliateDashBindStateForSnapshot,
|
|
} from './kuaishou-cloud-claim-service.js'
|
|
|
|
test('isAffiliateDashBindSnapshotStale detects bind uuid that belongs to old uid', () => {
|
|
assert.equal(
|
|
isAffiliateDashBindSnapshotStale(
|
|
{
|
|
bindUuid: 'bind-old',
|
|
bindUrl: 'https://dash.example/bind-old',
|
|
expectedGameAccount: '111',
|
|
gameAccount: '111',
|
|
},
|
|
'222',
|
|
),
|
|
true,
|
|
)
|
|
})
|
|
|
|
test('isAffiliateDashBindSnapshotStale treats unknown bind uid as stale', () => {
|
|
assert.equal(
|
|
isAffiliateDashBindSnapshotStale(
|
|
{
|
|
bindUuid: 'bind-unknown',
|
|
bindUrl: 'https://dash.example/bind-unknown',
|
|
},
|
|
'222',
|
|
),
|
|
true,
|
|
)
|
|
})
|
|
|
|
test('isAffiliateDashBindSnapshotStale keeps current uid bind snapshot', () => {
|
|
assert.equal(
|
|
isAffiliateDashBindSnapshotStale(
|
|
{
|
|
bindUuid: 'bind-current',
|
|
bindUrl: 'https://dash.example/bind-current',
|
|
expectedGameAccount: '222',
|
|
gameAccount: '222',
|
|
},
|
|
'222',
|
|
),
|
|
false,
|
|
)
|
|
})
|
|
|
|
test('canReuseAffiliateDashBindSnapshot reuses pending current uid bind', () => {
|
|
assert.equal(
|
|
canReuseAffiliateDashBindSnapshot(
|
|
{
|
|
bindUuid: 'bind-current',
|
|
bindUrl: 'https://dash.example/bind-current',
|
|
expectedGameAccount: '222',
|
|
gameAccount: '222',
|
|
bound: false,
|
|
bindMismatch: false,
|
|
},
|
|
'222',
|
|
),
|
|
true,
|
|
)
|
|
})
|
|
|
|
test('canReuseAffiliateDashBindSnapshot refuses old uid bind', () => {
|
|
assert.equal(
|
|
canReuseAffiliateDashBindSnapshot(
|
|
{
|
|
bindUuid: 'bind-old',
|
|
bindUrl: 'https://dash.example/bind-old',
|
|
expectedGameAccount: '111',
|
|
gameAccount: '111',
|
|
bound: false,
|
|
bindMismatch: false,
|
|
},
|
|
'222',
|
|
),
|
|
false,
|
|
)
|
|
})
|
|
|
|
test('canReuseAffiliateDashBindSnapshot refuses bound snapshot without bound account', () => {
|
|
assert.equal(
|
|
canReuseAffiliateDashBindSnapshot(
|
|
{
|
|
bindUuid: 'bind-current',
|
|
bindUrl: 'https://dash.example/bind-current',
|
|
expectedGameAccount: '222',
|
|
gameAccount: '222',
|
|
bound: true,
|
|
boundAccount: '',
|
|
bindMismatch: false,
|
|
},
|
|
'222',
|
|
),
|
|
false,
|
|
)
|
|
})
|
|
|
|
test('canReuseAffiliateDashBindSnapshot reuses verified matching bound account', () => {
|
|
assert.equal(
|
|
canReuseAffiliateDashBindSnapshot(
|
|
{
|
|
bindUuid: 'bind-current',
|
|
bindUrl: 'https://dash.example/bind-current',
|
|
expectedGameAccount: '222',
|
|
gameAccount: '222',
|
|
bound: true,
|
|
boundAccount: '222',
|
|
bindMismatch: false,
|
|
},
|
|
'222',
|
|
),
|
|
true,
|
|
)
|
|
})
|
|
|
|
test('canReuseAffiliateDashBindSnapshot refuses mismatched bound account', () => {
|
|
assert.equal(
|
|
canReuseAffiliateDashBindSnapshot(
|
|
{
|
|
bindUuid: 'bind-current',
|
|
bindUrl: 'https://dash.example/bind-current',
|
|
expectedGameAccount: '222',
|
|
gameAccount: '222',
|
|
bound: true,
|
|
boundAccount: '333',
|
|
bindMismatch: false,
|
|
},
|
|
'222',
|
|
),
|
|
false,
|
|
)
|
|
})
|
|
|
|
test('shouldRefreshAffiliateDashBindStateForSnapshot keeps polling before submit', () => {
|
|
assert.equal(
|
|
shouldRefreshAffiliateDashBindStateForSnapshot({
|
|
taskStatus: 'waiting_binding',
|
|
orderStatus: 'paid',
|
|
submitStatus: '',
|
|
}),
|
|
true,
|
|
)
|
|
})
|
|
|
|
test('shouldRefreshAffiliateDashBindStateForSnapshot stops after submit starts', () => {
|
|
assert.equal(
|
|
shouldRefreshAffiliateDashBindStateForSnapshot({
|
|
taskStatus: 'redeeming',
|
|
orderStatus: 'delivering',
|
|
submitStatus: 'delivering',
|
|
}),
|
|
false,
|
|
)
|
|
})
|
|
|
|
test('shouldRefreshAffiliateDashBindStateForSnapshot stops after delivered', () => {
|
|
assert.equal(
|
|
shouldRefreshAffiliateDashBindStateForSnapshot({
|
|
taskStatus: 'redeemed',
|
|
orderStatus: 'delivered',
|
|
submitStatus: 'delivered',
|
|
}),
|
|
false,
|
|
)
|
|
})
|
|
|
|
test('shouldRefreshAffiliateDashBindStateForSnapshot stops for failed platform result', () => {
|
|
assert.equal(
|
|
shouldRefreshAffiliateDashBindStateForSnapshot({
|
|
taskStatus: 'retry_pending',
|
|
orderStatus: 'ship_failed',
|
|
submitStatus: '',
|
|
}),
|
|
false,
|
|
)
|
|
})
|