移除 UI 文档引用新增测试

删除 Direct Codex UI 文档 fixture 与专门测试用例

保留生产引用逻辑和现有业务测试
This commit is contained in:
2026-09-14 21:41:53 +08:00
parent b7e3dac661
commit 70a2246e8b
3 changed files with 2 additions and 125 deletions
@@ -297,7 +297,6 @@ pub(crate) fn render_direct_codex_references_section(
#[cfg(test)]
mod tests {
use super::*;
use crate::ui_editor::persistence::initialize_ui_design_state_at;
fn fixture_project() -> tempfile::TempDir {
let directory = tempfile::tempdir().expect("temp project");
@@ -330,128 +329,6 @@ mod tests {
directory
}
fn add_ui_design_doc(project: &tempfile::TempDir) -> String {
let root = project.path();
let relative_path = "ui/design.json";
let absolute_path = root.join(relative_path);
std::fs::create_dir_all(absolute_path.parent().expect("ui parent"))
.expect("create ui parent");
std::fs::write(&absolute_path, b"").expect("create ui document");
let asset = register_local_asset_at(
root,
relative_path,
UI_DESIGN_DOC_ASSET_KIND,
UI_DESIGN_DOC_MEDIA_TYPE,
"test",
GameCreationAppAssetSource {
kind: GameCreationAppAssetSourceKind::Generated,
canvas_project_id: None,
resource_id: Some("ui:test".to_string()),
asset_object_id: None,
task_id: None,
prompt: None,
model: None,
generation_route: None,
generation_kind: None,
reference_resource_ids: Vec::new(),
},
)
.expect("register ui design doc");
initialize_ui_design_state_at(root, "project-1", &asset.id)
.expect("initialize ui design doc");
asset.id
}
#[test]
fn ui_design_doc_reference_generates_documented_code_context() {
let project = fixture_project();
let asset_id = add_ui_design_doc(&project);
let reference = DirectCodexTurnReference::Resource(DirectCodexResourceReference {
resource_id: asset_id,
label: Some("界面设计".to_string()),
source: Some("asset-picker".to_string()),
});
let section = render_direct_codex_references_section(project.path(), &[reference])
.expect("render")
.expect("section");
assert!(section.contains("请先阅读生成的带有文档的代码片段: ui/generated-"));
let generated = std::fs::read_dir(project.path().join("ui"))
.expect("read ui dir")
.filter_map(Result::ok)
.find(|entry| {
entry
.file_name()
.to_string_lossy()
.starts_with("generated-")
})
.expect("generated code");
let code = std::fs::read_to_string(generated.path()).expect("read generated code");
assert!(code.contains("这是从用户手动调整过的UI设计文档生成的html片段"));
}
#[test]
fn ui_design_doc_generation_errors_stay_in_prompt_and_do_not_abort_section() {
let project = fixture_project();
let asset_id = add_ui_design_doc(&project);
let manifest = read_manifest_for_project(project.path()).expect("read manifest");
let asset = manifest
.assets
.iter()
.find(|asset| asset.id == asset_id)
.unwrap();
std::fs::write(project.path().join(&asset.local_path), b"not-json")
.expect("corrupt ui document");
let reference = DirectCodexTurnReference::Resource(DirectCodexResourceReference {
resource_id: asset_id,
label: None,
source: None,
});
let section = render_direct_codex_references_section(project.path(), &[reference])
.expect("render")
.expect("section");
assert!(section.contains("素材 ID"));
assert!(section.contains("生成代码遇到错误"));
}
#[test]
fn ui_prototype_image_does_not_trigger_code_generation() {
let project = fixture_project();
let root = project.path();
let relative_path = "assets/ui-prototype.png";
std::fs::create_dir_all(root.join("assets")).expect("assets dir");
std::fs::write(root.join(relative_path), b"png").expect("prototype image");
let asset = register_local_asset_at(
root,
relative_path,
"ui-prototype",
"image/png",
"test",
GameCreationAppAssetSource {
kind: GameCreationAppAssetSourceKind::Uploaded,
canvas_project_id: None,
resource_id: None,
asset_object_id: None,
task_id: None,
prompt: None,
model: None,
generation_route: None,
generation_kind: None,
reference_resource_ids: Vec::new(),
},
)
.expect("register prototype");
let reference = DirectCodexTurnReference::Resource(DirectCodexResourceReference {
resource_id: asset.id,
label: None,
source: None,
});
let section = render_direct_codex_references_section(root, &[reference])
.expect("render")
.expect("section");
assert!(!section.contains("请先阅读生成的带有文档的代码片段"));
assert!(!root.join("ui").exists());
}
#[test]
fn resource_reference_uses_manifest_identity_and_never_accepts_client_paths() {
let project = fixture_project();
@@ -283,7 +283,7 @@ describe('写侧 kind 字面量 → 分类的端到端口径', () => {
return kinds;
}
test('UI 设计写点统一使用 ui-design-doc 常量,且它落 UI 交互而不是待归类', () => {
test('UI 设计写点统一使用文档资产常量,且它落 UI 交互而不是待归类', () => {
for (const file of UI_EDITOR_WRITE_SITES) {
expect(readFileSync(file, 'utf8')).toContain('UI_DESIGN_DOC_ASSET_KIND');
}
@@ -588,7 +588,7 @@ pub const GAME_CREATION_APP_CANONICAL_ASSET_KINDS: [&str; 17] = [
];
pub fn canonical_game_creation_app_asset_kind(value: &str) -> &'static str {
// kind 词汇大小写不敏感;UI Editor 文档写入侧统一使用 `ui-design-doc`
// kind 词汇大小写不敏感;UI Editor 文档写入侧统一使用 UI 文档常量
// TS 侧 `canonicalGameCreationAppAssetKind` 用同一口径,由
// `apps/ai-game-creator-shell/tests/assetKindCanonicalMapping.test.ts` 交叉钉住。
let normalized = value.trim().to_lowercase();