| 27 | ) |
| 28 | |
| 29 | func TestHandler(t *testing.T) { |
| 30 | t.Parallel() |
| 31 | |
| 32 | var ( |
| 33 | want = []string{"example.txt"} |
| 34 | wantContents = []byte("hello world!") |
| 35 | ) |
| 36 | |
| 37 | dir := setupGitRepo(t) |
| 38 | |
| 39 | var h Handler |
| 40 | h.Init(t.Context(), dir, "HEAD") |
| 41 | |
| 42 | files, err := h.ListFiles(allFiles) |
| 43 | if err != nil { |
| 44 | t.Fatalf("unexpected error: %v", err) |
| 45 | } |
| 46 | |
| 47 | if d := cmp.Diff(want, files); d != "" { |
| 48 | t.Errorf("-got,+want: %s", d) |
| 49 | } |
| 50 | |
| 51 | r, err := h.GetFile("example.txt") |
| 52 | if err != nil { |
| 53 | t.Fatalf("unexpected error: %v", err) |
| 54 | } |
| 55 | t.Cleanup(func() { r.Close() }) |
| 56 | |
| 57 | contents, err := io.ReadAll(r) |
| 58 | if err != nil { |
| 59 | t.Fatalf("unexpected error: %v", err) |
| 60 | } |
| 61 | |
| 62 | if d := cmp.Diff(wantContents, contents); d != "" { |
| 63 | t.Errorf("-got,+want: %s", d) |
| 64 | } |
| 65 | |
| 66 | err = h.Cleanup() |
| 67 | if err != nil { |
| 68 | t.Fatalf("unexpected error: %v", err) |
| 69 | } |
| 70 | } |
| 71 | |
| 72 | func TestHandlerPathTraversal(t *testing.T) { |
| 73 | t.Parallel() |