@@ -8,29 +8,34 @@ import * as net from 'net';
8
8
9
9
import { Event , Request , User } from '../src' ;
10
10
import { NodeClient } from '../src/client' ;
11
- import { parseRequest , tracingHandler } from '../src/handlers' ;
11
+ import { ExpressRequest , parseRequest , tracingHandler } from '../src/handlers' ;
12
12
13
13
describe ( 'parseRequest' , ( ) => {
14
14
let mockReq : { [ key : string ] : any } ;
15
15
16
16
beforeEach ( ( ) => {
17
17
mockReq = {
18
+ baseUrl : '/routerMountPath' ,
18
19
body : 'foo' ,
19
20
cookies : { test : 'test' } ,
20
21
headers : {
21
22
host : 'mattrobenolt.com' ,
22
23
} ,
23
24
method : 'POST' ,
24
- originalUrl : '/some/originalUrl?key=value' ,
25
+ originalUrl : '/routerMountPath/subpath/specificValue?querystringKey=querystringValue' ,
26
+ path : '/subpath/specificValue' ,
27
+ query : {
28
+ querystringKey : 'querystringValue' ,
29
+ } ,
25
30
route : {
26
- path : '/path ' ,
31
+ path : '/subpath/:parameterName ' ,
27
32
stack : [
28
33
{
29
- name : 'routeHandler ' ,
34
+ name : 'parameterNameRouteHandler ' ,
30
35
} ,
31
36
] ,
32
37
} ,
33
- url : '/some/url?key=value ' ,
38
+ url : '/subpath/specificValue?querystringKey=querystringValue ' ,
34
39
user : {
35
40
custom_property : 'foo' ,
36
41
email : 'tobias@mail.com' ,
@@ -42,17 +47,17 @@ describe('parseRequest', () => {
42
47
43
48
describe ( 'parseRequest.contexts runtime' , ( ) => {
44
49
test ( 'runtime name must contain node' , ( ) => {
45
- const parsedRequest : Event = parseRequest ( { } , mockReq ) ;
50
+ const parsedRequest : Event = parseRequest ( { } , mockReq as ExpressRequest ) ;
46
51
expect ( ( parsedRequest . contexts ! . runtime as Runtime ) . name ) . toEqual ( 'node' ) ;
47
52
} ) ;
48
53
49
54
test ( 'runtime version must contain current node version' , ( ) => {
50
- const parsedRequest : Event = parseRequest ( { } , mockReq ) ;
55
+ const parsedRequest : Event = parseRequest ( { } , mockReq as ExpressRequest ) ;
51
56
expect ( ( parsedRequest . contexts ! . runtime as Runtime ) . version ) . toEqual ( process . version ) ;
52
57
} ) ;
53
58
54
59
test ( 'runtime disbaled by options' , ( ) => {
55
- const parsedRequest : Event = parseRequest ( { } , mockReq , {
60
+ const parsedRequest : Event = parseRequest ( { } , mockReq as ExpressRequest , {
56
61
version : false ,
57
62
} ) ;
58
63
expect ( parsedRequest ) . not . toHaveProperty ( 'contexts.runtime' ) ;
@@ -64,12 +69,12 @@ describe('parseRequest', () => {
64
69
const CUSTOM_USER_KEYS = [ 'custom_property' ] ;
65
70
66
71
test ( 'parseRequest.user only contains the default properties from the user' , ( ) => {
67
- const parsedRequest : Event = parseRequest ( { } , mockReq ) ;
72
+ const parsedRequest : Event = parseRequest ( { } , mockReq as ExpressRequest ) ;
68
73
expect ( Object . keys ( parsedRequest . user as User ) ) . toEqual ( DEFAULT_USER_KEYS ) ;
69
74
} ) ;
70
75
71
76
test ( 'parseRequest.user only contains the custom properties specified in the options.user array' , ( ) => {
72
- const parsedRequest : Event = parseRequest ( { } , mockReq , {
77
+ const parsedRequest : Event = parseRequest ( { } , mockReq as ExpressRequest , {
73
78
user : CUSTOM_USER_KEYS ,
74
79
} ) ;
75
80
expect ( Object . keys ( parsedRequest . user as User ) ) . toEqual ( CUSTOM_USER_KEYS ) ;
@@ -95,7 +100,7 @@ describe('parseRequest', () => {
95
100
{
96
101
...mockReq ,
97
102
ip : '123' ,
98
- } ,
103
+ } as ExpressRequest ,
99
104
{
100
105
ip : true ,
101
106
} ,
@@ -110,8 +115,8 @@ describe('parseRequest', () => {
110
115
...mockReq ,
111
116
connection : {
112
117
remoteAddress : '321' ,
113
- } ,
114
- } ,
118
+ } as net . Socket ,
119
+ } as ExpressRequest ,
115
120
{
116
121
ip : true ,
117
122
} ,
@@ -123,55 +128,56 @@ describe('parseRequest', () => {
123
128
describe ( 'parseRequest.request properties' , ( ) => {
124
129
test ( 'parseRequest.request only contains the default set of properties from the request' , ( ) => {
125
130
const DEFAULT_REQUEST_PROPERTIES = [ 'cookies' , 'data' , 'headers' , 'method' , 'query_string' , 'url' ] ;
126
- const parsedRequest : Event = parseRequest ( { } , mockReq ) ;
131
+ const parsedRequest : Event = parseRequest ( { } , mockReq as ExpressRequest ) ;
127
132
expect ( Object . keys ( parsedRequest . request as Request ) ) . toEqual ( DEFAULT_REQUEST_PROPERTIES ) ;
128
133
} ) ;
129
134
130
135
test ( 'parseRequest.request only contains the specified properties in the options.request array' , ( ) => {
131
136
const INCLUDED_PROPERTIES = [ 'data' , 'headers' , 'query_string' , 'url' ] ;
132
- const parsedRequest : Event = parseRequest ( { } , mockReq , {
137
+ const parsedRequest : Event = parseRequest ( { } , mockReq as ExpressRequest , {
133
138
request : INCLUDED_PROPERTIES ,
134
139
} ) ;
135
140
expect ( Object . keys ( parsedRequest . request as Request ) ) . toEqual ( INCLUDED_PROPERTIES ) ;
136
141
} ) ;
137
142
138
143
test ( 'parseRequest.request skips `body` property for GET and HEAD requests' , ( ) => {
139
- expect ( parseRequest ( { } , mockReq , { } ) . request ) . toHaveProperty ( 'data' ) ;
140
- expect ( parseRequest ( { } , { ...mockReq , method : 'GET' } , { } ) . request ) . not . toHaveProperty ( 'data' ) ;
141
- expect ( parseRequest ( { } , { ...mockReq , method : 'HEAD' } , { } ) . request ) . not . toHaveProperty ( 'data' ) ;
144
+ expect ( parseRequest ( { } , mockReq as ExpressRequest , { } ) . request ) . toHaveProperty ( 'data' ) ;
145
+ expect ( parseRequest ( { } , { ...mockReq , method : 'GET' } as ExpressRequest , { } ) . request ) . not . toHaveProperty ( 'data' ) ;
146
+ expect ( parseRequest ( { } , { ...mockReq , method : 'HEAD' } as ExpressRequest , { } ) . request ) . not . toHaveProperty ( 'data' ) ;
142
147
} ) ;
143
148
} ) ;
144
149
145
150
describe ( 'parseRequest.transaction property' , ( ) => {
146
- test ( 'extracts method and full route path by default from `originalUrl `' , ( ) => {
147
- const parsedRequest : Event = parseRequest ( { } , mockReq ) ;
148
- expect ( parsedRequest . transaction ) . toEqual ( 'POST /some/originalUrl ' ) ;
151
+ test ( 'extracts method and full route path by default`' , ( ) => {
152
+ const parsedRequest : Event = parseRequest ( { } , mockReq as ExpressRequest ) ;
153
+ expect ( parsedRequest . transaction ) . toEqual ( 'POST /routerMountPath/subpath/:parameterName ' ) ;
149
154
} ) ;
150
155
151
- test ( 'extracts method and full route path by default from `url` if `originalUrl` is not present' , ( ) => {
152
- delete mockReq . originalUrl ;
153
- const parsedRequest : Event = parseRequest ( { } , mockReq ) ;
154
- expect ( parsedRequest . transaction ) . toEqual ( 'POST /some/url' ) ;
156
+ test ( 'extracts method and full path by default when mountpoint is `/`' , ( ) => {
157
+ mockReq . originalUrl = mockReq . originalUrl . replace ( '/routerMountpath' , '' ) ;
158
+ mockReq . baseUrl = '' ;
159
+ const parsedRequest : Event = parseRequest ( { } , mockReq as ExpressRequest ) ;
160
+ // "sub"path is the full path here, because there's no router mount path
161
+ expect ( parsedRequest . transaction ) . toEqual ( 'POST /subpath/:parameterName' ) ;
155
162
} ) ;
156
163
157
- test ( 'fallback to method and `route.path` if previous attempts failed' , ( ) => {
158
- delete mockReq . originalUrl ;
159
- delete mockReq . url ;
160
- const parsedRequest : Event = parseRequest ( { } , mockReq ) ;
161
- expect ( parsedRequest . transaction ) . toEqual ( 'POST /path' ) ;
164
+ test ( 'fallback to method and `originalUrl` if route is missing' , ( ) => {
165
+ delete mockReq . route ;
166
+ const parsedRequest : Event = parseRequest ( { } , mockReq as ExpressRequest ) ;
167
+ expect ( parsedRequest . transaction ) . toEqual ( 'POST /routerMountPath/subpath/specificValue' ) ;
162
168
} ) ;
163
169
164
170
test ( 'can extract path only instead if configured' , ( ) => {
165
- const parsedRequest : Event = parseRequest ( { } , mockReq , { transaction : 'path' } ) ;
166
- expect ( parsedRequest . transaction ) . toEqual ( '/some/originalUrl ' ) ;
171
+ const parsedRequest : Event = parseRequest ( { } , mockReq as ExpressRequest , { transaction : 'path' } ) ;
172
+ expect ( parsedRequest . transaction ) . toEqual ( '/routerMountPath/subpath/:parameterName ' ) ;
167
173
} ) ;
168
174
169
175
test ( 'can extract handler name instead if configured' , ( ) => {
170
- const parsedRequest : Event = parseRequest ( { } , mockReq , { transaction : 'handler' } ) ;
171
- expect ( parsedRequest . transaction ) . toEqual ( 'routeHandler ' ) ;
176
+ const parsedRequest : Event = parseRequest ( { } , mockReq as ExpressRequest , { transaction : 'handler' } ) ;
177
+ expect ( parsedRequest . transaction ) . toEqual ( 'parameterNameRouteHandler ' ) ;
172
178
} ) ;
173
179
} ) ;
174
- } ) ; // end describe('parseRequest()')
180
+ } ) ;
175
181
176
182
describe ( 'tracingHandler' , ( ) => {
177
183
const urlString = 'http://dogs.are.great:1231/yay/' ;
0 commit comments