@player-tools/devtools-messenger 0.8.0-next.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,13 +1,14 @@
1
- import { describe, afterEach, expect, test, vi } from "vitest";
1
+ import { describe, beforeEach, expect, test, vi } from "vitest";
2
2
  import { Messenger } from "../index";
3
3
  import { createMockContext } from "./helpers";
4
+ import { BaseEvent } from "@player-tools/devtools-types";
4
5
 
5
6
  vi.useFakeTimers();
6
7
 
7
8
  describe("Messenger", () => {
8
- afterEach(() => {
9
+ beforeEach(() => {
9
10
  vi.clearAllMocks();
10
- Messenger.resetEvents();
11
+ Messenger.reset();
11
12
  });
12
13
 
13
14
  test("beacons", () => {
@@ -19,15 +20,15 @@ describe("Messenger", () => {
19
20
  sendMessage: mockMessagingAPI.sendMessage.bind(mockMessagingAPI),
20
21
  addListener: mockMessagingAPI.addListener.bind(mockMessagingAPI),
21
22
  removeListener: mockMessagingAPI.removeListener.bind(mockMessagingAPI),
22
- messageCallback: spies.web.messageCallback,
23
- id: "test",
24
- context: "player",
23
+ messageCallback: spies.web1.messageCallback,
24
+ context: "devtools",
25
+ id: "test1",
25
26
  logger: console,
26
27
  });
27
28
 
28
29
  vi.advanceTimersByTime(1000);
29
30
 
30
- expect(spies.web.sendMessage).toHaveBeenCalledWith(
31
+ expect(spies.web1.sendMessage).toHaveBeenCalledWith(
31
32
  expect.objectContaining({ type: "MESSENGER_BEACON" })
32
33
  );
33
34
  });
@@ -39,13 +40,13 @@ describe("Messenger", () => {
39
40
  sendMessage: mockMessagingAPI.sendMessage.bind(mockMessagingAPI),
40
41
  addListener: mockMessagingAPI.addListener.bind(mockMessagingAPI),
41
42
  removeListener: mockMessagingAPI.removeListener.bind(mockMessagingAPI),
42
- messageCallback: spies.web.messageCallback,
43
- id: "test",
44
- context: "player",
43
+ messageCallback: spies.web1.messageCallback,
44
+ context: "devtools",
45
+ id: "test2",
45
46
  logger: console,
46
47
  });
47
48
 
48
- const events = [
49
+ const events: Array<BaseEvent<string, unknown>> = [
49
50
  { type: "TEST", payload: { count: 1 } },
50
51
  { type: "TEST", payload: { count: 2 } },
51
52
  { type: "TEST", payload: { count: 3 } },
@@ -70,37 +71,53 @@ describe("Messenger", () => {
70
71
  sender: "test-2",
71
72
  });
72
73
 
73
- expect(spies.web.sendMessage).toHaveBeenCalledTimes(5);
74
+ expect(spies.web1.sendMessage).toHaveBeenCalledTimes(8);
74
75
 
75
- expect(spies.web.sendMessage).toHaveBeenNthCalledWith(
76
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
76
77
  1,
77
- expect.objectContaining({ type: "MESSENGER_BEACON" })
78
+ expect.objectContaining({ ...events[0], sender: "test2" })
78
79
  );
79
80
 
80
- expect(spies.web.sendMessage).toHaveBeenNthCalledWith(
81
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
81
82
  2,
82
83
  expect.objectContaining({ type: "MESSENGER_BEACON" })
83
84
  );
84
85
 
85
- expect(spies.web.sendMessage).toHaveBeenNthCalledWith(
86
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
86
87
  3,
87
- expect.objectContaining({ type: "MESSENGER_BEACON" })
88
+ expect.objectContaining({ ...events[1], sender: "test2" })
88
89
  );
89
90
 
90
- expect(spies.web.sendMessage).toHaveBeenNthCalledWith(
91
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
91
92
  4,
92
93
  expect.objectContaining({ type: "MESSENGER_BEACON" })
93
94
  );
94
95
 
95
- expect(spies.web.sendMessage).toHaveBeenNthCalledWith(
96
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
96
97
  5,
98
+ expect.objectContaining({ ...events[2], sender: "test2" })
99
+ );
100
+
101
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
102
+ 6,
103
+ expect.objectContaining({ type: "MESSENGER_BEACON" })
104
+ );
105
+
106
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
107
+ 7,
108
+ expect.objectContaining({ type: "MESSENGER_BEACON" })
109
+ );
110
+
111
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
112
+ 8,
97
113
  expect.objectContaining({
98
114
  type: "MESSENGER_EVENT_BATCH",
115
+ target: "test-2",
99
116
  payload: {
100
117
  events: [
101
- expect.objectContaining({ ...events[0], target: "test-2" }),
102
- expect.objectContaining({ ...events[1], target: "test-2" }),
103
- expect.objectContaining({ ...events[2], target: "test-2" }),
118
+ expect.objectContaining({ ...events[0] }),
119
+ expect.objectContaining({ ...events[1] }),
120
+ expect.objectContaining({ ...events[2] }),
104
121
  ],
105
122
  },
106
123
  })
@@ -110,12 +127,12 @@ describe("Messenger", () => {
110
127
  test("messeges sent between two Messenger instances", () => {
111
128
  const { spies, mockMessagingAPI } = createMockContext();
112
129
 
113
- const eventsWeb = [
130
+ const eventsweb1: Array<BaseEvent<string, unknown>> = [
114
131
  { type: "TEST", payload: { count: 1 } },
115
132
  { type: "TEST", payload: { count: 2 } },
116
133
  ];
117
134
 
118
- const eventsDevtools = [
135
+ const eventsDevtools: Array<BaseEvent<string, unknown>> = [
119
136
  { type: "TEST", payload: { count: 3 } },
120
137
  { type: "TEST", payload: { count: 4 } },
121
138
  ];
@@ -124,23 +141,23 @@ describe("Messenger", () => {
124
141
  sendMessage: mockMessagingAPI.sendMessage.bind(mockMessagingAPI),
125
142
  addListener: mockMessagingAPI.addListener.bind(mockMessagingAPI),
126
143
  removeListener: mockMessagingAPI.removeListener.bind(mockMessagingAPI),
127
- messageCallback: spies.web.messageCallback,
128
- id: "web",
144
+ messageCallback: spies.web1.messageCallback,
129
145
  context: "player",
146
+ id: "web1",
130
147
  logger: console,
131
148
  });
132
149
 
133
150
  vi.advanceTimersByTime(1000);
134
151
 
135
- messenger1.sendMessage(eventsWeb[0]);
152
+ messenger1.sendMessage(eventsweb1[0]);
136
153
 
137
154
  const messenger2 = new Messenger({
138
155
  sendMessage: mockMessagingAPI.sendMessage.bind(mockMessagingAPI),
139
156
  addListener: mockMessagingAPI.addListener.bind(mockMessagingAPI),
140
157
  removeListener: mockMessagingAPI.removeListener.bind(mockMessagingAPI),
141
158
  messageCallback: spies.devtools.messageCallback,
142
- id: "devtools",
143
159
  context: "devtools",
160
+ id: "devtools1",
144
161
  logger: console,
145
162
  });
146
163
 
@@ -150,73 +167,204 @@ describe("Messenger", () => {
150
167
 
151
168
  vi.advanceTimersByTime(1000);
152
169
 
153
- messenger1.sendMessage(eventsWeb[1]);
170
+ messenger1.sendMessage(eventsweb1[1]);
154
171
 
155
172
  messenger2.sendMessage(eventsDevtools[1]);
156
173
 
157
174
  vi.advanceTimersByTime(1000);
158
175
 
159
- expect(spies.web.sendMessage).toHaveBeenCalledTimes(11);
176
+ expect(spies.web1.sendMessage).toHaveBeenCalledTimes(12);
160
177
 
161
- expect(spies.web.sendMessage).toHaveBeenNthCalledWith(
178
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
162
179
  1,
163
180
  expect.objectContaining({ type: "MESSENGER_BEACON" })
164
181
  );
165
182
 
166
- expect(spies.web.sendMessage).toHaveBeenNthCalledWith(
183
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
167
184
  2,
168
- expect.objectContaining({ type: "MESSENGER_BEACON" })
185
+ expect.objectContaining({ ...eventsweb1[0], sender: "web1" })
169
186
  );
170
187
 
171
- expect(spies.web.sendMessage).toHaveBeenNthCalledWith(
188
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
172
189
  3,
173
190
  expect.objectContaining({ type: "MESSENGER_BEACON" })
174
191
  );
175
192
 
176
- expect(spies.web.sendMessage).toHaveBeenNthCalledWith(
193
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
177
194
  4,
195
+ expect.objectContaining({ type: "MESSENGER_BEACON" })
196
+ );
197
+
198
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
199
+ 5,
178
200
  expect.objectContaining({
179
201
  type: "MESSENGER_EVENT_BATCH",
202
+ target: "devtools1",
180
203
  payload: {
181
- events: [
182
- expect.objectContaining({ ...eventsWeb[0], target: "devtools" }),
183
- ],
204
+ events: [expect.objectContaining({ ...eventsweb1[0] })],
184
205
  },
185
206
  })
186
207
  );
187
208
 
188
- expect(spies.web.sendMessage).toHaveBeenNthCalledWith(
189
- 5,
190
- expect.objectContaining({ ...eventsDevtools[0], sender: "devtools" })
191
- );
192
-
193
- expect(spies.web.sendMessage).toHaveBeenNthCalledWith(
209
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
194
210
  6,
195
- expect.objectContaining({ type: "MESSENGER_BEACON" })
211
+ expect.objectContaining({ ...eventsDevtools[0], sender: "devtools1" })
196
212
  );
197
213
 
198
- expect(spies.web.sendMessage).toHaveBeenNthCalledWith(
214
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
199
215
  7,
200
216
  expect.objectContaining({ type: "MESSENGER_BEACON" })
201
217
  );
202
218
 
203
- expect(spies.web.sendMessage).toHaveBeenNthCalledWith(
219
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
204
220
  8,
205
- expect.objectContaining({ ...eventsWeb[1], sender: "web" })
221
+ expect.objectContaining({ type: "MESSENGER_BEACON" })
206
222
  );
207
223
 
208
- expect(spies.web.sendMessage).toHaveBeenNthCalledWith(
224
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
209
225
  9,
210
- expect.objectContaining({ ...eventsDevtools[1], sender: "devtools" })
226
+ expect.objectContaining({ ...eventsweb1[1], sender: "web1" })
211
227
  );
212
228
 
213
- expect(spies.web.sendMessage).toHaveBeenNthCalledWith(
229
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
214
230
  10,
231
+ expect.objectContaining({ ...eventsDevtools[1], sender: "devtools1" })
232
+ );
233
+
234
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
235
+ 11,
215
236
  expect.objectContaining({ type: "MESSENGER_BEACON" })
216
237
  );
217
238
 
218
- expect(spies.web.sendMessage).toHaveBeenNthCalledWith(
239
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
240
+ 12,
241
+ expect.objectContaining({ type: "MESSENGER_BEACON" })
242
+ );
243
+ });
244
+
245
+ test("messages sent between two web Messenger instances and one devtools instance", () => {
246
+ const { spies, mockMessagingAPI } = createMockContext();
247
+
248
+ const eventsWeb1: Array<BaseEvent<string, unknown>> = [
249
+ { type: "TEST", target: "web2", payload: { count: 1 } },
250
+ { type: "TEST", target: "devtools", payload: { count: 2 } },
251
+ ];
252
+
253
+ const eventsWeb2: Array<BaseEvent<string, unknown>> = [
254
+ { type: "TEST", target: "web1", payload: { count: 3 } },
255
+ { type: "TEST", target: "devtools", payload: { count: 4 } },
256
+ ];
257
+
258
+ const eventsDevtools: Array<BaseEvent<string, unknown>> = [
259
+ { type: "TEST", target: "web1", payload: { count: 5 } },
260
+ { type: "TEST", target: "web2", payload: { count: 6 } },
261
+ ];
262
+
263
+ const messengerWeb1 = new Messenger({
264
+ sendMessage: mockMessagingAPI.sendMessage.bind(mockMessagingAPI),
265
+ addListener: mockMessagingAPI.addListener.bind(mockMessagingAPI),
266
+ removeListener: mockMessagingAPI.removeListener.bind(mockMessagingAPI),
267
+ messageCallback: spies.web1.messageCallback,
268
+ id: "web2",
269
+ context: "player",
270
+ logger: console,
271
+ });
272
+
273
+ const messengerWeb2 = new Messenger({
274
+ sendMessage: mockMessagingAPI.sendMessage.bind(mockMessagingAPI),
275
+ addListener: mockMessagingAPI.addListener.bind(mockMessagingAPI),
276
+ removeListener: mockMessagingAPI.removeListener.bind(mockMessagingAPI),
277
+ messageCallback: spies.web2.messageCallback,
278
+ id: "web3",
279
+ context: "player",
280
+ logger: console,
281
+ });
282
+
283
+ const messengerDevtools = new Messenger({
284
+ sendMessage: mockMessagingAPI.sendMessage.bind(mockMessagingAPI),
285
+ addListener: mockMessagingAPI.addListener.bind(mockMessagingAPI),
286
+ removeListener: mockMessagingAPI.removeListener.bind(mockMessagingAPI),
287
+ messageCallback: spies.devtools.messageCallback,
288
+ id: "devtools2",
289
+ context: "devtools",
290
+ logger: console,
291
+ });
292
+
293
+ vi.advanceTimersByTime(1000);
294
+
295
+ messengerWeb1.sendMessage(eventsWeb1[0]);
296
+ messengerWeb2.sendMessage(eventsWeb2[0]);
297
+ messengerDevtools.sendMessage(eventsDevtools[0]);
298
+
299
+ vi.advanceTimersByTime(1000);
300
+
301
+ messengerWeb1.sendMessage(eventsWeb1[1]);
302
+ messengerWeb2.sendMessage(eventsWeb2[1]);
303
+ messengerDevtools.sendMessage(eventsDevtools[1]);
304
+
305
+ vi.advanceTimersByTime(1000);
306
+
307
+ expect(spies.web1.sendMessage).toHaveBeenCalledTimes(15);
308
+ expect(spies.web2.sendMessage).toHaveBeenCalledTimes(15);
309
+ expect(spies.devtools.sendMessage).toHaveBeenCalledTimes(15);
310
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
311
+ 1,
312
+ expect.objectContaining({ type: "MESSENGER_BEACON" })
313
+ );
314
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
315
+ 2,
316
+ expect.objectContaining({ type: "MESSENGER_BEACON" })
317
+ );
318
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
319
+ 3,
320
+ expect.objectContaining({ type: "MESSENGER_BEACON" })
321
+ );
322
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
323
+ 4,
324
+ expect.objectContaining({ ...eventsWeb1[0], target: "web2" })
325
+ );
326
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
327
+ 5,
328
+ expect.objectContaining({ ...eventsWeb2[0], target: "web1" })
329
+ );
330
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
331
+ 6,
332
+ expect.objectContaining({ ...eventsDevtools[0], target: "web1" })
333
+ );
334
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
335
+ 7,
336
+ expect.objectContaining({ type: "MESSENGER_BEACON" })
337
+ );
338
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
339
+ 8,
340
+ expect.objectContaining({ type: "MESSENGER_BEACON" })
341
+ );
342
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
343
+ 9,
344
+ expect.objectContaining({ type: "MESSENGER_BEACON" })
345
+ );
346
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
347
+ 10,
348
+ expect.objectContaining({ ...eventsWeb1[1], target: "devtools" })
349
+ );
350
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
219
351
  11,
352
+ expect.objectContaining({ ...eventsWeb2[1], target: "devtools" })
353
+ );
354
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
355
+ 12,
356
+ expect.objectContaining({ ...eventsDevtools[1], target: "web2" })
357
+ );
358
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
359
+ 13,
360
+ expect.objectContaining({ type: "MESSENGER_BEACON" })
361
+ );
362
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
363
+ 14,
364
+ expect.objectContaining({ type: "MESSENGER_BEACON" })
365
+ );
366
+ expect(spies.web1.sendMessage).toHaveBeenNthCalledWith(
367
+ 15,
220
368
  expect.objectContaining({ type: "MESSENGER_BEACON" })
221
369
  );
222
370
  });