fix: 收紧拼图发布资产门槛
This commit is contained in:
@@ -541,6 +541,17 @@ pub fn build_result_preview(
|
||||
}
|
||||
}
|
||||
|
||||
fn has_required_puzzle_asset_ref(image_src: &Option<String>, object_key: &Option<String>) -> bool {
|
||||
image_src
|
||||
.as_deref()
|
||||
.map(str::trim)
|
||||
.is_some_and(|value| !value.is_empty())
|
||||
|| object_key
|
||||
.as_deref()
|
||||
.map(str::trim)
|
||||
.is_some_and(|value| !value.is_empty())
|
||||
}
|
||||
|
||||
pub fn validate_publish_requirements(
|
||||
draft: &PuzzleResultDraft,
|
||||
author_display_name: Option<&str>,
|
||||
@@ -582,6 +593,36 @@ pub fn validate_publish_requirements(
|
||||
message: "正式拼图图片尚未确定".to_string(),
|
||||
});
|
||||
}
|
||||
if !has_required_puzzle_asset_ref(
|
||||
&level.level_scene_image_src,
|
||||
&level.level_scene_image_object_key,
|
||||
) {
|
||||
blockers.push(PuzzleResultPreviewBlocker {
|
||||
id: format!("missing-level-scene-image-{}", level.level_id),
|
||||
code: "MISSING_LEVEL_SCENE_IMAGE".to_string(),
|
||||
message: "正式关卡画面尚未生成".to_string(),
|
||||
});
|
||||
}
|
||||
if !has_required_puzzle_asset_ref(
|
||||
&level.ui_spritesheet_image_src,
|
||||
&level.ui_spritesheet_image_object_key,
|
||||
) {
|
||||
blockers.push(PuzzleResultPreviewBlocker {
|
||||
id: format!("missing-ui-spritesheet-image-{}", level.level_id),
|
||||
code: "MISSING_UI_SPRITESHEET_IMAGE".to_string(),
|
||||
message: "UI spritesheet 尚未生成".to_string(),
|
||||
});
|
||||
}
|
||||
if !has_required_puzzle_asset_ref(
|
||||
&level.level_background_image_src,
|
||||
&level.level_background_image_object_key,
|
||||
) {
|
||||
blockers.push(PuzzleResultPreviewBlocker {
|
||||
id: format!("missing-level-background-image-{}", level.level_id),
|
||||
code: "MISSING_LEVEL_BACKGROUND_IMAGE".to_string(),
|
||||
message: "关卡背景图尚未生成".to_string(),
|
||||
});
|
||||
}
|
||||
}
|
||||
if draft.theme_tags.len() < PUZZLE_MIN_TAG_COUNT
|
||||
|| draft.theme_tags.len() > PUZZLE_MAX_TAG_COUNT
|
||||
@@ -4011,4 +4052,37 @@ mod tests {
|
||||
.any(|blocker| blocker.code == "MISSING_LEVEL_NAME")
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn validate_publish_requirements_requires_generated_level_asset_pack() {
|
||||
let anchor_pack = infer_anchor_pack("雨夜猫咪神庙", Some("雨夜猫咪神庙"));
|
||||
let mut draft = compile_result_draft(&anchor_pack, &[]);
|
||||
draft.levels[0].cover_image_src = Some("/cover.png".to_string());
|
||||
|
||||
let blockers = validate_publish_requirements(&draft, Some("玩家"));
|
||||
let blocker_codes = blockers
|
||||
.iter()
|
||||
.map(|blocker| blocker.code.as_str())
|
||||
.collect::<Vec<_>>();
|
||||
assert!(blocker_codes.contains(&"MISSING_LEVEL_SCENE_IMAGE"));
|
||||
assert!(blocker_codes.contains(&"MISSING_UI_SPRITESHEET_IMAGE"));
|
||||
assert!(blocker_codes.contains(&"MISSING_LEVEL_BACKGROUND_IMAGE"));
|
||||
|
||||
draft.levels[0].level_scene_image_object_key =
|
||||
Some("generated/puzzle/level-scene.png".to_string());
|
||||
draft.levels[0].ui_spritesheet_image_object_key =
|
||||
Some("generated/puzzle/ui-spritesheet.png".to_string());
|
||||
draft.levels[0].level_background_image_object_key =
|
||||
Some("generated/puzzle/level-background.png".to_string());
|
||||
|
||||
let blockers = validate_publish_requirements(&draft, Some("玩家"));
|
||||
assert!(!blockers.iter().any(|blocker| {
|
||||
matches!(
|
||||
blocker.code.as_str(),
|
||||
"MISSING_LEVEL_SCENE_IMAGE"
|
||||
| "MISSING_UI_SPRITESHEET_IMAGE"
|
||||
| "MISSING_LEVEL_BACKGROUND_IMAGE"
|
||||
)
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user