123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- package parser
- import (
- "io/ioutil"
- "os"
- "testing"
- "github.com/stretchr/testify/assert"
- )
- const testApiTemplate = `
- info(
- title: doc title
- desc: >
- doc description first part,
- doc description second part<
- version: 1.0
- )
- type Request struct {
- Name string ` + "`" + `path:"name,options=you|me"` + "`" + `
- }
- type Response struct {
- Message string ` + "`" + `json:"message"` + "`" + `
- }
- service A-api {
- @server(
- handler: GreetHandler
- )
- get /greet/from/:name(Request) returns (Response)
- @server(
- handler: NoResponseHandler
- )
- get /greet/get(Request) returns
- }
- `
- const testMultiServiceTemplate = `
- info(
- title: doc title
- desc: >
- doc description first part,
- doc description second part<
- version: 1.0
- )
- type Request struct {
- Name string ` + "`" + `path:"name,options=you|me"` + "`" + `
- }
- type Response struct {
- Message string ` + "`" + `json:"message"` + "`" + `
- }
- service A-api {
- @server(
- handler: GreetHandler
- )
- get /greet/from/:name(Request) returns (Response)
- }
- service A-api {
- @server(
- handler: NoResponseHandler
- )
- get /greet/get(Request) returns
- }
- `
- const apiNoInfo = `
- type Request struct {
- Name string ` + "`" + `path:"name,options=you|me"` + "`" + `
- }
- type Response struct {
- Message string ` + "`" + `json:"message"` + "`" + `
- }
- service A-api {
- @server(
- handler: GreetHandler
- )
- get /greet/from/:name(Request) returns (Response)
- }
- `
- const invalidApiFile = `
- type Request struct {
- Name string ` + "`" + `path:"name,options=you|me"` + "`" + `
- }
- type Response struct {
- Message string ` + "`" + `json:"message"` + "`" + `
- }
- service A-api
- @server(
- handler: GreetHandler
- )
- get /greet/from/:name(Request) returns (Response)
- }
- `
- const anonymousAnnotation = `
- type Request struct {
- Name string ` + "`" + `path:"name,options=you|me"` + "`" + `
- }
- type Response struct {
- Message string ` + "`" + `json:"message"` + "`" + `
- }
- service A-api {
- @handler GreetHandler
- get /greet/from/:name(Request) returns (Response)
- }
- `
- const apiHasMiddleware = `
- type Request struct {
- Name string ` + "`" + `path:"name,options=you|me"` + "`" + `
- }
- type Response struct {
- Message string ` + "`" + `json:"message"` + "`" + `
- }
- @server(
- middleware: TokenValidate
- )
- service A-api {
- @handler GreetHandler
- get /greet/from/:name(Request) returns (Response)
- }
- `
- func TestParser(t *testing.T) {
- filename := "greet.api"
- err := ioutil.WriteFile(filename, []byte(testApiTemplate), os.ModePerm)
- assert.Nil(t, err)
- defer os.Remove(filename)
- parser, err := NewParser(filename)
- assert.Nil(t, err)
- api, err := parser.Parse()
- assert.Nil(t, err)
- assert.Equal(t, len(api.Types), 2)
- assert.Equal(t, len(api.Service.Routes), 2)
- assert.Equal(t, api.Service.Routes[0].Path, "/greet/from/:name")
- assert.Equal(t, api.Service.Routes[1].Path, "/greet/get")
- assert.Equal(t, api.Service.Routes[1].RequestType.Name, "Request")
- assert.Equal(t, api.Service.Routes[1].ResponseType.Name, "")
- }
- func TestMultiService(t *testing.T) {
- filename := "greet.api"
- err := ioutil.WriteFile(filename, []byte(testMultiServiceTemplate), os.ModePerm)
- assert.Nil(t, err)
- defer os.Remove(filename)
- parser, err := NewParser(filename)
- assert.Nil(t, err)
- api, err := parser.Parse()
- assert.Nil(t, err)
- assert.Equal(t, len(api.Service.Routes), 2)
- assert.Equal(t, len(api.Service.Groups), 2)
- }
- func TestApiNoInfo(t *testing.T) {
- filename := "greet.api"
- err := ioutil.WriteFile(filename, []byte(apiNoInfo), os.ModePerm)
- assert.Nil(t, err)
- defer os.Remove(filename)
- parser, err := NewParser(filename)
- assert.Nil(t, err)
- _, err = parser.Parse()
- assert.Nil(t, err)
- }
- func TestInvalidApiFile(t *testing.T) {
- filename := "greet.api"
- err := ioutil.WriteFile(filename, []byte(invalidApiFile), os.ModePerm)
- assert.Nil(t, err)
- defer os.Remove(filename)
- parser, err := NewParser(filename)
- assert.Nil(t, err)
- _, err = parser.Parse()
- assert.NotNil(t, err)
- }
- func TestAnonymousAnnotation(t *testing.T) {
- filename := "greet.api"
- err := ioutil.WriteFile(filename, []byte(anonymousAnnotation), os.ModePerm)
- assert.Nil(t, err)
- defer os.Remove(filename)
- parser, err := NewParser(filename)
- assert.Nil(t, err)
- api, err := parser.Parse()
- assert.Nil(t, err)
- assert.Equal(t, len(api.Service.Routes), 1)
- assert.Equal(t, api.Service.Routes[0].Annotations[0].Value, "GreetHandler")
- }
- func TestApiHasMiddleware(t *testing.T) {
- filename := "greet.api"
- err := ioutil.WriteFile(filename, []byte(apiHasMiddleware), os.ModePerm)
- assert.Nil(t, err)
- defer os.Remove(filename)
- parser, err := NewParser(filename)
- assert.Nil(t, err)
- _, err = parser.Parse()
- assert.Nil(t, err)
- }
|