Skip to content

Commit dd30509

Browse files
committed
fix refactoring JavaScript event handler
1 parent 350af6b commit dd30509

File tree

13 files changed

+46
-25
lines changed

13 files changed

+46
-25
lines changed

engine/mokapi_on_test.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"mokapi/engine"
77
"mokapi/engine/common"
88
"mokapi/engine/enginetest"
9+
"mokapi/js/mokapi"
910
"testing"
1011

1112
"github.com/sirupsen/logrus"
@@ -35,7 +36,7 @@ export default () => {
3536
Headers: map[string]any{"Content-Type": "application/json"},
3637
}
3738
actions := evt.Emit("http", &common.EventRequest{}, res)
38-
require.Equal(t, "text/plain", res.Headers["Content-Type"])
39+
require.Equal(t, "text/plain", mokapi.Export(res.Headers["Content-Type"]))
3940
return actions
4041
},
4142
test: func(t *testing.T, actions []*common.Action, _ *test.Hook, err error) {
@@ -111,13 +112,13 @@ export default () => {
111112
test: func(t *testing.T, actions []*common.Action, hook *test.Hook, err error) {
112113
require.NoError(t, err)
113114
require.NotNil(t, actions[0].Error)
114-
require.Equal(t, "statusCode must be a Integer at test.js:4:6(3)", actions[0].Error.Message)
115+
require.Equal(t, "failed to set statusCode: expected Integer but got String at test.js:4:6(3)", actions[0].Error.Message)
115116

116117
var res *common.EventResponse
117118
err = json.Unmarshal([]byte(actions[0].Parameters[1].(string)), &res)
118119
require.Equal(t, 0, res.StatusCode)
119120
require.Len(t, hook.Entries, 2)
120-
require.Equal(t, "unable to execute event handler: statusCode must be a Integer at test.js:4:6(3)", hook.LastEntry().Message)
121+
require.Equal(t, "unable to execute event handler: failed to set statusCode: expected Integer but got String at test.js:4:6(3)", hook.LastEntry().Message)
121122
},
122123
},
123124
{
@@ -159,13 +160,13 @@ export default () => {
159160
test: func(t *testing.T, actions []*common.Action, hook *test.Hook, err error) {
160161
require.NoError(t, err)
161162
require.NotNil(t, actions[0].Error)
162-
require.Equal(t, "body must be a String at test.js:4:6(5)", actions[0].Error.Message)
163+
require.Equal(t, "failed to set body: expected String but got Object at test.js:4:6(5)", actions[0].Error.Message)
163164

164165
var res *common.EventResponse
165166
err = json.Unmarshal([]byte(actions[0].Parameters[1].(string)), &res)
166167
require.Equal(t, "", res.Body)
167168
require.Len(t, hook.Entries, 2)
168-
require.Equal(t, "unable to execute event handler: body must be a String at test.js:4:6(5)", hook.LastEntry().Message)
169+
require.Equal(t, "unable to execute event handler: failed to set body: expected String but got Object at test.js:4:6(5)", hook.LastEntry().Message)
169170
},
170171
},
171172
{
@@ -206,15 +207,15 @@ export default () => {
206207
res := &common.EventResponse{}
207208
actions := evt.Emit("http", &common.EventRequest{}, res)
208209
require.Nil(t, actions[0].Error)
209-
require.Equal(t, &map[string]any{"foo": "yuh"}, res.Data)
210+
require.Equal(t, map[string]any{"foo": "yuh"}, mokapi.Export(res.Data))
210211
return actions
211212
},
212213
test: func(t *testing.T, actions []*common.Action, hook *test.Hook, err error) {
213214
require.NoError(t, err)
214215

215216
var res *common.EventResponse
216217
err = json.Unmarshal([]byte(actions[0].Parameters[1].(string)), &res)
217-
require.Equal(t, map[string]any{"foo": "yuh"}, res.Data)
218+
require.Equal(t, map[string]any{"foo": "yuh"}, mokapi.Export(res.Data))
218219
},
219220
},
220221
{
@@ -230,15 +231,15 @@ export default () => {
230231
res := &common.EventResponse{Data: map[string]any{"foo": "bar"}}
231232
actions := evt.Emit("http", &common.EventRequest{}, res)
232233
require.Nil(t, actions[0].Error)
233-
require.Equal(t, map[string]any{"foo": "yuh"}, res.Data)
234+
require.Equal(t, map[string]any{"foo": "yuh"}, mokapi.Export(res.Data))
234235
return actions
235236
},
236237
test: func(t *testing.T, actions []*common.Action, hook *test.Hook, err error) {
237238
require.NoError(t, err)
238239

239240
var res *common.EventResponse
240241
err = json.Unmarshal([]byte(actions[0].Parameters[1].(string)), &res)
241-
require.Equal(t, map[string]any{"foo": "yuh"}, res.Data)
242+
require.Equal(t, map[string]any{"foo": "yuh"}, mokapi.Export(res.Data))
242243
},
243244
},
244245
}

kafka/protocol.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ func Register(reg ApiReg, req, res Message, flexibleRequest int16, flexibleRespo
122122
func(d *Decoder, version int16) (Message, error) {
123123
decode, ok := requestTypes.decode[version]
124124
if !ok {
125-
return nil, fmt.Errorf("unsupported version %v", version)
125+
return nil, fmt.Errorf("%s protocol: unsupported version %v", apitext[reg.ApiKey], version)
126126
}
127127
msg := reflect.New(tReq).Interface().(Message)
128128
decode(d, reflect.ValueOf(msg).Elem())
@@ -131,7 +131,7 @@ func Register(reg ApiReg, req, res Message, flexibleRequest int16, flexibleRespo
131131
func(e *Encoder, version int16, msg Message) error {
132132
encode, ok := requestTypes.encode[version]
133133
if !ok {
134-
return fmt.Errorf("unsupported version %v", version)
134+
return fmt.Errorf("%s protocol: unsupported version %v", apitext[reg.ApiKey], version)
135135
}
136136
encode(e, reflect.ValueOf(msg).Elem())
137137
return nil
@@ -141,7 +141,7 @@ func Register(reg ApiReg, req, res Message, flexibleRequest int16, flexibleRespo
141141
func(d *Decoder, version int16) (Message, error) {
142142
decode, ok := responseTypes.decode[version]
143143
if !ok {
144-
return nil, fmt.Errorf("unsupported version %v", version)
144+
return nil, fmt.Errorf("%s protocol: unsupported version %v", apitext[reg.ApiKey], version)
145145
}
146146
msg := reflect.New(tRes).Interface().(Message)
147147
decode(d, reflect.ValueOf(msg).Elem())
@@ -150,7 +150,7 @@ func Register(reg ApiReg, req, res Message, flexibleRequest int16, flexibleRespo
150150
func(e *Encoder, version int16, msg Message) error {
151151
encode, ok := responseTypes.encode[version]
152152
if !ok {
153-
return fmt.Errorf("unsupported version %v", version)
153+
return fmt.Errorf("%s protocol: unsupported version %v", apitext[reg.ApiKey], version)
154154
}
155155
encode(e, reflect.ValueOf(msg).Elem())
156156
return nil

lib/type.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ func TypeString(t reflect.Type) string {
1616
return "Number"
1717
case reflect.Bool:
1818
return "Boolean"
19-
case reflect.Map:
19+
case reflect.Map, reflect.Struct:
2020
return "Object"
2121
case reflect.String:
2222
return "String"

providers/asyncapi3/asyncapi3test/message.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package asyncapi3test
22

33
import (
44
"mokapi/providers/asyncapi3"
5+
openapi "mokapi/providers/openapi/schema"
56
"mokapi/schema/json/schema"
67
)
78

@@ -21,6 +22,15 @@ func WithPayload(s *schema.Schema) MessageOptions {
2122
}
2223
}
2324

25+
func WithPayloadOpenAPI(s *openapi.Schema) MessageOptions {
26+
return func(m *asyncapi3.Message) {
27+
m.Payload = &asyncapi3.SchemaRef{Value: &asyncapi3.MultiSchemaFormat{
28+
Schema: s,
29+
Format: "application/vnd.oai.openapi+json;version=3.0.0",
30+
}}
31+
}
32+
}
33+
2434
func WithPayloadMulti(format string, schema asyncapi3.Schema) MessageOptions {
2535
return func(m *asyncapi3.Message) {
2636
m.Payload = &asyncapi3.SchemaRef{Value: &asyncapi3.MultiSchemaFormat{

providers/openapi/handler.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ func (h *responseHandler) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
184184
return
185185
}
186186

187-
if ct, err := getContentType(response.Headers); ct != "" {
187+
if ct, err := getContentType(response.Headers); ct != "" && err == nil {
188188
contentType = media.ParseContentType(ct)
189189
} else if err != nil {
190190
writeError(rw, r, err, h.config.Info.Name)

providers/openapi/handler_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1091,11 +1091,11 @@ func TestHandler_Event(t *testing.T) {
10911091
rr := httptest.NewRecorder()
10921092
h(rr, r)
10931093
require.Equal(t, http.StatusInternalServerError, rr.Code)
1094-
require.Equal(t, "unexpected type for header 'Content-Type': got Array, expected String\n", rr.Body.String())
1094+
require.Equal(t, "invalid header 'Content-Type': expected a string or array of strings, but received Integer\n", rr.Body.String())
10951095
},
10961096
event: func(event string, args ...interface{}) []*common.Action {
10971097
res := args[1].(*common.EventResponse)
1098-
res.Headers["Content-Type"] = []string{"text/plain"}
1098+
res.Headers["Content-Type"] = 123
10991099
return nil
11001100
},
11011101
},
@@ -1139,7 +1139,7 @@ func TestHandler_Event(t *testing.T) {
11391139
rr := httptest.NewRecorder()
11401140
h(rr, r)
11411141
require.Equal(t, http.StatusInternalServerError, rr.Code)
1142-
require.Equal(t, "invalid header data for 'foo': error count 1:\n\t- expected array but got: bar\n", rr.Body.String())
1142+
require.Equal(t, "invalid header 'foo': error count 1:\n\t- expected array but got: bar\n", rr.Body.String())
11431143
},
11441144
event: func(event string, args ...interface{}) []*common.Action {
11451145
res := args[1].(*common.EventResponse)

providers/openapi/header.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ func (h *Header) patch(patch *Header) {
118118
func (h *Header) marshal(v any, rw http.ResponseWriter) error {
119119
i, err := p.ParseWith(v, schema.ConvertToJsonSchema(h.Schema))
120120
if err != nil {
121-
return fmt.Errorf("invalid header data for '%v': %w", h.Name, err)
121+
return err
122122
}
123123
switch vv := i.(type) {
124124
case string:
@@ -200,6 +200,6 @@ func getHeaderValue(value any) ([]string, error) {
200200
}
201201
return result, nil
202202
default:
203-
return nil, fmt.Errorf("expected a string or array of strings, but received %s", util.JsType(v))
203+
return nil, fmt.Errorf("expected a string or array of strings, but received %s", util.JsType(v.Interface()))
204204
}
205205
}

schema/json/parser/parser.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"fmt"
55
"mokapi/schema/json/schema"
66
"mokapi/sortedmap"
7-
"reflect"
87
"unicode"
98
)
109

@@ -142,10 +141,6 @@ func (p *Parser) parse(data interface{}, s *schema.Schema) (interface{}, error)
142141
}
143142

144143
func (p *Parser) parseType(data interface{}, s *schema.Schema, typeName string, evaluatedProperties map[string]bool, evaluatedItems map[int]bool) (interface{}, error) {
145-
v := reflect.ValueOf(data)
146-
if v.Kind() == reflect.Ptr {
147-
data = v.Elem().Interface()
148-
}
149144
switch data.(type) {
150145
case []interface{}:
151146
if typeName != "array" {

schema/json/parser/parser_bool.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import (
99
func (p *Parser) parseBoolean(i interface{}, s *schema.Schema) (bool, error) {
1010
var b bool
1111
switch v := i.(type) {
12+
case *bool:
13+
b = *v
1214
case bool:
1315
b = v
1416
case string:

schema/json/parser/parser_integer.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ import (
1010
func (p *Parser) ParseInteger(i interface{}, s *schema.Schema) (interface{}, error) {
1111
var n int64
1212
switch v := i.(type) {
13+
case *int:
14+
n = int64(*v)
15+
case *int64:
16+
n = *v
1317
case int:
1418
n = int64(v)
1519
case int64:

0 commit comments

Comments
 (0)