初始化
This commit is contained in:
@@ -0,0 +1,242 @@
|
||||
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')
|
||||
},
|
||||
))
|
||||
Reference in New Issue
Block a user