Skip to content

Commit 78406b1

Browse files
committed
Hook up recursive case
1 parent 771f39d commit 78406b1

File tree

2 files changed

+42
-17
lines changed

2 files changed

+42
-17
lines changed

nextrouter/nextrouter.go

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package nextrouter
22

33
import (
4+
"fmt"
45
"io/fs"
56
"net/http"
67

@@ -9,7 +10,7 @@ import (
910

1011
func serve(fileSystem fs.FS, filePath string) http.HandlerFunc {
1112
return func(w http.ResponseWriter, r *http.Request) {
12-
13+
fmt.Println("Requesting file: " + filePath)
1314
bytes, err := fs.ReadFile(fileSystem, filePath)
1415

1516
if err != nil {
@@ -23,29 +24,29 @@ func serve(fileSystem fs.FS, filePath string) http.HandlerFunc {
2324
}
2425
}
2526

26-
func buildRouter(rtr chi.Router, fileSystem fs.FS, path string) {
27+
func buildRouter(rtr chi.Router, fileSystem fs.FS, name string) {
2728
files, err := fs.ReadDir(fileSystem, ".")
2829
if err != nil {
2930
// TODO(Bryan): Log
3031
return
3132
}
3233

33-
rtr.Route("/", func(r chi.Router) {
34-
for _, file := range files {
35-
name := file.Name()
36-
37-
if file.IsDir() {
38-
sub, err := fs.Sub(fileSystem, name)
39-
if err != nil {
40-
// TODO(Bryan): Log
41-
continue
42-
}
43-
buildRouter(r, sub, path+"/"+name)
44-
} else {
45-
rtr.Get("/"+name, serve(fileSystem, name))
34+
for _, file := range files {
35+
name := file.Name()
36+
37+
if file.IsDir() {
38+
sub, err := fs.Sub(fileSystem, name)
39+
if err != nil {
40+
// TODO(Bryan): Log
41+
continue
4642
}
43+
rtr.Route("/"+name, func(r chi.Router) {
44+
buildRouter(r, sub, name)
45+
})
46+
} else {
47+
rtr.Get("/"+name, serve(fileSystem, name))
4748
}
48-
})
49+
}
4950
}
5051

5152
// Handler returns an HTTP handler for serving a next-based static site

nextrouter/nextrouter_test.go

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ func request(server *httptest.Server, path string) (*http.Response, error) {
2626
return res, err
2727
}
2828

29-
func TestConn(t *testing.T) {
29+
func TestNextRouter(t *testing.T) {
3030
t.Parallel()
3131

3232
t.Run("Serves file at root", func(t *testing.T) {
@@ -50,6 +50,30 @@ func TestConn(t *testing.T) {
5050
require.Equal(t, res.StatusCode, 200)
5151
})
5252

53+
t.Run("Serves nested file", func(t *testing.T) {
54+
t.Parallel()
55+
56+
rootFS := memfs.New()
57+
err := rootFS.MkdirAll("test/a/b", 0777)
58+
require.NoError(t, err)
59+
60+
rootFS.WriteFile("test/a/b/c.html", []byte("test123"), 0755)
61+
require.NoError(t, err)
62+
63+
router, err := nextrouter.Handler(rootFS)
64+
require.NoError(t, err)
65+
server := httptest.NewServer(router)
66+
67+
res, err := request(server, "/test/a/b/c.html")
68+
require.NoError(t, err)
69+
defer res.Body.Close()
70+
71+
body, err := io.ReadAll(res.Body)
72+
require.NoError(t, err)
73+
require.Equal(t, string(body), "test123")
74+
require.Equal(t, res.StatusCode, 200)
75+
})
76+
5377
t.Run("404 if file at root is not found", func(t *testing.T) {
5478
t.Parallel()
5579

0 commit comments

Comments
 (0)