4.5 KiB
4.5 KiB
CP关系本地真实链路测试用例
本文只记录本地真实链路验证用例。业务动作优先走 gateway HTTP、room/wallet/user/notice 服务和 RocketMQ;SQL 只用于准备本地测试数据和核对最终事实。
环境前置
- Docker 本地服务:MySQL、Redis、RocketMQ、gateway-service、room-service、wallet-service、user-service、notice-service。
user-service必须启用cp_relationship_worker,并消费hyapp_room_outbox。notice-service必须消费hyapp_user_outbox,并把 CP 申请/同意/拒绝/关系创建事件投递到腾讯云 IM。- 本地测试账号 A、B、C 需要是同一个
app_code=lalu下的完整资料用户。 - 本地 CP 礼物需要是
gift_type_code=cp,并在礼物配置中写入cp_relation_type。 - 送礼前 A 和 B 必须都在同一个房间的 room-service presence 内。
T01 CP礼物创建申请
步骤:
- 准备 A、B 用户和 A 的 COIN 余额。
- 准备 CP 礼物
local_cp_gift_cp,cp_relation_type=cp。 - A 创建房间,A 和 B 都调用进房接口。
- A 通过 gateway 给 B 送 CP 礼物。
验证:
hyapp_room.room_outbox有RoomGiftSent,payload 中cp_relation_type=cp、gift_icon_url非空。- RocketMQ
hyapp_room_outbox被 user-service CP consumer 消费。 hyapp_user.user_cp_applications有 A 到 B 的 pending 申请,expires_at_ms为当前时间加服务端默认 24 小时。hyapp_user.user_cp_gift_event_consumption有该 room event 的消费记录。hyapp_user.user_outbox有UserCPApplicationCreated。- 腾讯云 IM 有 A 发给 B 的 C2C 申请消息,
Desc=cp_application_created,payload 含application_id、relation_type=cp、expires_at_ms。 - 腾讯云 IM 有发到房间群的申请消息,
Desc=cp_application_created,payload 含recipient_user_id=B、room_id。
T02 B同意申请建立关系
步骤:
- 使用 T01 产生的
application_id。 - B 调用 gateway 同意申请接口。
验证:
user_cp_applications.status=accepted。user_cp_relationships新增 active 关系,A/B 无序 pair 只有一条 active 关系。- 同一对用户其他 pending 申请被置为
blocked。 user_outbox有UserCPApplicationAccepted和UserCPRelationshipCreated。- 腾讯云 IM 向 A 发送 B 发出的同意结果 C2C 消息,
Desc=cp_application_accepted。 - 腾讯云 IM 向房间群发送同意结果消息,
Desc=cp_application_accepted,payload 含recipient_user_id=A。 - 腾讯云 IM 向区域群发送关系创建消息,
Desc=cp_relationship_created,payload 含 A/B 头像昵称短 ID、礼物 icon 和room_id。
T03 已有关系后送礼增加亲密值并升级
步骤:
- 使用服务端默认等级规则,确认 1 级阈值为 0。
- A 再次给 B 送 CP 礼物。
验证:
- 不新增 pending 申请。
- 原关系
intimacy_value增加礼物结算热度值。 - 原关系
level_no按服务端默认阈值计算。 user_outbox有UserCPRelationshipIntimacyChanged。
T04 同一对用户只能同时存在一种关系
步骤:
- A 给 B 发送兄弟礼物,生成 brother pending 申请。
- A 给 B 发送姐妹礼物,生成 sister pending 申请。
- B 接受其中一个申请。
- B 再尝试接受另一个申请。
验证:
- 第一个接受成功后产生 active 关系。
- 另一个申请不能接受,接口返回冲突提示。
- A/B active 关系仍只有一种。
T05 同一用户只能同时存在一个关系
步骤:
- 使用 T02 建立 A/B active 关系。
- C 给 A 发送 CP 礼物,生成 C 到 A 的 pending 申请。
- A 尝试同意 C 的申请。
验证:
- 同意接口返回冲突。
- A/B active 关系仍保留。
- C/A 不创建 active 关系。
T06 申请过期
步骤:
- 创建一条 pending 申请。
- 通过 SQL 把
expires_at_ms调整到当前时间之前。 - B 查询申请列表或尝试同意。
验证:
- 申请状态被固化为
expired。 - 同意接口返回
CONFLICT,申请被固化为expired,不建立关系。
T07 拒绝申请
步骤:
- 创建一条 pending 申请。
- B 调用拒绝接口。
验证:
user_cp_applications.status=rejected。- 不创建 active 关系。
user_outbox有UserCPApplicationRejected。- 腾讯云 IM 向 A 发送 B 发出的拒绝结果 C2C 消息,
Desc=cp_application_rejected。 - 腾讯云 IM 向房间群发送拒绝结果消息,
Desc=cp_application_rejected,payload 含recipient_user_id=A。