func TestHandleRequest(t *testing.T) { hooks.ExecuteTrigger = func(className, when, method string, parameters map[string][]string, body map[string]interface{}, multipart *multipart.Form, user interface{}) (responseBody map[string]interface{}, err *utils.Error) { return } isGrantedFuncThatReturnsTrue := func(collection string, requestWrapper messages.RequestWrapper, dbAdapter *adapters.MongoAdapter) (isGranted bool, user map[string]interface{}, err *utils.Error) { isGranted = true return } isGrantedFuncThatReturnsFalse := func(collection string, requestWrapper messages.RequestWrapper, dbAdapter *adapters.MongoAdapter) (isGranted bool, user map[string]interface{}, err *utils.Error) { isGranted = false return } resetFunctions() Convey("Should call auth.GetPermissions", t, func() { var called bool auth.IsGranted = func(collection string, requestWrapper messages.RequestWrapper, dbAdapter *adapters.MongoAdapter) (isGranted bool, user map[string]interface{}, err *utils.Error) { called = true return } actor := &Actor{} actor.class = "someclass" handleRequest(actor, messages.RequestWrapper{}) So(called, ShouldBeTrue) }) Convey("Should return permission error", t, func() { auth.IsGranted = func(collection string, requestWrapper messages.RequestWrapper, dbAdapter *adapters.MongoAdapter) (isGranted bool, user map[string]interface{}, err *utils.Error) { err = &utils.Error{http.StatusInternalServerError, ""} return } actor := &Actor{} actor.class = "someclass" response := handleRequest(actor, messages.RequestWrapper{}) So(response.Status, ShouldEqual, http.StatusInternalServerError) }) ///////////////////////// // GET ///////////////////////// resetFunctions() Convey("Should call handleGet", t, func() { auth.IsGranted = isGrantedFuncThatReturnsTrue var called bool handleGet = func(a *Actor, requestWrapper messages.RequestWrapper) (response messages.Message, err *utils.Error) { called = true return } var m messages.Message m.Command = "get" var rw messages.RequestWrapper rw.Message = m actor := &Actor{} actor.class = "someclass" handleRequest(actor, rw) So(called, ShouldBeTrue) }) Convey("Should return Authorization error for GET", t, func() { auth.IsGranted = isGrantedFuncThatReturnsFalse var m messages.Message m.Command = "get" var rw messages.RequestWrapper rw.Message = m actor := &Actor{} actor.class = "someclass" response := handleRequest(actor, rw) So(response.Status, ShouldEqual, http.StatusUnauthorized) }) ///////////////////////// // POST ///////////////////////// Convey("Should call handlePost", t, func() { auth.IsGranted = isGrantedFuncThatReturnsTrue var called bool handlePost = func(a *Actor, requestWrapper messages.RequestWrapper, user interface{}) (response messages.Message, hookBody map[string]interface{}, err *utils.Error) { called = true return } var m messages.Message m.Command = "post" var rw messages.RequestWrapper rw.Message = m actor := &Actor{} actor.class = "someclass" handleRequest(actor, rw) So(called, ShouldBeTrue) }) Convey("Should return Authorization error for POST", t, func() { auth.IsGranted = isGrantedFuncThatReturnsFalse var m messages.Message m.Command = "post" var rw messages.RequestWrapper rw.Message = m actor := &Actor{} actor.class = "someclass" response := handleRequest(actor, rw) So(response.Status, ShouldEqual, http.StatusUnauthorized) }) ///////////////////////// // PUT ///////////////////////// Convey("Should call handlePut", t, func() { auth.IsGranted = isGrantedFuncThatReturnsTrue var called bool handlePut = func(a *Actor, requestWrapper messages.RequestWrapper) (response messages.Message, hookBody map[string]interface{}, err *utils.Error) { called = true return } var m messages.Message m.Command = "put" var rw messages.RequestWrapper rw.Message = m actor := &Actor{} actor.class = "someclass" handleRequest(actor, rw) So(called, ShouldBeTrue) }) Convey("Should return Authorization error for PUT", t, func() { auth.IsGranted = isGrantedFuncThatReturnsFalse var m messages.Message m.Command = "put" var rw messages.RequestWrapper rw.Message = m actor := &Actor{} actor.class = "someclass" response := handleRequest(actor, rw) So(response.Status, ShouldEqual, http.StatusUnauthorized) }) ///////////////////////// // DELETE ///////////////////////// Convey("Should call handleDelete", t, func() { auth.IsGranted = isGrantedFuncThatReturnsTrue var called bool handleDelete = func(a *Actor, requestWrapper messages.RequestWrapper) (response messages.Message, err *utils.Error) { called = true return } var m messages.Message m.Command = "delete" var rw messages.RequestWrapper rw.Message = m actor := &Actor{} actor.class = "someclass" handleRequest(actor, rw) So(called, ShouldBeTrue) }) Convey("Should call handleDelete and return error", t, func() { auth.IsGranted = isGrantedFuncThatReturnsTrue handleDelete = func(a *Actor, requestWrapper messages.RequestWrapper) (response messages.Message, err *utils.Error) { err = &utils.Error{http.StatusNotFound, "Item not found."} return } var m messages.Message m.Command = "delete" var rw messages.RequestWrapper rw.Message = m actor := &Actor{} actor.class = "someclass" response := handleRequest(actor, rw) So(response.Status, ShouldEqual, http.StatusNotFound) }) Convey("Should return Authorization error for DELETE", t, func() { auth.IsGranted = isGrantedFuncThatReturnsFalse var m messages.Message m.Command = "delete" var rw messages.RequestWrapper rw.Message = m actor := &Actor{} actor.class = "someclass" response := handleRequest(actor, rw) So(response.Status, ShouldEqual, http.StatusUnauthorized) }) }