@@ -42,79 +42,122 @@ describe('response negotiation', () => {
42
42
expect ( res . status ) . toEqual ( 200 ) ;
43
43
expect ( await res . text ( ) ) . toEqual ( 'test: http://a.com/' ) ;
44
44
} ) ;
45
-
46
- it ( 'delay' , async ( ) => {
47
- fm . route ( '*' , 200 , { delay : 20 } ) ;
48
- const req = fm . fetchHandler ( 'http://a.com/' ) ;
49
- let resolved = false ;
50
- req . then ( ( ) => {
51
- resolved = true ;
45
+ describe ( 'delay' , ( ) => {
46
+ it ( 'delay' , async ( ) => {
47
+ fm . route ( '*' , 200 , { delay : 20 } ) ;
48
+ const req = fm . fetchHandler ( 'http://a.com/' ) ;
49
+ let resolved = false ;
50
+ req . then ( ( ) => {
51
+ resolved = true ;
52
+ } ) ;
53
+ await new Promise ( ( res ) => setTimeout ( res , 10 ) ) ;
54
+ expect ( resolved ) . toBe ( false ) ;
55
+ await new Promise ( ( res ) => setTimeout ( res , 11 ) ) ;
56
+ expect ( resolved ) . toBe ( true ) ;
57
+ const res = await req ;
58
+ expect ( res . status ) . toEqual ( 200 ) ;
52
59
} ) ;
53
- await new Promise ( ( res ) => setTimeout ( res , 10 ) ) ;
54
- expect ( resolved ) . toBe ( false ) ;
55
- await new Promise ( ( res ) => setTimeout ( res , 11 ) ) ;
56
- expect ( resolved ) . toBe ( true ) ;
57
- const res = await req ;
58
- expect ( res . status ) . toEqual ( 200 ) ;
59
- } ) ;
60
60
61
- it ( "delay a function response's execution" , async ( ) => {
62
- const startTimestamp = new Date ( ) . getTime ( ) ;
63
- fm . route ( 'http://a.com/' , ( ) => ( { timestamp : new Date ( ) . getTime ( ) } ) , {
64
- delay : 20 ,
61
+ it ( "delay a function response's execution" , async ( ) => {
62
+ const startTimestamp = new Date ( ) . getTime ( ) ;
63
+ fm . route ( 'http://a.com/' , ( ) => ( { timestamp : new Date ( ) . getTime ( ) } ) , {
64
+ delay : 20 ,
65
+ } ) ;
66
+ const req = fm . fetchHandler ( 'http://a.com/' ) ;
67
+ let resolved = false ;
68
+ req . then ( ( ) => {
69
+ resolved = true ;
70
+ } ) ;
71
+ await new Promise ( ( res ) => setTimeout ( res , 10 ) ) ;
72
+ expect ( resolved ) . toBe ( false ) ;
73
+ await new Promise ( ( res ) => setTimeout ( res , 11 ) ) ;
74
+ expect ( resolved ) . toBe ( true ) ;
75
+ const res = await req ;
76
+ expect ( res . status ) . toEqual ( 200 ) ;
77
+ const responseTimestamp = ( await res . json ( ) ) . timestamp ;
78
+ expect ( responseTimestamp - startTimestamp ) . toBeGreaterThanOrEqual ( 20 ) ;
65
79
} ) ;
66
- const req = fm . fetchHandler ( 'http://a.com/' ) ;
67
- let resolved = false ;
68
- req . then ( ( ) => {
69
- resolved = true ;
80
+
81
+ it ( 'pass values to delayed function' , async ( ) => {
82
+ fm . route ( '*' , ( { url } ) => `delayed: ${ url } ` , {
83
+ delay : 10 ,
84
+ } ) ;
85
+ const req = fm . fetchHandler ( 'http://a.com/' ) ;
86
+ await new Promise ( ( res ) => setTimeout ( res , 11 ) ) ;
87
+ const res = await req ;
88
+ expect ( res . status ) . toEqual ( 200 ) ;
89
+ expect ( await res . text ( ) ) . toEqual ( 'delayed: http://a.com/' ) ;
70
90
} ) ;
71
- await new Promise ( ( res ) => setTimeout ( res , 10 ) ) ;
72
- expect ( resolved ) . toBe ( false ) ;
73
- await new Promise ( ( res ) => setTimeout ( res , 11 ) ) ;
74
- expect ( resolved ) . toBe ( true ) ;
75
- const res = await req ;
76
- expect ( res . status ) . toEqual ( 200 ) ;
77
- const responseTimestamp = ( await res . json ( ) ) . timestamp ;
78
- expect ( responseTimestamp - startTimestamp ) . toBeGreaterThanOrEqual ( 20 ) ;
79
- } ) ;
80
91
81
- it ( 'pass values to delayed function' , async ( ) => {
82
- fm . route ( '*' , ( { url } ) => `delayed: ${ url } ` , {
83
- delay : 10 ,
92
+ it ( 'call delayed response multiple times, each with the same delay' , async ( ) => {
93
+ fm . route ( '*' , 200 , { delay : 20 } ) ;
94
+ const req1 = fm . fetchHandler ( 'http://a.com/' ) ;
95
+ let resolved = false ;
96
+ req1 . then ( ( ) => {
97
+ resolved = true ;
98
+ } ) ;
99
+ await new Promise ( ( res ) => setTimeout ( res , 10 ) ) ;
100
+ expect ( resolved ) . toBe ( false ) ;
101
+ await new Promise ( ( res ) => setTimeout ( res , 11 ) ) ;
102
+ expect ( resolved ) . toBe ( true ) ;
103
+ const res1 = await req1 ;
104
+ expect ( res1 . status ) . toEqual ( 200 ) ;
105
+ const req2 = fm . fetchHandler ( 'http://a.com/' ) ;
106
+ resolved = false ;
107
+ req2 . then ( ( ) => {
108
+ resolved = true ;
109
+ } ) ;
110
+ await new Promise ( ( res ) => setTimeout ( res , 10 ) ) ;
111
+ expect ( resolved ) . toBe ( false ) ;
112
+ await new Promise ( ( res ) => setTimeout ( res , 11 ) ) ;
113
+ expect ( resolved ) . toBe ( true ) ;
114
+ const res2 = await req2 ;
115
+ expect ( res2 . status ) . toEqual ( 200 ) ;
84
116
} ) ;
85
- const req = fm . fetchHandler ( 'http://a.com/' ) ;
86
- await new Promise ( ( res ) => setTimeout ( res , 11 ) ) ;
87
- const res = await req ;
88
- expect ( res . status ) . toEqual ( 200 ) ;
89
- expect ( await res . text ( ) ) . toEqual ( 'delayed: http://a.com/' ) ;
90
117
} ) ;
91
118
92
- it ( 'call delayed response multiple times, each with the same delay' , async ( ) => {
93
- fm . route ( '*' , 200 , { delay : 20 } ) ;
94
- const req1 = fm . fetchHandler ( 'http://a.com/' ) ;
95
- let resolved = false ;
96
- req1 . then ( ( ) => {
97
- resolved = true ;
119
+ describe ( 'waitFor' , ( ) => {
120
+ it ( 'Error informatively if route to wait for does not exist' , ( ) => {
121
+ expect ( ( ) => fm . route ( '*' , 200 , { waitFor : 'huh' } ) ) . toThrow (
122
+ 'no way on your nelly' ,
123
+ ) ;
98
124
} ) ;
99
- await new Promise ( ( res ) => setTimeout ( res , 10 ) ) ;
100
- expect ( resolved ) . toBe ( false ) ;
101
- await new Promise ( ( res ) => setTimeout ( res , 11 ) ) ;
102
- expect ( resolved ) . toBe ( true ) ;
103
- const res1 = await req1 ;
104
- expect ( res1 . status ) . toEqual ( 200 ) ;
105
- const req2 = fm . fetchHandler ( 'http://a.com/' ) ;
106
- resolved = false ;
107
- req2 . then ( ( ) => {
108
- resolved = true ;
125
+ it ( 'Not respond until waited for route responds' , async ( ) => {
126
+ fm . route ( 'http://a.com' , 200 , 'route-a' ) . route ( 'http://b.com' , 200 , {
127
+ waitFor : 'route-a' ,
128
+ } ) ;
129
+ let lastRouteCalled ;
130
+ await Promise . all ( [
131
+ fm . fetchHandler ( 'http://b.com' ) . then ( ( ) => ( lastRouteCalled = 'b' ) ) ,
132
+ fm . fetchHandler ( 'http://a.com' ) . then ( ( ) => ( lastRouteCalled = 'a' ) ) ,
133
+ ] ) ;
134
+ expect ( lastRouteCalled ) . toEqual ( 'b' ) ;
135
+ } ) ;
136
+ it ( 'Can have multiple waits on the same route' , async ( ) => {
137
+ fm . route ( 'http://a.com' , 200 , 'route-a' )
138
+ . route ( 'http://b.com' , 200 , { waitFor : 'route-a' } )
139
+ . route ( 'http://c.com' , 200 , { waitFor : 'route-a' } ) ;
140
+ let routesCalled = [ ] ;
141
+ await Promise . all ( [
142
+ fm . fetchHandler ( 'http://c.com' ) . then ( ( ) => routesCalled . push ( 'c' ) ) ,
143
+ fm . fetchHandler ( 'http://b.com' ) . then ( ( ) => routesCalled . push ( 'b' ) ) ,
144
+ fm . fetchHandler ( 'http://a.com' ) . then ( ( ) => routesCalled . push ( 'a' ) ) ,
145
+ ] ) ;
146
+ expect ( routesCalled ) . toEqual ( [ 'a' , 'c' , 'b' ] ) ;
147
+ } ) ;
148
+ it ( 'Can chain waits' , async ( ) => {
149
+ fm . route ( 'http://a.com' , 200 , 'route-a' )
150
+ . route ( 'http://b.com' , 200 , { name : 'route-b' , waitFor : 'route-a' } )
151
+ . route ( 'http://c.com' , 200 , { waitFor : 'route-b' } ) ;
152
+ let routesCalled = [ ] ;
153
+ await Promise . all ( [
154
+ fm . fetchHandler ( 'http://c.com' ) . then ( ( ) => routesCalled . push ( 'c' ) ) ,
155
+ fm . fetchHandler ( 'http://b.com' ) . then ( ( ) => routesCalled . push ( 'b' ) ) ,
156
+ fm . fetchHandler ( 'http://a.com' ) . then ( ( ) => routesCalled . push ( 'a' ) ) ,
157
+ ] ) ;
158
+ expect ( routesCalled ) . toEqual ( [ 'a' , 'b' , 'c' ] ) ;
109
159
} ) ;
110
- await new Promise ( ( res ) => setTimeout ( res , 10 ) ) ;
111
- expect ( resolved ) . toBe ( false ) ;
112
- await new Promise ( ( res ) => setTimeout ( res , 11 ) ) ;
113
- expect ( resolved ) . toBe ( true ) ;
114
- const res2 = await req2 ;
115
- expect ( res2 . status ) . toEqual ( 200 ) ;
116
160
} ) ;
117
-
118
161
it ( 'Response' , async ( ) => {
119
162
fm . route ( 'http://a.com/' , new Response ( 'http://a.com/' , { status : 200 } ) ) ;
120
163
const res = await fm . fetchHandler ( 'http://a.com/' ) ;
0 commit comments