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

Commit 89019cd

Browse files
author
Kerry Archibald
committed
integration-ish test client information in metadata
1 parent 552adb6 commit 89019cd

File tree

4 files changed

+56
-2
lines changed

4 files changed

+56
-2
lines changed

src/components/views/settings/devices/DeviceDetails.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ interface Props {
3333
}
3434

3535
interface MetadataTable {
36+
id: string;
3637
heading?: string;
3738
values: { label: string, value?: string | React.ReactNode }[];
3839
}
@@ -46,6 +47,7 @@ const DeviceDetails: React.FC<Props> = ({
4647
}) => {
4748
const metadata: MetadataTable[] = [
4849
{
50+
id: 'session',
4951
values: [
5052
{ label: _t('Session ID'), value: device.device_id },
5153
{
@@ -55,6 +57,7 @@ const DeviceDetails: React.FC<Props> = ({
5557
],
5658
},
5759
{
60+
id: 'application',
5861
heading: _t('Application'),
5962
values: [
6063
{ label: _t('Name'), value: device.clientName },
@@ -63,6 +66,7 @@ const DeviceDetails: React.FC<Props> = ({
6366
],
6467
},
6568
{
69+
id: 'device',
6670
heading: _t('Device'),
6771
values: [
6872
{ label: _t('IP address'), value: device.last_seen_ip },
@@ -88,9 +92,10 @@ const DeviceDetails: React.FC<Props> = ({
8892
</section>
8993
<section className='mx_DeviceDetails_section'>
9094
<p className='mx_DeviceDetails_sectionHeading'>{ _t('Session details') }</p>
91-
{ metadata.map(({ heading, values }, index) => <table
95+
{ metadata.map(({ heading, values, id }, index) => <table
9296
className='mx_DeviceDetails_metadataTable'
9397
key={index}
98+
data-testid={`device-detail-metadata-${id}`}
9499
>
95100
{ heading &&
96101
<thead>

test/components/views/settings/devices/__snapshots__/CurrentDeviceSection-test.tsx.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ HTMLCollection [
7676
</p>
7777
<table
7878
class="mx_DeviceDetails_metadataTable"
79+
data-testid="device-detail-metadata-session"
7980
>
8081
<tbody>
8182
<tr>

test/components/views/settings/devices/__snapshots__/DeviceDetails-test.tsx.snap

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ exports[`<DeviceDetails /> renders a verified device 1`] = `
6464
</p>
6565
<table
6666
class="mx_DeviceDetails_metadataTable"
67+
data-testid="device-detail-metadata-session"
6768
>
6869
<tbody>
6970
<tr>
@@ -165,6 +166,7 @@ exports[`<DeviceDetails /> renders device with metadata 1`] = `
165166
</p>
166167
<table
167168
class="mx_DeviceDetails_metadataTable"
169+
data-testid="device-detail-metadata-session"
168170
>
169171
<tbody>
170172
<tr>
@@ -195,6 +197,7 @@ exports[`<DeviceDetails /> renders device with metadata 1`] = `
195197
</table>
196198
<table
197199
class="mx_DeviceDetails_metadataTable"
200+
data-testid="device-detail-metadata-device"
198201
>
199202
<thead>
200203
<tr>
@@ -303,6 +306,7 @@ exports[`<DeviceDetails /> renders device without metadata 1`] = `
303306
</p>
304307
<table
305308
class="mx_DeviceDetails_metadataTable"
309+
data-testid="device-detail-metadata-session"
306310
>
307311
<tbody>
308312
<tr>

test/components/views/settings/tabs/user/SessionManagerTab-test.tsx

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import { logger } from 'matrix-js-sdk/src/logger';
2222
import { DeviceTrustLevel } from 'matrix-js-sdk/src/crypto/CrossSigning';
2323
import { VerificationRequest } from 'matrix-js-sdk/src/crypto/verification/request/VerificationRequest';
2424
import { sleep } from 'matrix-js-sdk/src/utils';
25-
import { IMyDevice } from 'matrix-js-sdk/src/matrix';
25+
import { IMyDevice, MatrixEvent } from 'matrix-js-sdk/src/matrix';
2626

2727
import SessionManagerTab from '../../../../../../src/components/views/settings/tabs/user/SessionManagerTab';
2828
import MatrixClientContext from '../../../../../../src/contexts/MatrixClientContext';
@@ -102,6 +102,8 @@ describe('<SessionManagerTab />', () => {
102102
mockClient.getDevices
103103
.mockReset()
104104
.mockResolvedValue({ devices: [alicesDevice, alicesMobileDevice] });
105+
106+
mockClient.getAccountData.mockReturnValue(undefined);
105107
});
106108

107109
it('renders spinner while devices load', () => {
@@ -167,6 +169,48 @@ describe('<SessionManagerTab />', () => {
167169
expect(getByTestId(`device-tile-${alicesDevice.device_id}`)).toMatchSnapshot();
168170
});
169171

172+
it('extends device with client information when available', async () => {
173+
mockClient.getDevices.mockResolvedValue({ devices: [alicesDevice, alicesMobileDevice] });
174+
mockClient.getAccountData.mockImplementation((eventType: string) => {
175+
const content = {
176+
name: 'Element Web',
177+
version: '1.2.3',
178+
url: 'test.com',
179+
};
180+
return new MatrixEvent({
181+
type: eventType,
182+
content,
183+
});
184+
});
185+
186+
const { getByTestId } = render(getComponent());
187+
188+
await act(async () => {
189+
await flushPromisesWithFakeTimers();
190+
});
191+
192+
// once for each device
193+
expect(mockClient.getAccountData).toHaveBeenCalledTimes(2);
194+
195+
toggleDeviceDetails(getByTestId, alicesDevice.device_id);
196+
// application metadata section rendered
197+
expect(getByTestId('device-detail-metadata-application')).toBeTruthy();
198+
});
199+
200+
it('renders devices without available client information without error', async () => {
201+
mockClient.getDevices.mockResolvedValue({ devices: [alicesDevice, alicesMobileDevice] });
202+
203+
const { getByTestId, queryByTestId } = render(getComponent());
204+
205+
await act(async () => {
206+
await flushPromisesWithFakeTimers();
207+
});
208+
209+
toggleDeviceDetails(getByTestId, alicesDevice.device_id);
210+
// application metadata section not rendered
211+
expect(queryByTestId('device-detail-metadata-application')).toBeFalsy();
212+
});
213+
170214
it('renders current session section with an unverified session', async () => {
171215
mockClient.getDevices.mockResolvedValue({ devices: [alicesDevice, alicesMobileDevice] });
172216
const { getByTestId } = render(getComponent());

0 commit comments

Comments
 (0)