Skip to content

Commit

Permalink
Fix an issue where membership revision weren't uninterning stale
Browse files Browse the repository at this point in the history
events.

Will close the-draupnir-project/Draupnir#337 once
pulled in.
  • Loading branch information
Gnuxie committed Apr 15, 2024
1 parent 1031f19 commit 9f61553
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 1 deletion.
26 changes: 26 additions & 0 deletions src/Membership/StandardRoomMembershipRevision.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// SPDX-FileCopyrightText: 2024 Gnuxie <[email protected]>
//
// SPDX-License-Identifier: AFL-3.0

import { describeRoomMember } from '../StateTracking/DeclareRoomState';
import { randomRoomID, randomUserID } from '../TestUtilities/EventGeneration';
import { Membership } from './MembershipChange';
import { StandardRoomMembershipRevision } from './StandardRoomMembershipRevision';

test('Membership events are unintenrned', function () {
const joinLeaveUser = randomUserID();
const room = randomRoomID([]);
const joinEvent = describeRoomMember({
sender: joinLeaveUser,
room_id: room.toRoomIDOrAlias(),
});
const leaveEvent = describeRoomMember({
sender: joinLeaveUser,
room_id: room.toRoomIDOrAlias(),
membership: Membership.Leave,
});
const revision = StandardRoomMembershipRevision.blankRevision(room)
.reviseFromMembership([joinEvent])
.reviseFromMembership([leaveEvent]);
expect([...revision.members()].length).toBe(1);
});
6 changes: 6 additions & 0 deletions src/Membership/StandardRoomMembershipRevision.ts
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,12 @@ export class StandardRoomMembershipRevision implements RoomMembershipRevision {
change.userID,
change
);
const existingMembership = this.membershipForUser(change.userID);
if (existingMembership !== undefined) {
nextMembershipByEventID = nextMembershipByEventID.delete(
existingMembership.eventID
);
}
nextMembershipByEventID = nextMembershipByEventID.set(
change.eventID,
change
Expand Down
12 changes: 11 additions & 1 deletion src/TestUtilities/EventGeneration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,10 @@ import {
MatrixRoomReference,
} from '../MatrixTypes/MatrixRoomReference';
import {
StringEventID,
StringRoomID,
StringUserID,
isStringEventID,
isStringRoomID,
isStringUserID,
} from '../MatrixTypes/StringlyTypedMatrix';
Expand Down Expand Up @@ -66,7 +68,7 @@ export function makePolicyRuleUserEvent({
});
const rawEventJSON = {
room_id,
event_id: `$${randomUUID()}:example.com`,
event_id: randomEventID(),
origin_server_ts: Date.now(),
state_key: description.state_key,
type: description.type,
Expand Down Expand Up @@ -109,3 +111,11 @@ export function randomUserID(): StringUserID {
}
return userID;
}

export function randomEventID(): StringEventID {
const eventID = `$${randomUUID()}:example.com`;
if (!isStringEventID(eventID)) {
throw new TypeError(`EventID generator is wrong`);
}
return eventID;
}

0 comments on commit 9f61553

Please sign in to comment.