test(05-02): add failing tests for EnsureConsent prompt logic
This commit is contained in:
118
pkg/verify/consent_test.go
Normal file
118
pkg/verify/consent_test.go
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user