github.com/johnnyeven/libtools@v0.0.0-20191126065708-61829c1adf46/courier/swagger/gen/router_scanner_test.go (about)

     1  package gen
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  
     8  	"github.com/johnnyeven/libtools/codegen/loaderx"
     9  )
    10  
    11  func TestRouterScanner(t *testing.T) {
    12  	tt := assert.New(t)
    13  
    14  	pkgImportPath, program := loaderx.NewTestProgram(`
    15  	package main
    16  
    17  	import (
    18  		"context"
    19  		"github.com/johnnyeven/libtools/courier/httpx"
    20  		"github.com/johnnyeven/libtools/courier"
    21  	)
    22  
    23  	type Root struct {
    24  		courier.EmptyOperator
    25  	}
    26  
    27  	type Group struct {
    28  		courier.EmptyOperator
    29  	}
    30  
    31  	func (g Group) Path() string {
    32  		return "/group"
    33  	}
    34  
    35  	type Auth struct{}
    36  
    37  	func (auth Auth) Output(ctx context.Context) (result interface{}, err error) {
    38  		return
    39  	}
    40  
    41  	type Get struct {
    42  		httpx.MethodGet
    43  	}
    44  
    45  	func (get Get) Path() string {
    46  		return "/id"
    47  	}
    48  
    49  	func (get Get) Output(ctx context.Context) (result interface{}, err error) {
    50  		return
    51  	}
    52  
    53  	var Router = courier.NewRouter(Root{})
    54  
    55  	func main() {
    56  		group := courier.NewRouter(Group{})
    57  		group.Register(courier.NewRouter(Get{}))
    58  
    59  		Router.Register(group)
    60  		Router.Register(courier.NewRouter(Auth{}, Get{}))
    61  	}
    62  	`)
    63  
    64  	query := loaderx.NewQuery(program, pkgImportPath)
    65  	scanner := NewRouterScanner(program)
    66  
    67  	router := scanner.Router(query.Var("Router"))
    68  	routes := router.Routes(program)
    69  
    70  	tt.Len(routes, 2)
    71  }