This commit is contained in:
2026-10-12 18:04:16 +08:00
parent b958813406
commit f8732d3848
6 changed files with 241 additions and 2296 deletions
+91
View File
@@ -0,0 +1,91 @@
MOCK_GATEWAY_HOST=127.0.0.1
MOCK_GATEWAY_PORT=19090
# EDIP token mock
MOCK_TOKEN_PERIOD_SECONDS=3600
MOCK_EDIP_FORCE_ERROR_CODE=
MOCK_EDIP_FORCE_ERROR_MSG=
MOCK_EDIP_REFRESH_TOKEN_MUST_EXIST=false
# Bally validate mock
MOCK_VALIDATE_RESULT=SUCCESS
MOCK_VALIDATE_FAIL_PINS=0000
# Member profile / image mock
MOCK_MEMBER_FIRST_NAME=MOCK
MOCK_MEMBER_LAST_NAME=MEMBER
MOCK_MEMBER_TIER=MOCK
MOCK_MEMBER_EBONUS=0
MOCK_MEMBER_PHONE=+85312345678
MOCK_MEMBER_BIRTHDAY=1990-01-01
MOCK_MEMBER_GENDER=M
MOCK_MEMBER_IMAGE=
# Tier points mock
MOCK_PLAYER_EARN_POINTS=0
# Promotions mock
# 允许使用抓包文件(文件可包含前置文本,JSON 从第一个 "{" 开始解析)
MOCK_PROMOTION_CAPTURE_FILE=./fixtures/promotions.capture.800048718.json
MOCK_PROMOTION_MAX_ITEMS=30
MOCK_PROMOTIONS_REDEEMED_FIXTURE_FILE=./e.p/promotions-redeemed.json
MOCK_REDEEMED_PROMOTION_DETAIL_INCLUDE_DEFAULT_RECORD=false
# Task 10766 scenario mock
# 开启后,accountNum=MOCK_TASK_10766_ACCOUNT_NUM 会返回固定 CNY Promotion,
# 且 /ewl/bal/v1/playerpromotion/redeem 稳定返回 "Prize definition not found" 场景
MOCK_TASK_10766_ENABLED=true
MOCK_TASK_10766_ACCOUNT_NUM=80010766
MOCK_TASK_10766_PROMOTION_CAPTURE_FILE=./fixtures/promotions.capture.10766.json
MOCK_TASK_10766_REDEEM_ERROR_CODE=EWALLET_HTTP_ERROR
MOCK_TASK_10766_REDEEM_ERROR_MSG=ewallet connection failed: 404 NOT_FOUND, {"success":false,"message":"Prize definition not found"}
MOCK_TASK_10766_REDEEM_RESULT=false
# Task 10852 scenario mock
# 开启后,accountNum=80010852 会固定返回可点击的 entitled 双 outcome Promotion,便于直接验证 targetPrizes 多项场景
MOCK_TASK_10852_ENABLED=true
MOCK_TASK_10852_ACCOUNT_NUM=80010852
# Task 10852: Point the dedicated member to a minimal entitled fixture so Redeem stays enabled only for this account.
MOCK_TASK_10852_PROMOTION_CAPTURE_FILE=./fixtures/promotions.capture.10852.json
MOCK_TASK_10852_MEMBER_EBONUS=188
MOCK_PROMOTION_REDEMPTION_BRIDGE_ENABLED=true
MOCK_PROMOTION_REDEMPTION_BRIDGE_BASE_URL=http://127.0.0.1:8080
MOCK_PROMOTION_REDEMPTION_BRIDGE_LOGIN_USERNAME=admin
MOCK_PROMOTION_REDEMPTION_BRIDGE_LOGIN_PASSWORD=admin
MOCK_PROMOTION_REDEMPTION_BRIDGE_TIMEOUT_MS=60000
MOCK_PROMOTION_REDEMPTION_INITIATE_SOURCE=EDIP_MINI_KIOSK
MOCK_PROMOTION_REDEMPTION_SOURCE_BUCKET=m-comp
MOCK_PROMOTION_REDEMPTION_ID_START=
# LDAP mock (Simple Bind + Search)
MOCK_LDAP_ENABLED=true
MOCK_LDAP_HOST=0.0.0.0
MOCK_LDAP_PORT=1389
MOCK_LDAP_BASE_DN=dc=macausjm-glp,dc=com
MOCK_LDAP_MANAGER_DN=cn=s-cicd-app,OU=ServiceAccount,dc=macausjm-glp,dc=com
MOCK_LDAP_GROUP_BASE_DN=OU=SecurityGroups,OU=GLPUsers,dc=macausjm-glp,dc=com
# 开启后:LDAP 任意用户名/密码放行(用于前后端联调)
# 注意:若需按账号区分用户组(如 admin/admin2),请关闭该模式
MOCK_LDAP_ALLOW_ANY_USER_MODE=false
MOCK_LDAP_ALLOW_ANY_USER_OU=OU=GLPUsers
MOCK_LDAP_ALLOW_ANY_USER_GROUP_CN=SG-EWALLET-ADMIN
MOCK_LDAP_ALLOW_ANY_USER_MAIL_DOMAIN=macausjm-glp.com
# 留空表示 manager bind 允许任意密码(便于 Backend 仅改 LDAP_URL 即可接入)
MOCK_LDAP_MANAGER_PASSWORD=
# Default LDAP user (used when MOCK_LDAP_USERS_JSON is empty)
MOCK_LDAP_DEFAULT_USER_SAMACCOUNTNAME=mock.user
MOCK_LDAP_DEFAULT_USER_DN=cn=mock.user,OU=GLPUsers,dc=macausjm-glp,dc=com
MOCK_LDAP_DEFAULT_USER_PASSWORD=mock-user-password
MOCK_LDAP_DEFAULT_USER_CN=Mock User
MOCK_LDAP_DEFAULT_USER_MAIL=mock.user@macausjm-glp.com
MOCK_LDAP_DEFAULT_USER_MEMBER_OF=cn=SG-EWALLET-ADMIN,OU=SecurityGroups,OU=GLPUsers,dc=macausjm-glp,dc=com
# Optional JSON array to override LDAP users
# Format:
# MOCK_LDAP_USERS_JSON=[{"sAMAccountName":"alice","dn":"cn=alice,OU=GLPUsers,dc=macausjm-glp,dc=com","password":"pass","cn":"Alice","mail":"alice@macausjm-glp.com","memberOf":["cn=SG-APP-EWALLET-SUPER-ADMIN,OU=SecurityGroups,OU=GLPUsers,dc=macausjm-glp,dc=com"]}]
# 注意:组名(CN)必须与后端数据库 roles 表中的 code 完全一致,否则登录后权限为空
MOCK_LDAP_USERS_JSON=[{"sAMAccountName":"admin","dn":"cn=admin,OU=GLPUsers,dc=macausjm-glp,dc=com","password":"admin","cn":"Admin","mail":"admin@macausjm-glp.com","memberOf":["cn=SG-EWALLET-ADMIN,OU=SecurityGroups,OU=GLPUsers,dc=macausjm-glp,dc=com"]},{"sAMAccountName":"admin2","dn":"cn=admin2,OU=GLPUsers,dc=macausjm-glp,dc=com","password":"admin2","cn":"Admin Two","mail":"admin2@macausjm-glp.com","memberOf":["cn=SG-EWALLET-ADMIN,OU=SecurityGroups,OU=GLPUsers,dc=macausjm-glp,dc=com"]},{"sAMAccountName":"admin3","dn":"cn=admin3,OU=GLPUsers,dc=macausjm-glp,dc=com","password":"admin3","cn":"Admin Three","mail":"admin3@macausjm-glp.com","memberOf":["cn=SG-EWALLET-OPERATOR,OU=SecurityGroups,OU=GLPUsers,dc=macausjm-glp,dc=com"]},{"sAMAccountName":"batch.test","dn":"cn=batch.test,OU=GLPUsers,dc=macausjm-glp,dc=com","password":"batch.test","cn":"Batch Test","mail":"batch.test@macausjm-glp.com","memberOf":["cn=SG-EWALLET-BATCH-OPERATION-EDITOR,OU=SecurityGroups,OU=GLPUsers,dc=macausjm-glp,dc=com"]},{"sAMAccountName":"batch.approver","dn":"cn=batch.approver,OU=GLPUsers,dc=macausjm-glp,dc=com","password":"batch.approver","cn":"Batch Approver","mail":"batch.approver@macausjm-glp.com","memberOf":["cn=SG-EWALLET-BATCH-OPERATION-APPROVER,OU=SecurityGroups,OU=GLPUsers,dc=macausjm-glp,dc=com"]}]
+133
View File
@@ -0,0 +1,133 @@
MOCK_GATEWAY_HOST=127.0.0.1
MOCK_GATEWAY_PORT=19090
# EDIP token mock
MOCK_TOKEN_PERIOD_SECONDS=3600
MOCK_EDIP_FORCE_ERROR_CODE=
MOCK_EDIP_FORCE_ERROR_MSG=
MOCK_EDIP_REFRESH_TOKEN_MUST_EXIST=false
MOCK_TOKEN_GET_FIXTURE_FILE=./fixtures/token.get.json
# Bally validate mock
MOCK_VALIDATE_RESULT=SUCCESS
MOCK_VALIDATE_FAIL_PINS=0000
# Bally external mock routes
MOCK_TEAM_HIERARCHY_STATUS=true
MOCK_TEAM_HIERARCHY_ERROR_CODE=
MOCK_TEAM_HIERARCHY_MESSAGE=Mock team hierarchy
MOCK_TEAM_HIERARCHY_ROLE=SUPPORT
MOCK_TEAM_HIERARCHY_DEPARTMENT=IT
MOCK_TEAM_HIERARCHY_TAGS=MOCK
MOCK_PRIZE_REDEEM_ERROR_CODE=
MOCK_PRIZE_REDEEM_ERROR_MSG=
MOCK_PRIZE_REDEEM_VALUE=
MOCK_POINT_VOID_ERROR_CODE=
MOCK_POINT_VOID_ERROR_MSG=
MOCK_POINT_VOID_RESULT=true
MOCK_REDEEMED_PROMOTION_DETAIL_ERROR_CODE=
MOCK_REDEEMED_PROMOTION_DETAIL_ERROR_MSG=
MOCK_REDEEMED_PROMOTION_DETAIL_INCLUDE_DEFAULT_RECORD=true
MOCK_REDEEMED_PROMOTION_DETAIL_VOIDED=false
MOCK_PLAYERPROMOTION_REDEEM_ERROR_CODE=
MOCK_PLAYERPROMOTION_REDEEM_ERROR_MSG=
MOCK_PLAYERPROMOTION_REDEEM_RESULT=true
MOCK_PROMOTION_REDEMPTION_BRIDGE_ENABLED=false
MOCK_PROMOTION_REDEMPTION_BRIDGE_BASE_URL=http://127.0.0.1:8080
MOCK_PROMOTION_REDEMPTION_BRIDGE_LOGIN_USERNAME=
MOCK_PROMOTION_REDEMPTION_BRIDGE_LOGIN_PASSWORD=mock-password
MOCK_PROMOTION_REDEMPTION_BRIDGE_TIMEOUT_MS=30000
MOCK_PROMOTION_REDEMPTION_INITIATE_SOURCE=PROMOTION_MODULE
MOCK_PROMOTION_REDEMPTION_SOURCE_BUCKET=m-comp
# 留空时默认使用当前 Unix 秒级时间戳作为 seed,且必须保持在 Backend int 范围内
MOCK_PROMOTION_REDEMPTION_ID_START=
MOCK_REDEEMEDPROMOTION_VOID_ERROR_CODE=
MOCK_REDEEMEDPROMOTION_VOID_ERROR_MSG=
MOCK_REDEEMEDPROMOTION_VOID_RESULT=true
# Prize redemptions sync mock
MOCK_PRIZE_REDEMPTIONS_SYNC_SUCCESS=true
MOCK_PRIZE_REDEMPTIONS_SYNC_MESSAGE=Mock prize redemptions sync success
# Member profile / image mock
MOCK_MEMBER_PROFILE_FIXTURE_FILE=./fixtures/member.profile.json
MOCK_MEMBER_PROFILE_FORCE_STATUS_CODE=
MOCK_MEMBER_PROFILE_FORCE_ERROR_CODE=
MOCK_MEMBER_PROFILE_FORCE_ERROR_MSG=Mock member profile error
MOCK_MEMBER_PROFILE_DELAY_MS=0
MOCK_MEMBER_FIRST_NAME=MOCK
MOCK_MEMBER_LAST_NAME=MEMBER
MOCK_MEMBER_TIER=MOCK
MOCK_MEMBER_EBONUS=0
MOCK_MEMBER_PHONE=12345678
MOCK_MEMBER_BIRTHDAY=1990-01-01
MOCK_MEMBER_GENDER=M
MOCK_MEMBER_IMAGE=
# Tier points mock
MOCK_PLAYER_EARN_POINTS=0
# Promotions mock
# 允许使用抓包文件(文件可包含前置文本,JSON 从第一个 "{" 开始解析)
MOCK_PROMOTION_CAPTURE_FILE=./fixtures/promotions.capture.800048718.json
MOCK_PROMOTION_MAX_ITEMS=30
MOCK_PROMOTIONS_REDEEMED_FIXTURE_FILE=./e.p/promotions-redeemed.json
MOCK_REDEEMED_PROMOTION_RECORDING_ENABLED=true
MOCK_REDEEMED_PROMOTION_RECORDING_FILE=./runtime/redeemed-promotions.recorded.json
MOCK_PROMOTION_REDEEM_FULFILLMENT_OVERRIDES_ENABLED=true
MOCK_PROMOTION_REDEEM_FULFILLMENT_OVERRIDES_FILE=./runtime/promotion-redeem-fulfillment-overrides.json
# Task 10766 scenario mock
# 开启后,accountNum=MOCK_TASK_10766_ACCOUNT_NUM 会返回固定 CNY Promotion,
# 且 /ewl/promotion/v1/playerpromotion/redeem 稳定返回 "Prize definition not found" 场景
MOCK_TASK_10766_ENABLED=false
MOCK_TASK_10766_ACCOUNT_NUM=80010766
MOCK_TASK_10766_PROMOTION_CAPTURE_FILE=./fixtures/promotions.capture.10766.json
MOCK_TASK_10766_MEMBER_EBONUS=8888
MOCK_TASK_10766_REDEEM_ERROR_CODE=EWALLET_HTTP_ERROR
MOCK_TASK_10766_REDEEM_ERROR_MSG=ewallet connection failed: 404 NOT_FOUND, {"success":false,"message":"Prize definition not found"}
MOCK_TASK_10766_REDEEM_RESULT=false
# Task 10852 scenario mock
# 开启后,accountNum=MOCK_TASK_10852_ACCOUNT_NUM 会固定返回可点击的 entitled 双 outcome Promotion,
# 用于验证 promotion 多选时 targetPrizes 多项场景
MOCK_TASK_10852_ENABLED=false
MOCK_TASK_10852_ACCOUNT_NUM=80010852
# Task 10852: Keep the dedicated member on an isolated fixture so the enabled Redeem state does not leak to shared mock data.
MOCK_TASK_10852_PROMOTION_CAPTURE_FILE=./fixtures/promotions.capture.10852.json
MOCK_TASK_10852_MEMBER_EBONUS=188
# LDAP mock (Simple Bind + Search)
MOCK_LDAP_ENABLED=true
MOCK_LDAP_HOST=0.0.0.0
MOCK_LDAP_PORT=1389
MOCK_LDAP_BASE_DN=dc=macausjm-glp,dc=com
MOCK_LDAP_MANAGER_DN=cn=s-cicd-app,OU=ServiceAccount,dc=macausjm-glp,dc=com
MOCK_LDAP_GROUP_BASE_DN=OU=SecurityGroups,OU=GLPUsers,dc=macausjm-glp,dc=com
# 开启后:LDAP 任意用户名/密码放行(用于前后端联调)
MOCK_LDAP_ALLOW_ANY_USER_MODE=true
MOCK_LDAP_ALLOW_ANY_USER_OU=OU=GLPUsers
MOCK_LDAP_ALLOW_ANY_USER_GROUP_CN=SG-APP-EWALLET-SUPER-ADMIN
MOCK_LDAP_ALLOW_ANY_USER_MAIL_DOMAIN=macausjm-glp.com
# 留空表示 manager bind 允许任意密码(便于 Backend 仅改 LDAP_URL 即可接入)
MOCK_LDAP_MANAGER_PASSWORD=
# Default LDAP user (used when MOCK_LDAP_USERS_JSON is empty)
MOCK_LDAP_DEFAULT_USER_SAMACCOUNTNAME=mock.user
MOCK_LDAP_DEFAULT_USER_DN=cn=mock.user,OU=GLPUsers,dc=macausjm-glp,dc=com
MOCK_LDAP_DEFAULT_USER_PASSWORD=mock-user-password
MOCK_LDAP_DEFAULT_USER_CN=Mock User
MOCK_LDAP_DEFAULT_USER_MAIL=mock.user@macausjm-glp.com
MOCK_LDAP_DEFAULT_USER_MEMBER_OF=cn=SG-APP-EWALLET-SUPER-ADMIN,OU=SecurityGroups,OU=GLPUsers,dc=macausjm-glp,dc=com
# Optional JSON array to override LDAP users
# Format:
# MOCK_LDAP_USERS_JSON=[{"sAMAccountName":"alice","dn":"cn=alice,OU=GLPUsers,dc=macausjm-glp,dc=com","password":"pass","cn":"Alice","mail":"alice@macausjm-glp.com","memberOf":["cn=SG-APP-EWALLET-SUPER-ADMIN,OU=SecurityGroups,OU=GLPUsers,dc=macausjm-glp,dc=com"]}]
MOCK_LDAP_USERS_JSON=
+1 -1
View File
@@ -29,7 +29,7 @@
"firstName": "Gary", "firstName": "Gary",
"lastName": "Chan", "lastName": "Chan",
"middleName": "David", "middleName": "David",
"nickName": "xxxx", "nickName": "陳加里",
"image": "" "image": ""
}, },
"attribute": { "attribute": {
+14 -4
View File
@@ -114,9 +114,9 @@
{ {
"awardUsedLimit": 2, "awardUsedLimit": 2,
"awardsCount": 1, "awardsCount": 1,
"awardsEligible": 11, "awardsEligible": 3,
"awardsEntitled": 11, "awardsEntitled": 3,
"awardsRedeemLimit": 11, "awardsRedeemLimit": 5,
"earnedPoints": 25, "earnedPoints": 25,
"isDirectOffer": false, "isDirectOffer": false,
"isEligible": true, "isEligible": true,
@@ -157,6 +157,8 @@
"deliveryMode": "USER_CHOICE" "deliveryMode": "USER_CHOICE"
}, },
"bucketPrices": { "bucketPrices": {
"d-comp": 10,
"m-comp": 10
}, },
"uniqueCodeRequirement": "NONE" "uniqueCodeRequirement": "NONE"
} }
@@ -198,7 +200,7 @@
"source": "INTERNAL", "source": "INTERNAL",
"isVoidable": true, "isVoidable": true,
"isEnabled": true, "isEnabled": true,
"prizeValue": 2000, "prizeValue": 10,
"prizeCategory": "NNPC", "prizeCategory": "NNPC",
"usageBehavior": "TARGET_ONLY", "usageBehavior": "TARGET_ONLY",
"deliveryMode": "USER_CHOICE", "deliveryMode": "USER_CHOICE",
@@ -207,6 +209,8 @@
"deliveryMode": "USER_CHOICE" "deliveryMode": "USER_CHOICE"
}, },
"bucketPrices": { "bucketPrices": {
"d-comp": 10,
"m-comp": 10
}, },
"uniqueCodeRequirement": "NONE" "uniqueCodeRequirement": "NONE"
} }
@@ -231,6 +235,8 @@
"deliveryMode": "USER_CHOICE" "deliveryMode": "USER_CHOICE"
}, },
"bucketPrices": { "bucketPrices": {
"d-comp": 30,
"m-comp": 30
}, },
"uniqueCodeRequirement": "NONE" "uniqueCodeRequirement": "NONE"
} }
@@ -255,6 +261,8 @@
"deliveryMode": "USER_CHOICE" "deliveryMode": "USER_CHOICE"
}, },
"bucketPrices": { "bucketPrices": {
"d-comp": 5,
"m-comp": 5
}, },
"uniqueCodeRequirement": "NONE" "uniqueCodeRequirement": "NONE"
} }
@@ -279,6 +287,8 @@
"deliveryMode": "USER_CHOICE" "deliveryMode": "USER_CHOICE"
}, },
"bucketPrices": { "bucketPrices": {
"d-comp": 15,
"m-comp": 15
}, },
"uniqueCodeRequirement": "NONE" "uniqueCodeRequirement": "NONE"
} }
BIN
View File
Binary file not shown.
File diff suppressed because it is too large Load Diff