package gitcode

import (
	"os"
	"path/filepath"
	"regexp"
	"strings"
	"testing"
)

func TestSanitizedFixtures(t *testing.T) {
	fixtureRoot := filepath.Join("..", "..", "fixtures")
	if _, err := os.Stat(fixtureRoot); err != nil {
		if os.IsNotExist(err) {
			return
		}
		t.Fatalf("stat fixtures: %v", err)
	}
	forbidden := []string{
		"Authorization",
		"raw-owner",
		"raw-repo",
		"raw-project",
		"gitcode.example.invalid",
	}
	hostPattern := regexp.MustCompile(`(?i)\b(?:[a-z0-9-]+\.)+[a-z]{2,}\b`)
	checked := 0
	err := filepath.WalkDir(fixtureRoot, func(path string, entry os.DirEntry, err error) error {
		if err != nil {
			return err
		}
		rel, err := filepath.Rel(fixtureRoot, path)
		if err != nil {
			return err
		}
		pathText := filepath.ToSlash(rel)
		for _, token := range forbidden {
			if strings.Contains(pathText, token) {
				t.Fatalf("fixture path contains forbidden token %q: %s", token, pathText)
			}
		}
		if entry.IsDir() {
			return nil
		}
		body, err := os.ReadFile(path)
		if err != nil {
			return err
		}
		content := string(body)
		for _, token := range forbidden {
			if strings.Contains(content, token) {
				t.Fatalf("fixture content contains forbidden token %q: %s", token, pathText)
			}
		}
		for _, host := range hostPattern.FindAllString(content, -1) {
			if host != "api.example.com" {
				t.Fatalf("fixture content contains disallowed hostname %q: %s", host, pathText)
			}
		}
		checked++
		return nil
	})
	if err != nil {
		t.Fatalf("walk fixtures: %v", err)
	}
	t.Logf("checked %d sanitized fixture files", checked)
}