Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b23edb4

Browse files
committed
WIP
1 parent 08f1f26 commit b23edb4

File tree

1 file changed

+65
-3
lines changed

1 file changed

+65
-3
lines changed

coderd/coderdtest/swagger_test.go

Lines changed: 65 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,80 @@
11
package coderdtest
22

33
import (
4+
"go/ast"
5+
"go/parser"
6+
"go/token"
47
"net/http"
8+
"strings"
59
"testing"
610

711
"github.com/go-chi/chi/v5"
812
"github.com/stretchr/testify/require"
13+
"golang.org/x/xerrors"
914
)
1015

16+
type swaggerComment struct {
17+
method string
18+
router string
19+
}
20+
1121
func TestAllEndpointsDocumented(t *testing.T) {
12-
_, _, api := NewWithAPI(t, nil)
22+
t.Parallel()
23+
24+
swaggerCommentss, err := parseSwaggerComments("..") // TODO enterprise
25+
require.NoError(t, err, "can't parse swagger comments")
1326

14-
err := chi.Walk(api.APIHandler, func(method, route string, handler http.Handler, middlewares ...func(http.Handler) http.Handler) error {
27+
for _, c := range swaggerCommentss {
28+
t.Log(c.method, c.router)
29+
}
30+
31+
_, _, api := NewWithAPI(t, nil)
32+
err = chi.Walk(api.APIHandler, func(method, route string, handler http.Handler, middlewares ...func(http.Handler) http.Handler) error {
1533
return nil
1634
})
17-
require.NoError(t, err)
35+
require.Error(t, err)
36+
}
37+
38+
func parseSwaggerComments(dir string) ([]swaggerComment, error) {
39+
fileSet := token.NewFileSet()
40+
commentNodes, err := parser.ParseDir(fileSet, dir, nil, parser.ParseComments)
41+
if err != nil {
42+
return nil, xerrors.Errorf(`can't parse directory "%s": %w`, dir)
43+
}
44+
45+
var swaggerComments []swaggerComment
46+
for _, commentNode := range commentNodes {
47+
ast.Inspect(commentNode, func(n ast.Node) bool {
48+
commentGroup, ok := n.(*ast.CommentGroup)
49+
if !ok {
50+
return true
51+
}
52+
53+
var isSwaggerComment bool
54+
for _, line := range commentGroup.List {
55+
text := strings.TrimSpace(line.Text)
56+
if strings.HasPrefix(text, "//") && strings.Contains(text, "@Router") {
57+
isSwaggerComment = true
58+
break
59+
}
60+
}
61+
62+
if isSwaggerComment {
63+
swaggerComments = append(swaggerComments, parseSwaggerComment(commentGroup))
64+
}
65+
return true
66+
})
67+
}
68+
return swaggerComments, nil
69+
}
70+
71+
func parseSwaggerComment(commentGroup *ast.CommentGroup) swaggerComment {
72+
var c swaggerComment
73+
for _, line := range commentGroup.List {
74+
text := strings.TrimSpace(line.Text)
75+
if strings.Contains(text, "@Router ") {
76+
c.router = strings.SplitN(text, " ", 3)[2]
77+
}
78+
}
79+
return c
1880
}

0 commit comments

Comments
 (0)