Files
Mock_Gateway_For_EWallet/tests/playerPromotionFulfillmentJourney.test.js
T
DESKTOP-U5J7A7B\Willtech007 633690b0c4 初始化
2026-10-12 17:55:59 +08:00

243 lines
6.6 KiB
JavaScript

const test = require('node:test')
const assert = require('node:assert/strict')
const { createMockContext } = require('../src/context/createMockContext')
const registerPlayerPromotionFulfillmentJourneyRoute = require('../src/routes/ewl/bal/playerPromotionFulfillmentJourney')
const registerPlayerPromotionFulfillmentJourneyDetailRoute = require('../src/routes/ewl/bal/playerPromotionFulfillmentJourneyDetail')
const { buildFulfillmentJourneyResponse } =
registerPlayerPromotionFulfillmentJourneyRoute.__internal
const { buildFulfillmentJourneyDetailResponse } =
registerPlayerPromotionFulfillmentJourneyDetailRoute.__internal
function withEnv(overrides, fn) {
const previousValues = new Map()
for (const [key, value] of Object.entries(overrides)) {
previousValues.set(key, process.env[key])
if (value === undefined) {
delete process.env[key]
} else {
process.env[key] = value
}
}
try {
return fn()
} finally {
for (const [key, value] of previousValues.entries()) {
if (value === undefined) {
delete process.env[key]
} else {
process.env[key] = value
}
}
}
}
function createRegisteredPostRoute(registerRoute, context) {
const registrations = []
const app = {
post(paths, handler) {
registrations.push({ paths, handler })
},
}
registerRoute({ app, context })
assert.equal(registrations.length, 1)
return registrations[0]
}
function invokeHandler(handler, body) {
const response = {
statusCode: 0,
payload: null,
}
const res = {
status(code) {
response.statusCode = code
return this
},
json(payload) {
response.payload = payload
return this
},
}
handler({ body }, res)
return response
}
test('summary 默认返回 accountNum/ruleId,并包含 Bally 风格字段', () =>
withEnv(
{
MOCK_REDEEMED_PROMOTION_RECORDING_ENABLED: 'false',
},
() => {
const context = createMockContext()
const response = buildFulfillmentJourneyResponse({
context,
requestBody: {
data: {
accountNum: '80010991',
ruleId: 71768024,
},
},
})
assert.equal(response.errorCode, '')
assert.equal(response.errorMsg, '')
assert.equal(response.accountNum, '80010991')
assert.equal(response.ruleId, 71768024)
assert.ok(Array.isArray(response.eligibleCriteriaList))
assert.ok(Array.isArray(response.journeyList))
assert.ok(response.eligibleCriteriaList.length > 0)
assert.ok(response.journeyList.length > 0)
assert.deepEqual(Object.keys(response.eligibleCriteriaList[0]).sort(), [
'attribute',
'operator',
'qualify',
'value',
'valueArray',
])
assert.deepEqual(Object.keys(response.journeyList[0]).sort(), [
'basePts',
'memberNo',
'periodEndTime',
'periodStartTime',
'progressId',
'ruleId',
'ruleName',
])
},
))
test('summary empty-result 开关打开时返回空数组', () =>
withEnv(
{
MOCK_REDEEMED_PROMOTION_RECORDING_ENABLED: 'false',
MOCK_PLAYERPROMOTION_FULFILLMENT_JOURNEY_EMPTY_RESULT: 'true',
},
() => {
const context = createMockContext()
const response = buildFulfillmentJourneyResponse({
context,
requestBody: {
data: {
accountNum: '80010991',
ruleId: 71768024,
},
},
})
assert.deepEqual(response.eligibleCriteriaList, [])
assert.deepEqual(response.journeyList, [])
},
))
test('detail 业务错误时保留 errorCode/errorMsg/accountNum/ruleId', () =>
withEnv(
{
MOCK_REDEEMED_PROMOTION_RECORDING_ENABLED: 'false',
MOCK_PLAYERPROMOTION_FULFILLMENT_JOURNEY_DETAIL_ERROR_CODE: 'BIZ_1001',
MOCK_PLAYERPROMOTION_FULFILLMENT_JOURNEY_DETAIL_ERROR_MSG: 'rule is not active',
},
() => {
const context = createMockContext()
const response = buildFulfillmentJourneyDetailResponse({
context,
requestBody: {
data: {
accountNum: '80010991',
ruleId: 71768024,
},
},
})
assert.equal(response.errorCode, 'BIZ_1001')
assert.equal(response.errorMsg, 'rule is not active')
assert.equal(response.accountNum, '80010991')
assert.equal(response.ruleId, 71768024)
assert.ok(Array.isArray(response.journeyList))
assert.deepEqual(Object.keys(response.journeyList[0]).sort(), [
'areaCode',
'ballyTranId',
'basePts',
'casinoCode',
'deptCode',
'earnType',
'gameCode',
'gamingDt',
'locnCode',
'memberNo',
'periodEndTime',
'periodStartTime',
'postDtm',
'progressId',
'ruleId',
'ruleName',
])
},
))
test('summary route 会注册正确路径并返回 200 JSON', () =>
withEnv(
{
MOCK_REDEEMED_PROMOTION_RECORDING_ENABLED: 'false',
},
() => {
const context = createMockContext()
const registration = createRegisteredPostRoute(
registerPlayerPromotionFulfillmentJourneyRoute,
context,
)
assert.deepEqual(registration.paths, [
'/ewl/promotion/v1/playerpromotion/fulfillmentJourney',
'/ewl/bal/v1/playerpromotion/fulfillmentJourney',
])
const response = invokeHandler(registration.handler, {
data: {
accountNum: '80010991',
ruleId: 71768024,
},
})
assert.equal(response.statusCode, 200)
assert.equal(response.payload.accountNum, '80010991')
assert.equal(response.payload.ruleId, 71768024)
},
))
test('detail route 会注册正确路径并返回 200 JSON', () =>
withEnv(
{
MOCK_REDEEMED_PROMOTION_RECORDING_ENABLED: 'false',
MOCK_PLAYERPROMOTION_FULFILLMENT_JOURNEY_DETAIL_ERROR_CODE: 'BIZ_1001',
},
() => {
const context = createMockContext()
const registration = createRegisteredPostRoute(
registerPlayerPromotionFulfillmentJourneyDetailRoute,
context,
)
assert.deepEqual(registration.paths, [
'/ewl/promotion/v1/playerpromotion/fulfillmentJourneyDetail',
'/ewl/bal/v1/playerpromotion/fulfillmentJourneyDetail',
])
const response = invokeHandler(registration.handler, {
data: {
accountNum: '80010991',
ruleId: 71768024,
},
})
assert.equal(response.statusCode, 200)
assert.equal(response.payload.errorCode, 'BIZ_1001')
assert.equal(response.payload.accountNum, '80010991')
},
))