package oauthroutes

import "testing"

func TestFamilyValidateAndCanonicalize(t *testing.T) {
	f := NewFamily("/services/data/")
	if err := f.ValidatePattern("/services/data/v63.0/sobjects"); err != nil {
		t.Fatalf("concrete version should validate: %v", err)
	}
	if err := f.ValidatePattern("/services/data/not-a-version/sobjects"); err == nil {
		t.Fatal("malformed version segment must be rejected")
	}
	if err := f.ValidatePattern("/Services/Data/v63.0/query"); err == nil {
		t.Fatal("case-variant prefix must be rejected")
	}
	if got := f.CanonicalPattern("/services/data/v63.0/sobjects"); got != "/services/data/:version/sobjects" {
		t.Fatalf("canonical = %q", got)
	}
	if err := f.ValidatePattern("/id/:orgId/:userId"); err != nil {
		t.Fatalf("non-family pattern should pass through: %v", err)
	}
}

func TestEmptyFamilyIsTotalPassThrough(t *testing.T) {
	f := NewFamily("")
	for _, p := range []string{"/services/data/not-a-version/x", "/Services/Data/v63.0/q", "/anything", ""} {
		if err := f.ValidatePattern(p); err != nil {
			t.Fatalf("empty family must pass through %q: %v", p, err)
		}
		if got := f.CanonicalPattern(p); got != p {
			t.Fatalf("empty family must leave %q verbatim, got %q", p, got)
		}
	}
}
