Files

116 lines
3.0 KiB
Go
Raw Permalink Normal View History

package company
import (
"os"
"path/filepath"
"regexp"
"testing"
)
func TestNormalizeLanguage(t *testing.T) {
if got := NormalizeLanguage(" EN "); got != "en" {
t.Fatalf("NormalizeLanguage: got %q", got)
}
}
func TestParseLanguage_AllowedPopular(t *testing.T) {
for _, code := range []string{"en", "es", "fr", "de", "it", "pt", "nl", "pl", "ja"} {
got, err := ParseLanguage(code, false)
if err != nil || got != code {
t.Fatalf("ParseLanguage(%q): got=%q err=%v", code, got, err)
}
}
}
func TestParseLanguage_RejectsUnknown(t *testing.T) {
if _, err := ParseLanguage("xx", false); err == nil {
t.Fatal("expected error for unknown language")
}
}
func TestParseLanguage_EmptyDefault(t *testing.T) {
got, err := ParseLanguage("", true)
if err != nil || got != DefaultLanguage {
t.Fatalf("empty default: got=%q err=%v", got, err)
}
if _, err := ParseLanguage("", false); err == nil {
t.Fatal("expected error for empty without default")
}
}
func TestIsAllowedLanguage(t *testing.T) {
if !IsAllowedLanguage("JA") {
t.Fatal("ja should be allowed")
}
if IsAllowedLanguage("zh") {
t.Fatal("zh not in allowlist yet")
}
}
func TestLanguageLabel(t *testing.T) {
if got := LanguageLabel("fr"); got != "French" {
t.Fatalf("fr: got %q", got)
}
if got := LanguageLabel(""); got != "English" {
t.Fatalf("empty: got %q", got)
}
if got := LanguageLabel("xx"); got != "English" {
t.Fatalf("unknown: got %q", got)
}
}
func TestContentLanguagesSyncWithWebAllowlist(t *testing.T) {
root := findRepoRoot(t)
tsPath := filepath.Join(root, "apps", "web", "src", "lib", "content-languages.ts")
raw, err := os.ReadFile(tsPath)
if err != nil {
t.Fatalf("read %s: %v", tsPath, err)
}
webCodes := parseTSContentLanguageValues(string(raw))
if len(webCodes) == 0 {
t.Fatal("no value: \"xx\" entries parsed from content-languages.ts")
}
if len(webCodes) != len(ContentLanguages) {
t.Fatalf("length mismatch: web=%d go=%d\nweb=%v\ngo=%v", len(webCodes), len(ContentLanguages), webCodes, ContentLanguages)
}
for i, code := range ContentLanguages {
if webCodes[i] != code {
t.Fatalf("index %d: web=%q go=%q (keep content-languages.ts in sync with ContentLanguages)", i, webCodes[i], code)
}
if _, err := ParseLanguage(code, false); err != nil {
t.Fatalf("ParseLanguage(%q): %v", code, err)
}
}
}
func findRepoRoot(t *testing.T) string {
t.Helper()
dir, err := os.Getwd()
if err != nil {
t.Fatal(err)
}
for i := 0; i < 10; i++ {
candidate := filepath.Join(dir, "apps", "web", "src", "lib", "content-languages.ts")
if _, err := os.Stat(candidate); err == nil {
return dir
}
parent := filepath.Dir(dir)
if parent == dir {
break
}
dir = parent
}
t.Fatal("monorepo root not found (expected apps/web/src/lib/content-languages.ts)")
return ""
}
func parseTSContentLanguageValues(src string) []string {
re := regexp.MustCompile(`value:\s*"([a-z]{2})"`)
matches := re.FindAllStringSubmatch(src, -1)
out := make([]string, 0, len(matches))
for _, m := range matches {
out = append(out, m[1])
}
return out
}