Skip to content
This repository has been archived by the owner on Sep 11, 2024. It is now read-only.

Commit

Permalink
Live location share - explicitly stop beacons replaced beacons (PSG-5…
Browse files Browse the repository at this point in the history
…44) (#8933)

* explicitly stop beacons before creating new ones

* remove unnecessary optional chain
  • Loading branch information
Kerry authored Jun 30, 2022
1 parent d439871 commit 4eab0de
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 2 deletions.
8 changes: 7 additions & 1 deletion src/stores/OwnBeaconStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ export class OwnBeaconStore extends AsyncStoreWithClient<OwnBeaconStoreState> {
* ids of live beacons
* ordered by creation time descending
*/
private liveBeaconIds = [];
private liveBeaconIds: BeaconIdentifier[] = [];
private locationInterval: number;
private geolocationError: GeolocationError | undefined;
private clearPositionWatch: ClearWatchCallback | undefined;
Expand Down Expand Up @@ -392,6 +392,12 @@ export class OwnBeaconStore extends AsyncStoreWithClient<OwnBeaconStoreState> {
roomId: Room['roomId'],
beaconInfoContent: MBeaconInfoEventContent,
): Promise<void> => {
// explicitly stop any live beacons this user has
// to ensure they remain stopped
// if the new replacing beacon is redacted
const existingLiveBeaconIdsForRoom = this.getLiveBeaconIds(roomId);
await Promise.all(existingLiveBeaconIdsForRoom.map(beaconId => this.stopBeacon(beaconId)));

// eslint-disable-next-line camelcase
const { event_id } = await this.matrixClient.unstable_createLiveBeacon(
roomId,
Expand Down
7 changes: 6 additions & 1 deletion test/components/views/location/LocationShareMenu-test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ describe('<LocationShareMenu />', () => {
}),
sendMessage: jest.fn(),
unstable_createLiveBeacon: jest.fn().mockResolvedValue({ event_id: '1' }),
unstable_setLiveBeacon: jest.fn().mockResolvedValue({ event_id: '1' }),
getVisibleRooms: jest.fn().mockReturnValue([]),
});

Expand Down Expand Up @@ -386,7 +387,7 @@ describe('<LocationShareMenu />', () => {
expect(getShareTypeOption(component, LocationShareType.Live).length).toBeFalsy();
});

it('creates beacon info event on submission', () => {
it('creates beacon info event on submission', async () => {
const onFinished = jest.fn();
const component = getComponent({ onFinished });

Expand All @@ -399,6 +400,9 @@ describe('<LocationShareMenu />', () => {
component.setProps({});
});

// flush stopping existing beacons promises
await flushPromisesWithFakeTimers();

expect(onFinished).toHaveBeenCalled();
const [eventRoomId, eventContent] = mockClient.unstable_createLiveBeacon.mock.calls[0];
expect(eventRoomId).toEqual(defaultProps.roomId);
Expand Down Expand Up @@ -429,6 +433,7 @@ describe('<LocationShareMenu />', () => {
component.setProps({});
});

await flushPromisesWithFakeTimers();
await flushPromisesWithFakeTimers();
await flushPromisesWithFakeTimers();

Expand Down
24 changes: 24 additions & 0 deletions test/stores/OwnBeaconStore-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1347,5 +1347,29 @@ describe('OwnBeaconStore', () => {
// didn't throw, no error log
expect(loggerErrorSpy).not.toHaveBeenCalled();
});

it('stops existing live beacon for room before creates new beacon', async () => {
// room1 already has a live beacon for alice
makeRoomsWithStateEvents([
alicesRoom1BeaconInfo,
alicesRoom2BeaconInfo,
]);
const store = await makeOwnBeaconStore();

const content = makeBeaconInfoContent(100);
await store.createLiveBeacon(room1Id, content);

// stop alicesRoom1BeaconInfo
expect(mockClient.unstable_setLiveBeacon).toHaveBeenCalledWith(
room1Id, expect.objectContaining({ live: false }),
);
// only called for beacons in room1, room2 beacon is not stopped
expect(mockClient.unstable_setLiveBeacon).toHaveBeenCalledTimes(1);

// new beacon created
expect(mockClient.unstable_createLiveBeacon).toHaveBeenCalledWith(
room1Id, content,
);
});
});
});

0 comments on commit 4eab0de

Please sign in to comment.