@jcbuisson/express-x-plugins 4.0.12 → 4.0.13

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jcbuisson/express-x-plugins",
3
- "version": "4.0.12",
3
+ "version": "4.0.13",
4
4
  "description": "Plugins for express-x",
5
5
  "type": "module",
6
6
  "main": "./src/electric-server-plugin.mjs",
@@ -74,7 +74,7 @@ export async function reloadPlugin(app, options = {}) {
74
74
  // copy rooms
75
75
  for (const room of fromSocketRooms) {
76
76
  if (room === fromSocketId) continue // do not include room associated to socket#id
77
- toSocket.join(room)
77
+ await toSocket.join(room)
78
78
  }
79
79
  // copy data
80
80
  toSocket.data = {
@@ -12,11 +12,15 @@ class FakeSocket {
12
12
  this.emitted = []
13
13
  this.sockets = sockets
14
14
  this.disconnectingListener = disconnectingListener
15
+ this.joinDelay = Promise.resolve()
15
16
  }
16
17
 
17
18
  on(event, handler) { this.handlers.set(event, handler) }
18
19
  emit(event, ...args) { this.emitted.push([event, ...args]) }
19
- join(room) { this.rooms.add(room) }
20
+ async join(room) {
21
+ await this.joinDelay
22
+ this.rooms.add(room)
23
+ }
20
24
  disconnect() {
21
25
  this.disconnectingListener(this, 'server namespace disconnect')
22
26
  this.sockets.delete(this.id)
@@ -46,9 +50,16 @@ test('transfers state when the replacement connects before the old socket discon
46
50
  const transferToken = oldSocket.emitted.find(([event]) => event === 'cnx-transfer-token')[1]
47
51
 
48
52
  const newSocket = new FakeSocket('new', sockets, (...args) => disconnectingListener(...args))
53
+ let finishJoin
54
+ newSocket.joinDelay = new Promise(resolve => { finishJoin = resolve })
49
55
  sockets.set(newSocket.id, newSocket)
50
56
  connectListener(newSocket)
51
- await newSocket.handlers.get('cnx-transfer')('old', 'new', transferToken)
57
+ const transfer = newSocket.handlers.get('cnx-transfer')('old', 'new', transferToken)
58
+
59
+ await Promise.resolve()
60
+ assert.equal(newSocket.emitted.some(([event]) => event === 'cnx-transfer-ack'), false)
61
+ finishJoin()
62
+ await transfer
52
63
 
53
64
  assert.equal(newSocket.data.user, 'Ada')
54
65
  assert.equal(newSocket.rooms.has('project:1'), true)