fix: fix some ui displays and features miss implemented
This commit is contained in:
@ -5,8 +5,8 @@ mod helpers;
|
||||
|
||||
use domain::{
|
||||
Agent, AgentManifest, AgentOrigin, AgentProfile, AgentTemplate, ContextInjection, DomainError,
|
||||
ManifestEntry, MarkdownDoc, ProfileId, Project, ProjectPath, PtySize, RemoteRef, SshAuth,
|
||||
TemplateId, TemplateVersion,
|
||||
ManifestEntry, MarkdownDoc, ProfileId, Project, ProjectPath, PtySize, RemoteRef, Skill, SkillId,
|
||||
SkillRef, SkillScope, SshAuth, TemplateId, TemplateVersion,
|
||||
};
|
||||
use helpers::{AtomicSeqIdGenerator, FixedClock};
|
||||
use uuid::Uuid;
|
||||
@ -409,3 +409,121 @@ fn manifest_unique_md_paths_ok() {
|
||||
.unwrap();
|
||||
assert!(AgentManifest::new(1, vec![e1, e2]).is_ok());
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Skill invariants (L12, ARCHITECTURE §14.2)
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
fn skill_id(n: u128) -> SkillId {
|
||||
SkillId::from_uuid(Uuid::from_u128(n))
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn skill_valid_construction() {
|
||||
let s = Skill::new(
|
||||
skill_id(1),
|
||||
"code-review",
|
||||
MarkdownDoc::new("review the diff"),
|
||||
SkillScope::Global,
|
||||
);
|
||||
assert!(s.is_ok());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn skill_rejects_empty_name() {
|
||||
let err = Skill::new(
|
||||
skill_id(1),
|
||||
"",
|
||||
MarkdownDoc::new("body"),
|
||||
SkillScope::Project,
|
||||
)
|
||||
.unwrap_err();
|
||||
assert_eq!(err, DomainError::EmptyField { field: "skill.name" });
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn skill_rejects_empty_content() {
|
||||
let err = Skill::new(skill_id(1), "x", MarkdownDoc::new(""), SkillScope::Global).unwrap_err();
|
||||
assert_eq!(
|
||||
err,
|
||||
DomainError::EmptyField {
|
||||
field: "skill.content_md"
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn skill_with_content_revalidates() {
|
||||
let s = Skill::new(skill_id(1), "x", MarkdownDoc::new("a"), SkillScope::Global).unwrap();
|
||||
assert!(s.with_content(MarkdownDoc::new("b")).is_ok());
|
||||
assert!(s.with_content(MarkdownDoc::new("")).is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn agent_assign_skill_is_idempotent() {
|
||||
let mut a = Agent::new(
|
||||
agent_id(1),
|
||||
"dev",
|
||||
"agents/dev.md",
|
||||
profile_id(),
|
||||
AgentOrigin::Scratch,
|
||||
false,
|
||||
)
|
||||
.unwrap();
|
||||
let r = SkillRef::new(skill_id(7), SkillScope::Global);
|
||||
assert!(a.assign_skill(r)); // first assignment
|
||||
assert!(!a.assign_skill(r)); // duplicate ignored
|
||||
assert_eq!(a.skills, vec![r]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn agent_unassign_skill() {
|
||||
let mut a = Agent::new(
|
||||
agent_id(1),
|
||||
"dev",
|
||||
"agents/dev.md",
|
||||
profile_id(),
|
||||
AgentOrigin::Scratch,
|
||||
false,
|
||||
)
|
||||
.unwrap();
|
||||
let r = SkillRef::new(skill_id(7), SkillScope::Project);
|
||||
a.assign_skill(r);
|
||||
assert!(a.unassign_skill(skill_id(7)));
|
||||
assert!(!a.unassign_skill(skill_id(7))); // already gone
|
||||
assert!(a.skills.is_empty());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn agent_with_skills_dedups() {
|
||||
let r = SkillRef::new(skill_id(7), SkillScope::Global);
|
||||
let a = Agent::new(
|
||||
agent_id(1),
|
||||
"dev",
|
||||
"agents/dev.md",
|
||||
profile_id(),
|
||||
AgentOrigin::Scratch,
|
||||
false,
|
||||
)
|
||||
.unwrap()
|
||||
.with_skills(vec![r, r]);
|
||||
assert_eq!(a.skills, vec![r]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn manifest_entry_preserves_skills_through_agent_roundtrip() {
|
||||
let r = SkillRef::new(skill_id(7), SkillScope::Project);
|
||||
let agent = Agent::new(
|
||||
agent_id(1),
|
||||
"dev",
|
||||
"agents/dev.md",
|
||||
profile_id(),
|
||||
AgentOrigin::Scratch,
|
||||
false,
|
||||
)
|
||||
.unwrap()
|
||||
.with_skills(vec![r]);
|
||||
let entry = ManifestEntry::from_agent(&agent);
|
||||
assert_eq!(entry.skills, vec![r]);
|
||||
assert_eq!(entry.to_agent().unwrap(), agent);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user