Files
keyhunter/pkg/verify/consent_test.go

119 lines
2.9 KiB
Go

package verify
import (
"bytes"
"strings"
"testing"
"github.com/salvacybersec/keyhunter/pkg/storage"
)
func newTestDB(t *testing.T) *storage.DB {
t.Helper()
db, err := storage.Open(":memory:")
if err != nil {
t.Fatalf("storage.Open(:memory:): %v", err)
}
t.Cleanup(func() { _ = db.Close() })
return db
}
func TestEnsureConsent_GrantedPrevious(t *testing.T) {
db := newTestDB(t)
if err := db.SetSetting(ConsentSettingKey, ConsentGranted); err != nil {
t.Fatalf("seed: %v", err)
}
var out bytes.Buffer
ok, err := EnsureConsent(db, strings.NewReader(""), &out)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if !ok {
t.Errorf("want true, got false")
}
if out.Len() != 0 {
t.Errorf("expected no prompt when previously granted, got %q", out.String())
}
}
func TestEnsureConsent_TypeYes(t *testing.T) {
db := newTestDB(t)
var out bytes.Buffer
ok, err := EnsureConsent(db, strings.NewReader("yes\n"), &out)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if !ok {
t.Errorf("want true, got false")
}
if !strings.Contains(out.String(), "legal implications") {
t.Errorf("prompt missing 'legal implications': %q", out.String())
}
if !strings.Contains(out.String(), "keyhunter legal") {
t.Errorf("prompt missing 'keyhunter legal': %q", out.String())
}
val, found, err := db.GetSetting(ConsentSettingKey)
if err != nil || !found || val != ConsentGranted {
t.Errorf("setting not persisted: val=%q found=%v err=%v", val, found, err)
}
}
func TestEnsureConsent_TypeYesUppercase(t *testing.T) {
db := newTestDB(t)
var out bytes.Buffer
ok, err := EnsureConsent(db, strings.NewReader("YES\n"), &out)
if err != nil || !ok {
t.Fatalf("want (true,nil), got (%v,%v)", ok, err)
}
}
func TestEnsureConsent_TypeNo(t *testing.T) {
db := newTestDB(t)
var out bytes.Buffer
ok, err := EnsureConsent(db, strings.NewReader("no\n"), &out)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if ok {
t.Errorf("want false, got true")
}
val, _, _ := db.GetSetting(ConsentSettingKey)
if val != ConsentDeclined {
t.Errorf("want declined, got %q", val)
}
}
func TestEnsureConsent_Empty(t *testing.T) {
db := newTestDB(t)
var out bytes.Buffer
ok, err := EnsureConsent(db, strings.NewReader("\n"), &out)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if ok {
t.Errorf("want false, got true")
}
}
func TestEnsureConsent_DeclinedNotSticky(t *testing.T) {
db := newTestDB(t)
if err := db.SetSetting(ConsentSettingKey, ConsentDeclined); err != nil {
t.Fatalf("seed: %v", err)
}
var out bytes.Buffer
ok, err := EnsureConsent(db, strings.NewReader("yes\n"), &out)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if !ok {
t.Errorf("want true (re-prompted & granted), got false")
}
if out.Len() == 0 {
t.Errorf("expected re-prompt after declined, got no output")
}
val, _, _ := db.GetSetting(ConsentSettingKey)
if val != ConsentGranted {
t.Errorf("want granted after re-prompt, got %q", val)
}
}