diff --git a/test/02access_request_test.go b/test/02access_request_test.go index c754ce1..b2d18bc 100644 --- a/test/02access_request_test.go +++ b/test/02access_request_test.go @@ -209,3 +209,35 @@ func TestAccessDeniedHandler(t *testing.T) { AssertError(t, res.ErrAccessDenied) }) } + +// Test that an access request without any access handler gives no response +func TestAccess_WithoutAccessHandler_SendsNoResponse(t *testing.T) { + runTest(t, func(s *Session) { + s.Handle("model", res.GetModel(func(r res.ModelRequest) { + r.Model(mock.Model) + })) + s.Handle("collection", res.Access(func(r res.AccessRequest) { + r.AccessGranted() + })) + }, func(s *Session) { + s.Request("access.test.model", mock.DefaultRequest()) + inb := s.Request("access.test.collection", mock.DefaultRequest()) + // Validate that the response is for the collection access, and not model access + s.GetMsg(t).AssertSubject(t, inb) + }) +} + +// Test that multiple responses to access request causes panic +func TestAccess_WithMultipleResponses_CausesPanic(t *testing.T) { + runTest(t, func(s *Session) { + s.Handle("model", res.Access(func(r res.AccessRequest) { + r.AccessGranted() + AssertPanic(t, func() { + r.AccessDenied() + }) + })) + }, func(s *Session) { + inb := s.Request("access.test.model", mock.Request()) + s.GetMsg(t).Equals(t, inb, mock.AccessGrantedResponse) + }) +} diff --git a/test/03get_request_test.go b/test/03get_request_test.go index a0fd6e4..24135b5 100644 --- a/test/03get_request_test.go +++ b/test/03get_request_test.go @@ -558,3 +558,30 @@ func TestGetCollectionQuery_WithoutQueryCollection_SendsQueryCollectionResponse( s.GetMsg(t).Equals(t, inb, mock.QueryCollectionResponse) }) } + +// Test that a get request without any get handler gives error system.notFound +func TestGet_WithoutGetHandler_SendsNotFoundError(t *testing.T) { + runTest(t, func(s *Session) { + s.Handle("model", res.Call("dummy", func(r res.CallRequest) { + r.OK(nil) + })) + }, func(s *Session) { + inb := s.Request("get.test.model", mock.Request()) + s.GetMsg(t).AssertSubject(t, inb).AssertError(t, res.ErrNotFound) + }) +} + +// Test that multiple responses to get request causes panic +func TestGet_WithMultipleResponses_CausesPanic(t *testing.T) { + runTest(t, func(s *Session) { + s.Handle("model", res.GetModel(func(r res.ModelRequest) { + r.Model(mock.Model) + AssertPanic(t, func() { + r.NotFound() + }) + })) + }, func(s *Session) { + inb := s.Request("get.test.model", mock.Request()) + s.GetMsg(t).Equals(t, inb, mock.ModelResponse) + }) +} diff --git a/test/04call_request_test.go b/test/04call_request_test.go index 2515fa6..76ca15a 100644 --- a/test/04call_request_test.go +++ b/test/04call_request_test.go @@ -403,3 +403,30 @@ func TestCallRequestTimeoutWithDurationLessThanZero(t *testing.T) { s.GetMsg(t).AssertSubject(t, inb).AssertErrorCode(t, "system.internalError") }) } + +// Test call request with an unset method returns error system.methodNotFound +func TestCallRequest_UnknownMethod_ErrorMethodNotFound(t *testing.T) { + runTest(t, func(s *Session) { + s.Handle("model", res.Call("method", func(r res.CallRequest) { + r.OK(nil) + })) + }, func(s *Session) { + inb := s.Request("call.test.model.unset", nil) + s.GetMsg(t).AssertSubject(t, inb).AssertError(t, res.ErrMethodNotFound) + }) +} + +// Test that multiple responses to call request causes panic +func TestCall_WithMultipleResponses_CausesPanic(t *testing.T) { + runTest(t, func(s *Session) { + s.Handle("model", res.Call("method", func(r res.CallRequest) { + r.OK(nil) + AssertPanic(t, func() { + r.MethodNotFound() + }) + })) + }, func(s *Session) { + inb := s.Request("call.test.model.method", mock.Request()) + s.GetMsg(t).AssertSubject(t, inb).AssertResult(t, nil) + }) +} diff --git a/test/06auth_request_test.go b/test/06auth_request_test.go index 7e91801..4fc5b84 100644 --- a/test/06auth_request_test.go +++ b/test/06auth_request_test.go @@ -420,3 +420,30 @@ func TestAuthRequestNilTokenEvent(t *testing.T) { s.GetMsg(t).AssertSubject(t, inb).AssertResult(t, nil) }) } + +// Test auth request with an unset method returns error system.methodNotFound +func TestAuthRequest_UnknownMethod_ErrorMethodNotFound(t *testing.T) { + runTest(t, func(s *Session) { + s.Handle("model", res.Auth("method", func(r res.AuthRequest) { + r.OK(nil) + })) + }, func(s *Session) { + inb := s.Request("auth.test.model.unset", mock.AuthRequest()) + s.GetMsg(t).AssertSubject(t, inb).AssertError(t, res.ErrMethodNotFound) + }) +} + +// Test that multiple responses to auth request causes panic +func TestAuth_WithMultipleResponses_CausesPanic(t *testing.T) { + runTest(t, func(s *Session) { + s.Handle("model", res.Auth("method", func(r res.AuthRequest) { + r.OK(nil) + AssertPanic(t, func() { + r.MethodNotFound() + }) + })) + }, func(s *Session) { + inb := s.Request("auth.test.model.method", mock.Request()) + s.GetMsg(t).AssertSubject(t, inb).AssertResult(t, nil) + }) +} diff --git a/test/resources.go b/test/resources.go index beed490..ac499a9 100644 --- a/test/resources.go +++ b/test/resources.go @@ -32,6 +32,7 @@ type Mock struct { ResultResponse json.RawMessage CustomError *res.Error Error error + AccessGrantedResponse json.RawMessage // Unserializables UnserializableValue interface{} UnserializableError *res.Error @@ -74,6 +75,7 @@ var mock = Mock{ json.RawMessage(`{"result":{"foo":"bar","zoo":42}}`), // ResultResponse &res.Error{Code: "test.custom", Message: "Custom error", Data: map[string]string{"foo": "bar"}}, // CustomError errors.New("custom error"), // Error + json.RawMessage(`{"result":{"get":true,"call":"*"}}`), // AccessGrantedResponse // Unserializables func() {}, // UnserializableValue &res.Error{Code: "test.unserializable", Message: "Unserializable", Data: func() {}}, // UnserializableError