Files
whetstone_DSL/editor/tests/step820_test.cpp

99 lines
3.1 KiB
C++
Raw Normal View History

// Step 820: Ambiguity triage UI model and API (10 tests)
#include "governance/AmbiguityTriageModel.h"
#include <iostream>
static int p=0,f=0;
#define T(n) { std::cout << " " << #n << "... "; }
#define P() { std::cout << "PASS\n"; ++p; }
#define F(m) { std::cout << "FAIL: " << m << "\n"; ++f; }
#define C(c,m) if (!(c)) { F(m); return; }
static AmbiguityItem makeItem(const std::string& id, AmbiguitySeverity sev = AmbiguitySeverity::Medium) {
AmbiguityItem item; item.itemId = id; item.description = "desc " + id; item.severity = sev; return item;
}
void t1() {
T(add_item_success);
AmbiguityTriageModel m; std::string err;
C(m.addItem(makeItem("A1"), &err), "add");
C(m.summarize().total == 1, "total");
P();
}
void t2() {
T(prevent_duplicate);
AmbiguityTriageModel m; std::string err;
C(m.addItem(makeItem("A2"), &err), "first");
C(!m.addItem(makeItem("A2"), &err) && err == "item_duplicate", "dup");
P();
}
void t3() {
T(missing_description);
AmbiguityTriageModel m; std::string err;
AmbiguityItem bad; bad.itemId = "A3";
C(!m.addItem(bad, &err) && err == "description_missing", "no_desc");
P();
}
void t4() {
T(assign_reviewer);
AmbiguityTriageModel m; std::string err;
C(m.addItem(makeItem("A4"), &err), "add");
C(m.assign("A4", "alice", &err), "assign");
C(m.items()[0].status == AmbiguityStatus::UnderReview, "status");
P();
}
void t5() {
T(assign_empty_reviewer);
AmbiguityTriageModel m; std::string err;
C(m.addItem(makeItem("A5"), &err), "add");
C(!m.assign("A5", "", &err) && err == "reviewer_missing", "err");
P();
}
void t6() {
T(resolve_item);
AmbiguityTriageModel m; std::string err;
C(m.addItem(makeItem("A6"), &err), "add");
C(m.assign("A6", "bob", &err), "assign");
C(m.resolve("A6", "use override pattern", &err), "resolve");
C(m.summarize().resolved == 1, "resolved");
P();
}
void t7() {
T(resolve_requires_assignment);
AmbiguityTriageModel m; std::string err;
C(m.addItem(makeItem("A7"), &err), "add");
C(!m.resolve("A7", "some fix", &err) && err == "not_assigned", "err");
P();
}
void t8() {
T(defer_item);
AmbiguityTriageModel m; std::string err;
C(m.addItem(makeItem("A8"), &err), "add");
C(m.defer("A8", &err), "defer");
C(m.summarize().deferred == 1, "deferred");
P();
}
void t9() {
T(high_severity_open_flag);
AmbiguityTriageModel m; std::string err;
C(m.addItem(makeItem("A9", AmbiguitySeverity::High), &err), "add");
C(m.summarize().hasHighSeverityOpen, "high");
P();
}
void t10() {
T(summary_multi_status);
AmbiguityTriageModel m; std::string err;
C(m.addItem(makeItem("A10"), &err), "add1");
C(m.addItem(makeItem("A11"), &err), "add2");
C(m.assign("A10", "carol", &err), "assign");
auto s = m.summarize();
C(s.open == 1 && s.underReview == 1, "counts");
P();
}
int main() {
std::cout << "Step 820: Ambiguity triage UI model and API\n";
t1(); t2(); t3(); t4(); t5(); t6(); t7(); t8(); t9(); t10();
std::cout << "\nResults: " << p << "/" << (p+f) << " passed\n";
return f ? 1 : 0;
}