移除 UI 文档引用新增测试
删除 Direct Codex UI 文档 fixture 与专门测试用例 保留生产引用逻辑和现有业务测试
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user