243 lines
6.6 KiB
JavaScript
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')
|
|
},
|
|
))
|