package exploit

import "testing"

func TestHarvestObjectRefs(t *testing.T) {
	body := `{"posts":[{"author":{"email":"adam007@example.com","vehicleid":"4bae9968-ec7f-4de3-a3a0-ba1b2ab5e5e5"},"authorid":3}]}`
	refs := HarvestObjectRefs(body)
	var haveUUID, haveEmail, haveNum bool
	for _, r := range refs {
		switch {
		case r.Kind == "uuid" && r.Value == "4bae9968-ec7f-4de3-a3a0-ba1b2ab5e5e5":
			haveUUID = true
		case r.Kind == "email" && r.Value == "adam007@example.com":
			haveEmail = true
		case r.Kind == "numeric" && r.Value == "3":
			haveNum = true
		}
	}
	if !haveUUID || !haveEmail || !haveNum {
		t.Fatalf("missing refs: uuid=%v email=%v numeric=%v (%+v)", haveUUID, haveEmail, haveNum, refs)
	}
}

func TestHarvestObjectRefs_Dedup(t *testing.T) {
	body := `a@b.com a@b.com 4bae9968-ec7f-4de3-a3a0-ba1b2ab5e5e5 4bae9968-ec7f-4de3-a3a0-ba1b2ab5e5e5`
	if n := len(HarvestObjectRefs(body)); n != 2 {
		t.Fatalf("expected 2 deduped refs, got %d", n)
	}
}
