KeiSeiKit-1.0/_primitives/_rust/kei-runtime/tests/lint_smoke.rs
Parfii-bot a4e667de10 KeiSeiKit-public — clean state
Single-commit clean baseline after security scrub of niche-tells,
project codenames, internal jargon, and contributor-email leaks.

Contents:
- 100 Rust crates (_primitives/_rust/)
- 37 agent manifests (_manifests/) + generated specs (_generated/)
- 67 user-invocable skills (skills/)
- 33 hooks (hooks/)
- Composition blocks (_blocks/)
- Documentation (docs/, README.md)
- TS adapter packages (_ts_packages/)
- Assembler (_assembler/)
- Roles (_roles/)
- Templates (_templates/)
- Forgejo CI (.forgejo/)

Author: Denis Parfionovich <info@greendragon.info>

License: see LICENSE.
2026-05-01 12:09:03 +08:00

79 lines
2.3 KiB
Rust

//! Integration test — schema_lint over a temp root with 1 valid + 1 broken atom.
use kei_runtime::lint::schema_lint;
use std::fs;
use std::path::Path;
fn write_valid_atom(root: &Path) {
let crate_dir = root.join("kei-demo");
let atoms = crate_dir.join("atoms");
let schemas = atoms.join("schemas");
fs::create_dir_all(&schemas).unwrap();
let input_schema = r#"{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": ["title"],
"properties": { "title": { "type": "string" } },
"additionalProperties": false
}"#;
let output_schema = r#"{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": { "id": { "type": "integer" } }
}"#;
fs::write(schemas.join("create-input.json"), input_schema).unwrap();
fs::write(schemas.join("create-output.json"), output_schema).unwrap();
let md = r#"---
atom: kei-demo::create
kind: command
version: "0.1.0"
input:
schema: schemas/create-input.json
output:
schema: schemas/create-output.json
side_effects:
- { op: write, domain: kei-demo-db }
idempotent: false
stability: stable
---
# kei-demo::create
"#;
fs::write(atoms.join("create.md"), md).unwrap();
}
fn write_broken_atom(root: &Path) {
let crate_dir = root.join("kei-broken");
let atoms = crate_dir.join("atoms");
fs::create_dir_all(&atoms).unwrap();
// Missing `kind` field.
let md = r#"---
atom: kei-broken::oops
version: "0.1.0"
input:
schema: schemas/oops-input.json
output:
schema: schemas/oops-output.json
side_effects: []
idempotent: true
stability: experimental
---
# kei-broken::oops
"#;
fs::write(atoms.join("oops.md"), md).unwrap();
}
#[test]
fn lint_separates_valid_and_broken() {
let tmp = tempfile::tempdir().unwrap();
write_valid_atom(tmp.path());
write_broken_atom(tmp.path());
let report = schema_lint(tmp.path());
assert_eq!(report.passed.len(), 1, "expected 1 passing atom");
assert_eq!(report.failed.len(), 1, "expected 1 failing atom");
let (label, errs) = &report.failed[0];
assert!(label.contains("oops.md"), "failed label mismatch: {label}");
let joined = errs.join(" ");
assert!(joined.contains("missing kind"), "expected 'missing kind' in: {joined}");
}