fix(cli): non-zero exit when an agent command emits an error envelope
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -122,9 +122,7 @@ func TestGetFilteredReturnsNotFound(t *testing.T) {
|
||||
},
|
||||
}
|
||||
d, buf := newDeps(t, fm)
|
||||
if err := GetCmd(d, "work", "INBOX", 102); err != nil {
|
||||
t.Fatalf("GetCmd: %v", err)
|
||||
}
|
||||
_ = GetCmd(d, "work", "INBOX", 102)
|
||||
res := decode(t, buf.Bytes())
|
||||
if res["error"] != true {
|
||||
t.Fatal("filtered get must return error envelope")
|
||||
@@ -135,6 +133,25 @@ func TestGetFilteredReturnsNotFound(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetFilteredReturnsErrorForExit(t *testing.T) {
|
||||
fm := &fakeMailer{
|
||||
uidValidity: 1, maxUID: 100,
|
||||
headers: []mail.Header{{UID: 102, From: "eve@evil.com", Subject: "spam"}},
|
||||
full: map[uint32]mail.Message{
|
||||
102: {Header: mail.Header{UID: 102, From: "eve@evil.com", Subject: "spam"}, BodyText: "secret"},
|
||||
},
|
||||
}
|
||||
d, buf := newDeps(t, fm)
|
||||
err := GetCmd(d, "work", "INBOX", 102)
|
||||
if err == nil {
|
||||
t.Fatal("GetCmd on filtered uid must return non-nil error so caller can exit non-zero")
|
||||
}
|
||||
res := decode(t, buf.Bytes())
|
||||
if res["error"] != true {
|
||||
t.Fatalf("envelope must report error=true, got %v", res["error"])
|
||||
}
|
||||
}
|
||||
|
||||
func TestAckAdvancesStateAndFiltered(t *testing.T) {
|
||||
fm := &fakeMailer{
|
||||
uidValidity: 1, maxUID: 100,
|
||||
@@ -145,9 +162,7 @@ func TestAckAdvancesStateAndFiltered(t *testing.T) {
|
||||
}
|
||||
d, buf := newDeps(t, fm)
|
||||
// Acking a filtered uid (102) must be rejected as not-found.
|
||||
if err := AckCmd(d, "work", "INBOX", []uint32{102}); err != nil {
|
||||
t.Fatalf("AckCmd: %v", err)
|
||||
}
|
||||
_ = AckCmd(d, "work", "INBOX", []uint32{102})
|
||||
if decode(t, buf.Bytes())["error"] != true {
|
||||
t.Fatal("acking filtered uid must fail")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user