1
1
import { createActor } from "../actor" ;
2
2
import { MessageType } from "../messages" ;
3
3
4
- function createTestAdapter < Messages = unknown > ( ) {
4
+ function createTestAdapter ( ) {
5
5
let listener : ( ( message : unknown ) => void ) | null ;
6
6
const removeListener = jest . fn ( ( ) => {
7
7
listener = null ;
@@ -12,10 +12,10 @@ function createTestAdapter<Messages = unknown>() {
12
12
simulatePlainMessage : ( message : unknown ) => {
13
13
listener ?.( message ) ;
14
14
} ,
15
- simulateDevtoolsMessage : ( message : Messages ) => {
15
+ simulateDevtoolsMessage : ( message : Record < string , unknown > ) => {
16
16
listener ?.( {
17
17
source : "apollo-client-devtools" ,
18
- type : MessageType . Event ,
18
+ type : MessageType . Actor ,
19
19
message,
20
20
} ) ;
21
21
} ,
@@ -29,171 +29,154 @@ function createTestAdapter<Messages = unknown>() {
29
29
}
30
30
31
31
test ( "sends messages to specified adapter in devtools message format" , ( ) => {
32
- type Message = { type : "test" ; payload : string } ;
33
-
34
32
const adapter = createTestAdapter ( ) ;
35
- const actor = createActor < Message > ( adapter ) ;
33
+ const actor = createActor ( adapter ) ;
36
34
37
- actor . send ( { type : "test " , payload : "Hello " } ) ;
35
+ actor . send ( { type : "clientTerminated " , clientId : "1 " } ) ;
38
36
39
37
expect ( adapter . postMessage ) . toHaveBeenCalledWith ( {
40
38
id : expect . any ( String ) ,
41
39
source : "apollo-client-devtools" ,
42
- type : MessageType . Event ,
40
+ type : MessageType . Actor ,
43
41
message : {
44
- type : "test " ,
45
- payload : "Hello " ,
42
+ type : "clientTerminated " ,
43
+ clientId : "1 " ,
46
44
} ,
47
45
} ) ;
48
46
} ) ;
49
47
50
48
test ( "calls message callback when subscribing to a message" , ( ) => {
51
- type Message = { type : "connect" ; payload : string } | { type : "disconnect" } ;
52
-
53
- const adapter = createTestAdapter < Message > ( ) ;
54
- const actor = createActor < Message > ( adapter ) ;
49
+ const adapter = createTestAdapter ( ) ;
50
+ const actor = createActor ( adapter ) ;
55
51
56
52
const handleConnect = jest . fn ( ) ;
57
53
const handleDisconnect = jest . fn ( ) ;
58
54
59
- actor . on ( "connect " , handleConnect ) ;
60
- actor . on ( "disconnect " , handleDisconnect ) ;
55
+ actor . on ( "initializePanel " , handleConnect ) ;
56
+ actor . on ( "clientTerminated " , handleDisconnect ) ;
61
57
62
- adapter . simulateDevtoolsMessage ( {
63
- type : "connect" ,
64
- payload : "Connected!" ,
65
- } ) ;
58
+ adapter . simulateDevtoolsMessage ( { type : "initializePanel" } ) ;
66
59
67
60
expect ( handleConnect ) . toHaveBeenCalledTimes ( 1 ) ;
68
- expect ( handleConnect ) . toHaveBeenCalledWith ( {
69
- type : "connect" ,
70
- payload : "Connected!" ,
71
- } ) ;
61
+ expect ( handleConnect ) . toHaveBeenCalledWith ( { type : "initializePanel" } ) ;
72
62
expect ( handleDisconnect ) . not . toHaveBeenCalled ( ) ;
73
63
74
- adapter . simulateDevtoolsMessage ( { type : "disconnect " } ) ;
75
- adapter . simulateDevtoolsMessage ( { type : "disconnect " } ) ;
64
+ adapter . simulateDevtoolsMessage ( { type : "clientTerminated" , clientId : "1 " } ) ;
65
+ adapter . simulateDevtoolsMessage ( { type : "clientTerminated" , clientId : "2 " } ) ;
76
66
77
67
expect ( handleDisconnect ) . toHaveBeenCalledTimes ( 2 ) ;
78
- expect ( handleDisconnect ) . toHaveBeenCalledWith ( { type : "disconnect" } ) ;
68
+ expect ( handleDisconnect ) . toHaveBeenCalledWith ( {
69
+ type : "clientTerminated" ,
70
+ clientId : "1" ,
71
+ } ) ;
72
+ expect ( handleDisconnect ) . toHaveBeenCalledWith ( {
73
+ type : "clientTerminated" ,
74
+ clientId : "2" ,
75
+ } ) ;
79
76
} ) ;
80
77
81
78
test ( "calls all listeners for the same message" , ( ) => {
82
- type Message = { type : "test" } ;
83
-
84
- const adapter = createTestAdapter < Message > ( ) ;
85
- const actor = createActor < Message > ( adapter ) ;
79
+ const adapter = createTestAdapter ( ) ;
80
+ const actor = createActor ( adapter ) ;
86
81
87
82
const handleMessage = jest . fn ( ) ;
88
83
const handleMessage2 = jest . fn ( ) ;
89
84
const handleMessage3 = jest . fn ( ) ;
90
85
91
- actor . on ( "test " , handleMessage ) ;
92
- actor . on ( "test " , handleMessage2 ) ;
93
- actor . on ( "test " , handleMessage3 ) ;
86
+ actor . on ( "initializePanel " , handleMessage ) ;
87
+ actor . on ( "initializePanel " , handleMessage2 ) ;
88
+ actor . on ( "initializePanel " , handleMessage3 ) ;
94
89
95
- adapter . simulateDevtoolsMessage ( { type : "test " } ) ;
90
+ adapter . simulateDevtoolsMessage ( { type : "initializePanel " } ) ;
96
91
97
92
expect ( handleMessage ) . toHaveBeenCalledTimes ( 1 ) ;
98
93
expect ( handleMessage2 ) . toHaveBeenCalledTimes ( 1 ) ;
99
94
expect ( handleMessage3 ) . toHaveBeenCalledTimes ( 1 ) ;
100
95
} ) ;
101
96
102
97
test ( "ignores messages that don't originate from devtools" , ( ) => {
103
- type Message = { type : "test" } ;
104
98
const adapter = createTestAdapter ( ) ;
105
- const actor = createActor < Message > ( adapter ) ;
99
+ const actor = createActor ( adapter ) ;
106
100
107
101
const handleMessage = jest . fn ( ) ;
108
- actor . on ( "test " , handleMessage ) ;
102
+ actor . on ( "initializePanel " , handleMessage ) ;
109
103
110
- adapter . simulatePlainMessage ( { type : "test " } ) ;
104
+ adapter . simulatePlainMessage ( { type : "initializePanel " } ) ;
111
105
112
106
expect ( handleMessage ) . not . toHaveBeenCalled ( ) ;
113
107
} ) ;
114
108
115
109
test . each ( [ MessageType . RPCRequest , MessageType . RPCResponse ] ) (
116
110
"ignores messages that are %s messages" ,
117
111
( messageType ) => {
118
- type Message = { type : "test" } ;
119
112
const adapter = createTestAdapter ( ) ;
120
- const actor = createActor < Message > ( adapter ) ;
113
+ const actor = createActor ( adapter ) ;
121
114
122
115
const handleMessage = jest . fn ( ) ;
123
- actor . on ( "test " , handleMessage ) ;
116
+ actor . on ( "initializePanel " , handleMessage ) ;
124
117
125
118
adapter . simulatePlainMessage ( {
126
119
source : "apollo-client-devtools" ,
127
120
type : messageType ,
128
- message : { type : "test " } ,
121
+ message : { type : "initializePanel " } ,
129
122
} ) ;
130
123
131
124
expect ( handleMessage ) . not . toHaveBeenCalled ( ) ;
132
125
}
133
126
) ;
134
127
135
128
test ( "does not add listener to adapter until first subscribed actor listener" , ( ) => {
136
- type Message = { type : "test" } ;
137
-
138
129
const adapter = createTestAdapter ( ) ;
139
- const actor = createActor < Message > ( adapter ) ;
130
+ const actor = createActor ( adapter ) ;
140
131
141
132
expect ( adapter . addListener ) . not . toHaveBeenCalled ( ) ;
142
133
143
- actor . send ( { type : "test " } ) ;
134
+ actor . send ( { type : "initializePanel " } ) ;
144
135
expect ( adapter . addListener ) . not . toHaveBeenCalled ( ) ;
145
136
146
- actor . on ( "test " , ( ) => { } ) ;
137
+ actor . on ( "initializePanel " , ( ) => { } ) ;
147
138
expect ( adapter . addListener ) . toHaveBeenCalledTimes ( 1 ) ;
148
139
} ) ;
149
140
150
141
test ( "adds a single listener to adapter regardless of subscribed actor listeners" , ( ) => {
151
- type Message =
152
- | { type : "test" }
153
- | { type : "greet" }
154
- | { type : "connect" }
155
- | { type : "disconnect" } ;
156
-
157
142
const adapter = createTestAdapter ( ) ;
158
- const actor = createActor < Message > ( adapter ) ;
143
+ const actor = createActor ( adapter ) ;
159
144
160
- actor . on ( "test " , ( ) => { } ) ;
161
- actor . on ( "greet " , ( ) => { } ) ;
162
- actor . on ( "disconnect " , ( ) => { } ) ;
163
- actor . on ( "connect " , ( ) => { } ) ;
145
+ actor . on ( "initializePanel " , ( ) => { } ) ;
146
+ actor . on ( "registerClient " , ( ) => { } ) ;
147
+ actor . on ( "clientTerminated " , ( ) => { } ) ;
148
+ actor . on ( "panelShown " , ( ) => { } ) ;
164
149
165
150
expect ( adapter . addListener ) . toHaveBeenCalledTimes ( 1 ) ;
166
151
} ) ;
167
152
168
153
test ( "can unsubscribe from a message by calling the returned function" , ( ) => {
169
- type Message = { type : "test" } ;
170
- const adapter = createTestAdapter < Message > ( ) ;
171
- const actor = createActor < Message > ( adapter ) ;
154
+ const adapter = createTestAdapter ( ) ;
155
+ const actor = createActor ( adapter ) ;
172
156
173
157
const handleMessage = jest . fn ( ) ;
174
- const unsubscribe = actor . on ( "test " , handleMessage ) ;
158
+ const unsubscribe = actor . on ( "initializePanel " , handleMessage ) ;
175
159
176
- adapter . simulateDevtoolsMessage ( { type : "test " } ) ;
160
+ adapter . simulateDevtoolsMessage ( { type : "initializePanel " } ) ;
177
161
178
162
expect ( handleMessage ) . toHaveBeenCalledTimes ( 1 ) ;
179
163
180
164
handleMessage . mockClear ( ) ;
181
165
unsubscribe ( ) ;
182
166
183
- adapter . simulateDevtoolsMessage ( { type : "test " } ) ;
167
+ adapter . simulateDevtoolsMessage ( { type : "initializePanel " } ) ;
184
168
185
169
expect ( handleMessage ) . not . toHaveBeenCalled ( ) ;
186
170
} ) ;
187
171
188
172
test ( "removes listener on adapter when unsubscribing from last actor listener" , ( ) => {
189
- type Message = { type : "connect" } | { type : "disconnect" } ;
190
- const adapter = createTestAdapter < Message > ( ) ;
191
- const actor = createActor < Message > ( adapter ) ;
173
+ const adapter = createTestAdapter ( ) ;
174
+ const actor = createActor ( adapter ) ;
192
175
193
176
const handleConnect = jest . fn ( ) ;
194
177
const handleDisconnect = jest . fn ( ) ;
195
- const unsubscribeConnect = actor . on ( "connect " , handleConnect ) ;
196
- const unsubscribeDisconnect = actor . on ( "connect " , handleDisconnect ) ;
178
+ const unsubscribeConnect = actor . on ( "initializePanel " , handleConnect ) ;
179
+ const unsubscribeDisconnect = actor . on ( "clientTerminated " , handleDisconnect ) ;
197
180
198
181
unsubscribeConnect ( ) ;
199
182
@@ -205,12 +188,11 @@ test("removes listener on adapter when unsubscribing from last actor listener",
205
188
} ) ;
206
189
207
190
test ( "re-adds listener on adapter when subscribing actor listener after disconnecting" , ( ) => {
208
- type Message = { type : "connect" } ;
209
- const adapter = createTestAdapter < Message > ( ) ;
210
- const actor = createActor < Message > ( adapter ) ;
191
+ const adapter = createTestAdapter ( ) ;
192
+ const actor = createActor ( adapter ) ;
211
193
212
194
const handleConnect = jest . fn ( ) ;
213
- const unsubscribeConnect = actor . on ( "connect " , handleConnect ) ;
195
+ const unsubscribeConnect = actor . on ( "initializePanel " , handleConnect ) ;
214
196
215
197
expect ( adapter . addListener ) . toHaveBeenCalledTimes ( 1 ) ;
216
198
@@ -219,6 +201,6 @@ test("re-adds listener on adapter when subscribing actor listener after disconne
219
201
220
202
adapter . addListener . mockClear ( ) ;
221
203
222
- actor . on ( "connect " , handleConnect ) ;
204
+ actor . on ( "initializePanel " , handleConnect ) ;
223
205
expect ( adapter . addListener ) . toHaveBeenCalledTimes ( 1 ) ;
224
206
} ) ;
0 commit comments