diff --git a/server/src/rooms.test.ts b/server/src/rooms.test.ts index 58cbd72..f175e2a 100644 --- a/server/src/rooms.test.ts +++ b/server/src/rooms.test.ts @@ -166,8 +166,13 @@ describe('a seat a browser lost', () => { rooms.seen(room, bo, 'home'); const other = rooms.create('Bo', 3); rooms.seen(other.room, other.token, 'home'); - expect(rooms.findSeats('Bo', 'home', other.room.id).seated.map((s) => s.roomId)).toEqual([other.room.id]); - expect(rooms.findSeats('Bo', 'home').seated.map((s) => s.roomId).sort()).toEqual([other.room.id, room.id].sort()); + const first = rooms.findSeats('Bo', 'home', other.room.id).seated; + expect(first.map((s) => s.roomId)).toEqual([other.room.id]); + // A seat given back is noted afresh from its next use; until then its old address claims nothing. + const second = rooms.findSeats('Bo', 'home').seated; + expect(second.map((s) => s.roomId)).toEqual([room.id]); + rooms.seen(other.room, first[0].token, 'home'); + rooms.seen(room, second[0].token, 'home'); room.state!.over = { winner: 'A', reason: 'the test says so' }; expect(rooms.findSeats('Bo', 'home').seated.map((s) => s.roomId)).toEqual([other.room.id]); }); diff --git a/server/src/rooms.ts b/server/src/rooms.ts index c00bac2..bfdfc42 100644 --- a/server/src/rooms.ts +++ b/server/src/rooms.ts @@ -597,6 +597,8 @@ function apply(room: Room, line: LedgerLine): void { const seat = room.seats.find((s) => s.id === line.id); if (!seat) break; seat.tokenHash = line.tokenHash; + // Whoever used the seat before has no claim on it by address now: the next use from the new device is noted afresh. + delete seat.addr; seat.bot = false; delete seat.standIn; break;