收口后端创作游玩流程主干
新增 play_flow 统一承接创作游玩与支撑路由 将 app.rs 的逐玩法挂载改为统一主干分发 将平台与资产及个人侧游玩支撑路由迁入 play_flow 抽出 visual_novel 路由模块并复用原有 handler 统一入口熔断路径解析并补充目标回归测试 更新后端契约、玩法链路和团队决策记录
This commit is contained in:
@@ -184,8 +184,8 @@ mod tests {
|
||||
|
||||
#[tokio::test]
|
||||
async fn runtime_settings_returns_bad_gateway_when_spacetime_not_published() {
|
||||
let state = seed_authenticated_state().await;
|
||||
let token = issue_access_token(&state);
|
||||
let (state, user_id) = seed_authenticated_state().await;
|
||||
let token = issue_access_token(&state, user_id.as_str());
|
||||
let app = build_router(state);
|
||||
|
||||
let response = app
|
||||
@@ -221,8 +221,8 @@ mod tests {
|
||||
|
||||
#[tokio::test]
|
||||
async fn runtime_settings_rejects_invalid_theme_with_envelope() {
|
||||
let state = seed_authenticated_state().await;
|
||||
let token = issue_access_token(&state);
|
||||
let (state, user_id) = seed_authenticated_state().await;
|
||||
let token = issue_access_token(&state, user_id.as_str());
|
||||
let app = build_router(state);
|
||||
|
||||
let response = app
|
||||
@@ -266,8 +266,8 @@ mod tests {
|
||||
#[tokio::test]
|
||||
#[ignore = "需要本地 SpacetimeDB xushi-p4wfr 已启动并发布当前 module;验证 PUT/GET settings 主链"]
|
||||
async fn runtime_settings_round_trip_against_local_spacetimedb() {
|
||||
let state = seed_authenticated_state().await;
|
||||
let token = issue_access_token(&state);
|
||||
let (state, user_id) = seed_authenticated_state().await;
|
||||
let token = issue_access_token(&state, user_id.as_str());
|
||||
let app = build_router(state);
|
||||
|
||||
let put_response = app
|
||||
@@ -337,23 +337,21 @@ mod tests {
|
||||
assert_eq!(get_payload["data"]["musicVolume"], json!(1.0));
|
||||
}
|
||||
|
||||
async fn seed_authenticated_state() -> AppState {
|
||||
async fn seed_authenticated_state() -> (AppState, String) {
|
||||
let state = AppState::new(AppConfig::default()).expect("state should build");
|
||||
state
|
||||
let user_id = state
|
||||
.seed_test_phone_user_with_password("13800138106", "secret123")
|
||||
.await
|
||||
.id;
|
||||
state
|
||||
(state, user_id)
|
||||
}
|
||||
|
||||
fn issue_access_token(state: &AppState) -> String {
|
||||
fn issue_access_token(state: &AppState, user_id: &str) -> String {
|
||||
let claims = AccessTokenClaims::from_input(
|
||||
AccessTokenClaimsInput {
|
||||
user_id: "user_00000001".to_string(),
|
||||
session_id: state.seed_test_refresh_session_for_user_id(
|
||||
"user_00000001",
|
||||
"sess_runtime_settings",
|
||||
),
|
||||
user_id: user_id.to_string(),
|
||||
session_id: state
|
||||
.seed_test_refresh_session_for_user_id(user_id, "sess_runtime_settings"),
|
||||
provider: AuthProvider::Password,
|
||||
roles: vec!["user".to_string()],
|
||||
token_version: 2,
|
||||
|
||||
Reference in New Issue
Block a user