Live location sharing - send geolocation beacon events - happy path (#8127)
* geolocation utilities Signed-off-by: Kerry Archibald <kerrya@element.io> * messy send events Signed-off-by: Kerry Archibald <kerrya@element.io> * add geolocation services Signed-off-by: Kerry Archibald <kerrya@element.io> * geolocation tests Signed-off-by: Kerry Archibald <kerrya@element.io> * debounce with backup emit every 30s Signed-off-by: Kerry Archibald <kerrya@element.io> * import reorder Signed-off-by: Kerry Archibald <kerrya@element.io> * some more working tests Signed-off-by: Kerry Archibald <kerrya@element.io> * complicated timeout testing Signed-off-by: Kerry Archibald <kerrya@element.io> * publish first location immediately Signed-off-by: Kerry Archibald <kerrya@element.io> * move advanceDateAndTime to utils, tidy Signed-off-by: Kerry Archibald <kerrya@element.io> * typos Signed-off-by: Kerry Archibald <kerrya@element.io> * types and lint Signed-off-by: Kerry Archibald <kerrya@element.io>
This commit is contained in:
parent
f557ac9486
commit
e9b2aea97b
6 changed files with 378 additions and 255 deletions
|
@ -23,14 +23,17 @@ import '../../../skinned-sdk';
|
|||
import RoomLiveShareWarning from '../../../../src/components/views/beacon/RoomLiveShareWarning';
|
||||
import { OwnBeaconStore } from '../../../../src/stores/OwnBeaconStore';
|
||||
import {
|
||||
advanceDateAndTime,
|
||||
findByTestId,
|
||||
getMockClientWithEventEmitter,
|
||||
makeBeaconInfoEvent,
|
||||
mockGeolocation,
|
||||
resetAsyncStoreWithClient,
|
||||
setupAsyncStoreWithClient,
|
||||
} from '../../../test-utils';
|
||||
|
||||
jest.useFakeTimers();
|
||||
mockGeolocation();
|
||||
describe('<RoomLiveShareWarning />', () => {
|
||||
const aliceId = '@alice:server.org';
|
||||
const room1Id = '$room1:server.org';
|
||||
|
@ -40,6 +43,7 @@ describe('<RoomLiveShareWarning />', () => {
|
|||
getVisibleRooms: jest.fn().mockReturnValue([]),
|
||||
getUserId: jest.fn().mockReturnValue(aliceId),
|
||||
unstable_setLiveBeacon: jest.fn().mockResolvedValue({ event_id: '1' }),
|
||||
sendEvent: jest.fn(),
|
||||
});
|
||||
|
||||
// 14.03.2022 16:15
|
||||
|
@ -69,14 +73,6 @@ describe('<RoomLiveShareWarning />', () => {
|
|||
return [room1, room2];
|
||||
};
|
||||
|
||||
const advanceDateAndTime = (ms: number) => {
|
||||
// bc liveness check uses Date.now we have to advance this mock
|
||||
jest.spyOn(global.Date, 'now').mockReturnValue(Date.now() + ms);
|
||||
|
||||
// then advance time for the interval by the same amount
|
||||
jest.advanceTimersByTime(ms);
|
||||
};
|
||||
|
||||
const makeOwnBeaconStore = async () => {
|
||||
const store = OwnBeaconStore.instance;
|
||||
|
||||
|
@ -137,12 +133,16 @@ describe('<RoomLiveShareWarning />', () => {
|
|||
|
||||
it('renders correctly with one live beacon in room', () => {
|
||||
const component = getComponent({ roomId: room1Id });
|
||||
expect(component).toMatchSnapshot();
|
||||
// beacons have generated ids that break snapshots
|
||||
// assert on html
|
||||
expect(component.html()).toMatchSnapshot();
|
||||
});
|
||||
|
||||
it('renders correctly with two live beacons in room', () => {
|
||||
const component = getComponent({ roomId: room2Id });
|
||||
expect(component).toMatchSnapshot();
|
||||
// beacons have generated ids that break snapshots
|
||||
// assert on html
|
||||
expect(component.html()).toMatchSnapshot();
|
||||
// later expiry displayed
|
||||
expect(getExpiryText(component)).toEqual('12h left');
|
||||
});
|
||||
|
|
|
@ -1,191 +1,5 @@
|
|||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`<RoomLiveShareWarning /> when user has live beacons renders correctly with one live beacon in room 1`] = `
|
||||
<RoomLiveShareWarning
|
||||
roomId="$room1:server.org"
|
||||
>
|
||||
<div
|
||||
className="mx_RoomLiveShareWarning"
|
||||
>
|
||||
<StyledLiveBeaconIcon
|
||||
className="mx_RoomLiveShareWarning_icon"
|
||||
>
|
||||
<div
|
||||
className="mx_StyledLiveBeaconIcon mx_RoomLiveShareWarning_icon"
|
||||
/>
|
||||
</StyledLiveBeaconIcon>
|
||||
<span
|
||||
className="mx_RoomLiveShareWarning_label"
|
||||
>
|
||||
You are sharing your live location
|
||||
</span>
|
||||
<LiveTimeRemaining
|
||||
beacon={
|
||||
Beacon {
|
||||
"_beaconInfo": Object {
|
||||
"assetType": "m.self",
|
||||
"description": undefined,
|
||||
"live": true,
|
||||
"timeout": 3600000,
|
||||
"timestamp": 1647270879403,
|
||||
},
|
||||
"_events": Object {
|
||||
"Beacon.LivenessChange": Array [
|
||||
[Function],
|
||||
[Function],
|
||||
],
|
||||
"Beacon.new": [Function],
|
||||
"Beacon.update": [Function],
|
||||
},
|
||||
"_eventsCount": 3,
|
||||
"_isLive": true,
|
||||
"_maxListeners": undefined,
|
||||
"livenessWatchInterval": 1000000000002,
|
||||
"roomId": "$room1:server.org",
|
||||
"rootEvent": Object {
|
||||
"content": Object {
|
||||
"org.matrix.msc3488.asset": Object {
|
||||
"type": "m.self",
|
||||
},
|
||||
"org.matrix.msc3488.ts": 1647270879403,
|
||||
"org.matrix.msc3489.beacon_info": Object {
|
||||
"description": undefined,
|
||||
"live": true,
|
||||
"timeout": 3600000,
|
||||
},
|
||||
},
|
||||
"event_id": "$0",
|
||||
"room_id": "$room1:server.org",
|
||||
"state_key": "@alice:server.org",
|
||||
"type": "org.matrix.msc3489.beacon_info.@alice:server.org.2",
|
||||
},
|
||||
Symbol(kCapture): false,
|
||||
}
|
||||
}
|
||||
>
|
||||
<span
|
||||
className="mx_RoomLiveShareWarning_expiry"
|
||||
data-test-id="room-live-share-expiry"
|
||||
>
|
||||
1h left
|
||||
</span>
|
||||
</LiveTimeRemaining>
|
||||
<AccessibleButton
|
||||
data-test-id="room-live-share-stop-sharing"
|
||||
disabled={false}
|
||||
element="button"
|
||||
kind="danger"
|
||||
onClick={[Function]}
|
||||
role="button"
|
||||
tabIndex={0}
|
||||
>
|
||||
<button
|
||||
className="mx_AccessibleButton mx_AccessibleButton_hasKind mx_AccessibleButton_kind_danger"
|
||||
data-test-id="room-live-share-stop-sharing"
|
||||
onClick={[Function]}
|
||||
onKeyDown={[Function]}
|
||||
onKeyUp={[Function]}
|
||||
role="button"
|
||||
tabIndex={0}
|
||||
>
|
||||
Stop sharing
|
||||
</button>
|
||||
</AccessibleButton>
|
||||
</div>
|
||||
</RoomLiveShareWarning>
|
||||
`;
|
||||
exports[`<RoomLiveShareWarning /> when user has live beacons renders correctly with one live beacon in room 1`] = `"<div class=\\"mx_RoomLiveShareWarning\\"><div class=\\"mx_StyledLiveBeaconIcon mx_RoomLiveShareWarning_icon\\"></div><span class=\\"mx_RoomLiveShareWarning_label\\">You are sharing your live location</span><span data-test-id=\\"room-live-share-expiry\\" class=\\"mx_RoomLiveShareWarning_expiry\\">1h left</span><button data-test-id=\\"room-live-share-stop-sharing\\" role=\\"button\\" tabindex=\\"0\\" class=\\"mx_AccessibleButton mx_AccessibleButton_hasKind mx_AccessibleButton_kind_danger\\">Stop sharing</button></div>"`;
|
||||
|
||||
exports[`<RoomLiveShareWarning /> when user has live beacons renders correctly with two live beacons in room 1`] = `
|
||||
<RoomLiveShareWarning
|
||||
roomId="$room2:server.org"
|
||||
>
|
||||
<div
|
||||
className="mx_RoomLiveShareWarning"
|
||||
>
|
||||
<StyledLiveBeaconIcon
|
||||
className="mx_RoomLiveShareWarning_icon"
|
||||
>
|
||||
<div
|
||||
className="mx_StyledLiveBeaconIcon mx_RoomLiveShareWarning_icon"
|
||||
/>
|
||||
</StyledLiveBeaconIcon>
|
||||
<span
|
||||
className="mx_RoomLiveShareWarning_label"
|
||||
>
|
||||
You are sharing your live location
|
||||
</span>
|
||||
<LiveTimeRemaining
|
||||
beacon={
|
||||
Beacon {
|
||||
"_beaconInfo": Object {
|
||||
"assetType": "m.self",
|
||||
"description": undefined,
|
||||
"live": true,
|
||||
"timeout": 43200000,
|
||||
"timestamp": 1647270879403,
|
||||
},
|
||||
"_events": Object {
|
||||
"Beacon.LivenessChange": Array [
|
||||
[Function],
|
||||
[Function],
|
||||
],
|
||||
"Beacon.new": [Function],
|
||||
"Beacon.update": [Function],
|
||||
},
|
||||
"_eventsCount": 3,
|
||||
"_isLive": true,
|
||||
"_maxListeners": undefined,
|
||||
"livenessWatchInterval": 1000000000010,
|
||||
"roomId": "$room2:server.org",
|
||||
"rootEvent": Object {
|
||||
"content": Object {
|
||||
"org.matrix.msc3488.asset": Object {
|
||||
"type": "m.self",
|
||||
},
|
||||
"org.matrix.msc3488.ts": 1647270879403,
|
||||
"org.matrix.msc3489.beacon_info": Object {
|
||||
"description": undefined,
|
||||
"live": true,
|
||||
"timeout": 43200000,
|
||||
},
|
||||
},
|
||||
"event_id": "$2",
|
||||
"room_id": "$room2:server.org",
|
||||
"state_key": "@alice:server.org",
|
||||
"type": "org.matrix.msc3489.beacon_info.@alice:server.org.4",
|
||||
},
|
||||
Symbol(kCapture): false,
|
||||
}
|
||||
}
|
||||
>
|
||||
<span
|
||||
className="mx_RoomLiveShareWarning_expiry"
|
||||
data-test-id="room-live-share-expiry"
|
||||
>
|
||||
12h left
|
||||
</span>
|
||||
</LiveTimeRemaining>
|
||||
<AccessibleButton
|
||||
data-test-id="room-live-share-stop-sharing"
|
||||
disabled={false}
|
||||
element="button"
|
||||
kind="danger"
|
||||
onClick={[Function]}
|
||||
role="button"
|
||||
tabIndex={0}
|
||||
>
|
||||
<button
|
||||
className="mx_AccessibleButton mx_AccessibleButton_hasKind mx_AccessibleButton_kind_danger"
|
||||
data-test-id="room-live-share-stop-sharing"
|
||||
onClick={[Function]}
|
||||
onKeyDown={[Function]}
|
||||
onKeyUp={[Function]}
|
||||
role="button"
|
||||
tabIndex={0}
|
||||
>
|
||||
Stop sharing
|
||||
</button>
|
||||
</AccessibleButton>
|
||||
</div>
|
||||
</RoomLiveShareWarning>
|
||||
`;
|
||||
exports[`<RoomLiveShareWarning /> when user has live beacons renders correctly with two live beacons in room 1`] = `"<div class=\\"mx_RoomLiveShareWarning\\"><div class=\\"mx_StyledLiveBeaconIcon mx_RoomLiveShareWarning_icon\\"></div><span class=\\"mx_RoomLiveShareWarning_label\\">You are sharing your live location</span><span data-test-id=\\"room-live-share-expiry\\" class=\\"mx_RoomLiveShareWarning_expiry\\">12h left</span><button data-test-id=\\"room-live-share-stop-sharing\\" role=\\"button\\" tabindex=\\"0\\" class=\\"mx_AccessibleButton mx_AccessibleButton_hasKind mx_AccessibleButton_kind_danger\\">Stop sharing</button></div>"`;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue