You've already forked matrix-react-sdk
mirror of
https://github.com/matrix-org/matrix-react-sdk.git
synced 2025-08-09 08:42:50 +03:00
Live location sharing - update beacon_info implementation to latest MSC (#8256)
* update calls to set and createLiveBeacon Signed-off-by: Kerry Archibald <kerrya@element.io> * fix stop beacon Signed-off-by: Kerry Archibald <kerrya@element.io> * remove variable event type from beacon utils Signed-off-by: Kerry Archibald <kerrya@element.io> * use beacon identifier Signed-off-by: Kerry Archibald <kerrya@element.io> * fix RoomLiveShareWarning tests Signed-off-by: Kerry Archibald <kerrya@element.io> * add case for beacon update Signed-off-by: Kerry Archibald <kerrya@element.io> * lint Signed-off-by: Kerry Archibald <kerrya@element.io> * more lint Signed-off-by: Kerry Archibald <kerrya@element.io>
This commit is contained in:
@@ -17,7 +17,7 @@ limitations under the License.
|
||||
import React from 'react';
|
||||
import { act } from 'react-dom/test-utils';
|
||||
import { mount } from 'enzyme';
|
||||
import { Room, Beacon, BeaconEvent } from 'matrix-js-sdk/src/matrix';
|
||||
import { Room, Beacon, BeaconEvent, getBeaconInfoIdentifier } from 'matrix-js-sdk/src/matrix';
|
||||
import { logger } from 'matrix-js-sdk/src/logger';
|
||||
|
||||
import RoomLiveShareWarning from '../../../../src/components/views/beacon/RoomLiveShareWarning';
|
||||
@@ -221,6 +221,25 @@ describe('<RoomLiveShareWarning />', () => {
|
||||
expect(getExpiryText(component)).toEqual('35m left');
|
||||
});
|
||||
|
||||
it('updates beacon time left when beacon updates', () => {
|
||||
const component = getComponent({ roomId: room1Id });
|
||||
expect(getExpiryText(component)).toEqual('1h left');
|
||||
|
||||
expect(getExpiryText(component)).toEqual('1h left');
|
||||
|
||||
act(() => {
|
||||
const beacon = OwnBeaconStore.instance.getBeaconById(getBeaconInfoIdentifier(room1Beacon1));
|
||||
const room1Beacon1Update = makeBeaconInfoEvent(aliceId, room1Id, {
|
||||
isLive: true,
|
||||
timeout: 3 * HOUR_MS,
|
||||
}, '$0');
|
||||
beacon.update(room1Beacon1Update);
|
||||
});
|
||||
|
||||
// update to expiry of new beacon
|
||||
expect(getExpiryText(component)).toEqual('3h left');
|
||||
});
|
||||
|
||||
it('clears expiry time interval on unmount', () => {
|
||||
const clearIntervalSpy = jest.spyOn(global, 'clearInterval');
|
||||
const component = getComponent({ roomId: room1Id });
|
||||
@@ -242,7 +261,7 @@ describe('<RoomLiveShareWarning />', () => {
|
||||
component.setProps({});
|
||||
});
|
||||
|
||||
expect(mockClient.unstable_setLiveBeacon).toHaveBeenCalledTimes(2);
|
||||
expect(mockClient.unstable_setLiveBeacon).toHaveBeenCalled();
|
||||
expect(component.find('Spinner').length).toBeTruthy();
|
||||
expect(findByTestId(component, 'room-live-share-primary-button').at(0).props().disabled).toBeTruthy();
|
||||
});
|
||||
@@ -314,7 +333,7 @@ describe('<RoomLiveShareWarning />', () => {
|
||||
// update mock and emit event
|
||||
act(() => {
|
||||
hasWireErrorsSpy.mockReturnValue(true);
|
||||
OwnBeaconStore.instance.emit(OwnBeaconStoreEvent.WireError, room2Beacon1.getType());
|
||||
OwnBeaconStore.instance.emit(OwnBeaconStoreEvent.WireError, getBeaconInfoIdentifier(room2Beacon1));
|
||||
});
|
||||
component.setProps({});
|
||||
|
||||
@@ -332,7 +351,7 @@ describe('<RoomLiveShareWarning />', () => {
|
||||
// update mock and emit event
|
||||
act(() => {
|
||||
hasWireErrorsSpy.mockReturnValue(false);
|
||||
OwnBeaconStore.instance.emit(OwnBeaconStoreEvent.WireError, room2Beacon1.getType());
|
||||
OwnBeaconStore.instance.emit(OwnBeaconStoreEvent.WireError, getBeaconInfoIdentifier(room2Beacon1));
|
||||
});
|
||||
component.setProps({});
|
||||
|
||||
@@ -353,8 +372,7 @@ describe('<RoomLiveShareWarning />', () => {
|
||||
findByTestId(component, 'room-live-share-primary-button').at(0).simulate('click');
|
||||
});
|
||||
|
||||
expect(resetErrorSpy).toHaveBeenCalledWith(room2Beacon1.getType());
|
||||
expect(resetErrorSpy).toHaveBeenCalledWith(room2Beacon2.getType());
|
||||
expect(resetErrorSpy).toHaveBeenCalledWith(getBeaconInfoIdentifier(room2Beacon1));
|
||||
});
|
||||
|
||||
it('clicking close button stops beacons', async () => {
|
||||
@@ -367,8 +385,7 @@ describe('<RoomLiveShareWarning />', () => {
|
||||
findByTestId(component, 'room-live-share-wire-error-close-button').at(0).simulate('click');
|
||||
});
|
||||
|
||||
expect(stopBeaconSpy).toHaveBeenCalledWith(room2Beacon1.getType());
|
||||
expect(stopBeaconSpy).toHaveBeenCalledWith(room2Beacon2.getType());
|
||||
expect(stopBeaconSpy).toHaveBeenCalledWith(getBeaconInfoIdentifier(room2Beacon1));
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@@ -13,8 +13,7 @@ exports[`<RoomLiveShareWarning /> when user has live beacons and geolocation is
|
||||
<RoomLiveShareWarningInner
|
||||
liveBeaconIds={
|
||||
Array [
|
||||
"org.matrix.msc3489.beacon_info.@alice:server.org.3",
|
||||
"org.matrix.msc3489.beacon_info.@alice:server.org.4",
|
||||
"$room2:server.org_@alice:server.org",
|
||||
]
|
||||
}
|
||||
roomId="$room2:server.org"
|
||||
|
@@ -20,7 +20,6 @@ import { RoomMember } from 'matrix-js-sdk/src/models/room-member';
|
||||
import { MatrixClient } from 'matrix-js-sdk/src/client';
|
||||
import { mocked } from 'jest-mock';
|
||||
import { act } from 'react-dom/test-utils';
|
||||
import { M_BEACON_INFO } from 'matrix-js-sdk/src/@types/beacon';
|
||||
import { M_ASSET, LocationAssetType } from 'matrix-js-sdk/src/@types/location';
|
||||
import { logger } from 'matrix-js-sdk/src/logger';
|
||||
|
||||
@@ -310,16 +309,13 @@ describe('<LocationShareMenu />', () => {
|
||||
});
|
||||
|
||||
expect(onFinished).toHaveBeenCalled();
|
||||
const [eventRoomId, eventContent, eventTypeSuffix] = mockClient.unstable_createLiveBeacon.mock.calls[0];
|
||||
const [eventRoomId, eventContent] = mockClient.unstable_createLiveBeacon.mock.calls[0];
|
||||
expect(eventRoomId).toEqual(defaultProps.roomId);
|
||||
expect(eventTypeSuffix).toBeTruthy();
|
||||
expect(eventContent).toEqual(expect.objectContaining({
|
||||
[M_BEACON_INFO.name]: {
|
||||
// default timeout
|
||||
timeout: DEFAULT_DURATION_MS,
|
||||
description: `Ernie's live location`,
|
||||
live: true,
|
||||
},
|
||||
// default timeout
|
||||
timeout: DEFAULT_DURATION_MS,
|
||||
description: `Ernie's live location`,
|
||||
live: true,
|
||||
[M_ASSET.name]: {
|
||||
type: LocationAssetType.Self,
|
||||
},
|
||||
|
Reference in New Issue
Block a user