65 lines
2.7 KiB
Go
65 lines
2.7 KiB
Go
package ucca
|
|
|
|
import "testing"
|
|
|
|
func TestKnowledgeSpaceOf(t *testing.T) {
|
|
cases := map[string]string{
|
|
"DSGVO": "datenschutz",
|
|
"BDSG": "datenschutz",
|
|
"DSK SDM B51 ZUGRIFFE": "datenschutz",
|
|
"EDPS DIGITAL ETHICS": "datenschutz",
|
|
"TRGS 900": "arbeitsschutz",
|
|
"OSHA 1910 SUBPART O": "arbeitsschutz",
|
|
"HGB": "wirtschaftsrecht",
|
|
"BGB": "wirtschaftsrecht",
|
|
"MASCHINENVO": "produktsicherheit",
|
|
"MVO": "produktsicherheit",
|
|
"CRA": "cyber",
|
|
"NIST SP800 53R5": "cyber",
|
|
"AI ACT": "ki",
|
|
"KI-VO": "ki",
|
|
"DORA": "finanz",
|
|
"ARG": "arbeitsrecht",
|
|
"": "",
|
|
}
|
|
for code, want := range cases {
|
|
if got := KnowledgeSpaceOf(code); got != want {
|
|
t.Errorf("KnowledgeSpaceOf(%q)=%q want %q", code, got, want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestClassifyClarity(t *testing.T) {
|
|
scattered := []LegalSearchResult{
|
|
{RegulationCode: "CRA"}, {RegulationCode: "MASCHINENVO"}, {RegulationCode: "EU MDR"},
|
|
{RegulationCode: "KI-VO"}, {RegulationCode: "TRBS 1111"}, {RegulationCode: "OWASP TOP10"},
|
|
}
|
|
if c := ClassifyClarity("Welche Risiken gibt es?", scattered); c.Mode != "clarify" {
|
|
t.Errorf("scattered: mode=%q reason=%q want clarify", c.Mode, c.Reason)
|
|
}
|
|
concentrated := []LegalSearchResult{
|
|
{RegulationCode: "DSGVO"}, {RegulationCode: "BDSG"}, {RegulationCode: "DSK SDM"},
|
|
{RegulationCode: "EDPB WP243"}, {RegulationCode: "TDDDG"},
|
|
}
|
|
c := ClassifyClarity("Was ist eine DSFA?", concentrated)
|
|
if c.Mode != "answer" || c.DominantContext != "datenschutz" {
|
|
t.Errorf("concentrated: mode=%q dominant=%q want answer/datenschutz", c.Mode, c.DominantContext)
|
|
}
|
|
}
|
|
|
|
func TestClassifyClarity_ExplicitScope(t *testing.T) {
|
|
// G1: query names TRGS -> arbeitsschutz wins even though retrieval scatters to datenschutz.
|
|
scattered := []LegalSearchResult{
|
|
{RegulationCode: "DSK SDM METHODE"}, {RegulationCode: "DSK SDM V31"}, {RegulationCode: "DSK SDM B41 PLANEN"},
|
|
{RegulationCode: "DSGVO"}, {RegulationCode: "DSK SDM"}, {RegulationCode: "TRGS 900"}, {RegulationCode: "TRGS 554"},
|
|
}
|
|
c := ClassifyClarity("Schwellwertanalyse nach TRGS", scattered)
|
|
if c.Mode != "answer" || c.Reason != "explicit_scope" || c.DominantContext != "arbeitsschutz" {
|
|
t.Errorf("explicit TRGS: mode=%q reason=%q dominant=%q want answer/explicit_scope/arbeitsschutz", c.Mode, c.Reason, c.DominantContext)
|
|
}
|
|
// no regulation named -> falls through to tiered logic
|
|
if c := ClassifyClarity("Welche Risiken gibt es?", scattered); c.Reason == "explicit_scope" {
|
|
t.Errorf("no reg named should not be explicit_scope, got %q", c.Reason)
|
|
}
|
|
}
|