package oltp
import (
"path/filepath"
"testing"
)
// The secret is minted once and answered the same every time after:
// notify was handed it at registration and verifies with it for ever.
func TestNotifyHookSecretIsStable(t *testing.T) {
d, err := Open(filepath.Join(t.TempDir(), "oltp.db"))
if err != nil {
t.Fatal(err)
}
defer d.Close()
a, err := d.NotifyHookSecret()
if err != nil || len(a) < 32 {
t.Fatalf("FAIL: first secret %q, %v", a, err)
}
b, err := d.NotifyHookSecret()
if err != nil || a != b {
t.Fatalf("FAIL: the secret changed between calls: %q then %q (%v)", a, b, err)
}
if err := d.SetNotifyHookEndpoint("ep_1", "https://forge/api/v1/notify/events"); err != nil {
t.Fatalf("FAIL: %v", err)
}
t.Log("ok: one secret, minted once")
}
// A redelivered mail is recognised by its Message-ID.
func TestInboundReplyDedup(t *testing.T) {
d, err := Open(filepath.Join(t.TempDir(), "oltp.db"))
if err != nil {
t.Fatal(err)
}
defer d.Close()
if _, seen, err := d.InboundReplySeen("<m1@mail>"); err != nil || seen {
t.Fatalf("FAIL: unseen mail reported seen (%v)", err)
}
if err := d.RecordInboundReply("<m1@mail>", "forum-reply:abc:lou", "lou", "forum:abc"); err != nil {
t.Fatal(err)
}
outcome, seen, err := d.InboundReplySeen("<m1@mail>")
if err != nil || !seen || outcome != "forum:abc" {
t.Fatalf("FAIL: seen=%v outcome=%q err=%v", seen, outcome, err)
}
t.Log("ok: a redelivery is answered from the record")
}