1package filesystem
2
3import (
4 "context"
5 "os"
6 "path/filepath"
7 "testing"
8)
9
10func TestResolveExistingPath(t *testing.T) {
11 ctx := context.Background()
12 adapter := New()
13 tmpDir := t.TempDir()
14 file := filepath.Join(tmpDir, "page.html")
15 if err := os.WriteFile(file, []byte("ok"), 0644); err != nil {
16 t.Fatal(err)
17 }
18 wantFile, err := filepath.EvalSymlinks(file)
19 if err != nil {
20 t.Fatal(err)
21 }
22
23 oldWD, err := os.Getwd()
24 if err != nil {
25 t.Fatal(err)
26 }
27 if err := os.Chdir(tmpDir); err != nil {
28 t.Fatal(err)
29 }
30 t.Cleanup(func() { _ = os.Chdir(oldWD) })
31
32 t.Setenv("HOME", tmpDir)
33
34 tests := []struct {
35 name string
36 input string
37 }{
38 {name: "absolute", input: file},
39 {name: "relative", input: "page.html"},
40 {name: "home", input: "~/page.html"},
41 }
42
43 for _, tt := range tests {
44 t.Run(tt.name, func(t *testing.T) {
45 got, ok, err := adapter.ResolveExistingPath(ctx, tt.input)
46 if err != nil {
47 t.Fatalf("ResolveExistingPath returned error: %v", err)
48 }
49 if !ok {
50 t.Fatalf("ResolveExistingPath ok=false")
51 }
52 gotFile, err := filepath.EvalSymlinks(got)
53 if err != nil {
54 t.Fatal(err)
55 }
56 if gotFile != wantFile {
57 t.Fatalf("ResolveExistingPath(%q) = %q, want %q", tt.input, gotFile, wantFile)
58 }
59 })
60 }
61}
62
63func TestResolveExistingPathMissing(t *testing.T) {
64 got, ok, err := New().ResolveExistingPath(context.Background(), filepath.Join(t.TempDir(), "missing.html"))
65 if err != nil {
66 t.Fatalf("ResolveExistingPath returned error: %v", err)
67 }
68 if ok || got != "" {
69 t.Fatalf("ResolveExistingPath missing = (%q, %v), want empty false", got, ok)
70 }
71}