github.com/billybanfield/evergreen@v0.0.0-20170525200750-eeee692790f7/apiv3/route/route_test.go (about) 1 package route 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "net/http" 7 "net/http/httptest" 8 "testing" 9 10 "github.com/evergreen-ci/evergreen" 11 "github.com/evergreen-ci/evergreen/apiv3/model" 12 "github.com/evergreen-ci/evergreen/apiv3/servicecontext" 13 "github.com/gorilla/mux" 14 . "github.com/smartystreets/goconvey/convey" 15 ) 16 17 func TestMakeRoute(t *testing.T) { 18 19 // With a route with many methods 20 Convey("With mocked methods", t, func() { 21 getAuth := &mockAuthenticator{} 22 getHandler := &mockRequestHandler{ 23 storedModels: []model.Model{ 24 &model.MockModel{ 25 FieldId: "GET_method", 26 }, 27 }, 28 } 29 mockGet := MethodHandler{ 30 Authenticator: getAuth, 31 RequestHandler: getHandler, 32 MethodType: evergreen.MethodGet, 33 } 34 35 postAuth := &mockAuthenticator{} 36 postHandler := &mockRequestHandler{ 37 storedModels: []model.Model{ 38 &model.MockModel{ 39 FieldId: "POST_method", 40 }, 41 }, 42 } 43 mockPost := MethodHandler{ 44 Authenticator: postAuth, 45 RequestHandler: postHandler, 46 MethodType: evergreen.MethodPost, 47 } 48 49 deleteAuth := &mockAuthenticator{} 50 deleteHandler := &mockRequestHandler{ 51 storedModels: []model.Model{ 52 &model.MockModel{ 53 FieldId: "DELETE_method", 54 }, 55 }, 56 } 57 mockDelete := MethodHandler{ 58 Authenticator: deleteAuth, 59 RequestHandler: deleteHandler, 60 MethodType: evergreen.MethodDelete, 61 } 62 Convey("then adding and registering should result in a correct route", func() { 63 sc := &servicecontext.MockServiceContext{} 64 sc.SetPrefix("rest") 65 r := mux.NewRouter() 66 route := &RouteManager{ 67 Version: 2, 68 Route: "/test_path", 69 Methods: []MethodHandler{mockGet, mockPost, mockDelete}, 70 } 71 route.Register(r, sc) 72 73 for _, method := range route.Methods { 74 75 req, err := http.NewRequest(method.MethodType, "/rest/v2/test_path", nil) 76 77 So(err, ShouldBeNil) 78 rr := httptest.NewRecorder() 79 r.ServeHTTP(rr, req) 80 So(rr.Code, ShouldEqual, http.StatusOK) 81 82 res := model.MockModel{} 83 err = json.Unmarshal(rr.Body.Bytes(), &res) 84 85 So(err, ShouldBeNil) 86 So(res.FieldId, ShouldEqual, fmt.Sprintf("%s_method", method.MethodType)) 87 } 88 }) 89 }) 90 }