Merge branch 'develop' into florianduros/tooltip-update
This commit is contained in:
commit
e53b175a6b
18 changed files with 823 additions and 8 deletions
|
@ -407,6 +407,183 @@ describe("<UserInfo />", () => {
|
|||
await waitFor(() => expect(screen.getByRole("button", { name: "Verify" })).toBeInTheDocument());
|
||||
expect(container).toMatchSnapshot();
|
||||
});
|
||||
|
||||
describe("device dehydration", () => {
|
||||
it("hides a verified dehydrated device (unverified user)", async () => {
|
||||
const device1 = new Device({
|
||||
deviceId: "d1",
|
||||
userId: defaultUserId,
|
||||
displayName: "my device",
|
||||
algorithms: [],
|
||||
keys: new Map(),
|
||||
});
|
||||
const device2 = new Device({
|
||||
deviceId: "d2",
|
||||
userId: defaultUserId,
|
||||
displayName: "dehydrated device",
|
||||
algorithms: [],
|
||||
keys: new Map(),
|
||||
dehydrated: true,
|
||||
});
|
||||
const devicesMap = new Map<string, Device>([
|
||||
[device1.deviceId, device1],
|
||||
[device2.deviceId, device2],
|
||||
]);
|
||||
const userDeviceMap = new Map<string, Map<string, Device>>([[defaultUserId, devicesMap]]);
|
||||
mockCrypto.getUserDeviceInfo.mockResolvedValue(userDeviceMap);
|
||||
|
||||
renderComponent({ room: mockRoom });
|
||||
await act(flushPromises);
|
||||
|
||||
// check the button exists with the expected text (the dehydrated device shouldn't be counted)
|
||||
const devicesButton = screen.getByRole("button", { name: "1 session" });
|
||||
|
||||
// click it
|
||||
await act(() => {
|
||||
return userEvent.click(devicesButton);
|
||||
});
|
||||
|
||||
// there should now be a button with the non-dehydrated device ID
|
||||
expect(screen.getByRole("button", { description: "d1" })).toBeInTheDocument();
|
||||
|
||||
// but not for the dehydrated device ID
|
||||
expect(screen.queryByRole("button", { description: "d2" })).not.toBeInTheDocument();
|
||||
|
||||
// there should be a line saying that the user has "Offline device" enabled
|
||||
expect(screen.getByText("Offline device enabled")).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it("hides a verified dehydrated device (verified user)", async () => {
|
||||
const device1 = new Device({
|
||||
deviceId: "d1",
|
||||
userId: defaultUserId,
|
||||
displayName: "my device",
|
||||
algorithms: [],
|
||||
keys: new Map(),
|
||||
});
|
||||
const device2 = new Device({
|
||||
deviceId: "d2",
|
||||
userId: defaultUserId,
|
||||
displayName: "dehydrated device",
|
||||
algorithms: [],
|
||||
keys: new Map(),
|
||||
dehydrated: true,
|
||||
});
|
||||
const devicesMap = new Map<string, Device>([
|
||||
[device1.deviceId, device1],
|
||||
[device2.deviceId, device2],
|
||||
]);
|
||||
const userDeviceMap = new Map<string, Map<string, Device>>([[defaultUserId, devicesMap]]);
|
||||
mockCrypto.getUserDeviceInfo.mockResolvedValue(userDeviceMap);
|
||||
mockCrypto.getUserVerificationStatus.mockResolvedValue(new UserVerificationStatus(true, true, true));
|
||||
mockCrypto.getDeviceVerificationStatus.mockResolvedValue({
|
||||
isVerified: () => true,
|
||||
} as DeviceVerificationStatus);
|
||||
|
||||
renderComponent({ room: mockRoom });
|
||||
await act(flushPromises);
|
||||
|
||||
// check the button exists with the expected text (the dehydrated device shouldn't be counted)
|
||||
const devicesButton = screen.getByRole("button", { name: "1 verified session" });
|
||||
|
||||
// click it
|
||||
await act(() => {
|
||||
return userEvent.click(devicesButton);
|
||||
});
|
||||
|
||||
// there should now be a button with the non-dehydrated device ID
|
||||
expect(screen.getByTitle("d1")).toBeInTheDocument();
|
||||
|
||||
// but not for the dehydrated device ID
|
||||
expect(screen.queryByTitle("d2")).not.toBeInTheDocument();
|
||||
|
||||
// there should be a line saying that the user has "Offline device" enabled
|
||||
expect(screen.getByText("Offline device enabled")).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it("shows an unverified dehydrated device", async () => {
|
||||
const device1 = new Device({
|
||||
deviceId: "d1",
|
||||
userId: defaultUserId,
|
||||
displayName: "my device",
|
||||
algorithms: [],
|
||||
keys: new Map(),
|
||||
});
|
||||
const device2 = new Device({
|
||||
deviceId: "d2",
|
||||
userId: defaultUserId,
|
||||
displayName: "dehydrated device",
|
||||
algorithms: [],
|
||||
keys: new Map(),
|
||||
dehydrated: true,
|
||||
});
|
||||
const devicesMap = new Map<string, Device>([
|
||||
[device1.deviceId, device1],
|
||||
[device2.deviceId, device2],
|
||||
]);
|
||||
const userDeviceMap = new Map<string, Map<string, Device>>([[defaultUserId, devicesMap]]);
|
||||
mockCrypto.getUserDeviceInfo.mockResolvedValue(userDeviceMap);
|
||||
mockCrypto.getUserVerificationStatus.mockResolvedValue(new UserVerificationStatus(true, true, true));
|
||||
|
||||
renderComponent({ room: mockRoom });
|
||||
await act(flushPromises);
|
||||
|
||||
// the dehydrated device should be shown as an unverified device, which means
|
||||
// there should now be a button with the device id ...
|
||||
const deviceButton = screen.getByRole("button", { description: "d2" });
|
||||
|
||||
// ... which should contain the device name
|
||||
expect(within(deviceButton).getByText("dehydrated device")).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it("shows dehydrated devices if there is more than one", async () => {
|
||||
const device1 = new Device({
|
||||
deviceId: "d1",
|
||||
userId: defaultUserId,
|
||||
displayName: "dehydrated device 1",
|
||||
algorithms: [],
|
||||
keys: new Map(),
|
||||
dehydrated: true,
|
||||
});
|
||||
const device2 = new Device({
|
||||
deviceId: "d2",
|
||||
userId: defaultUserId,
|
||||
displayName: "dehydrated device 2",
|
||||
algorithms: [],
|
||||
keys: new Map(),
|
||||
dehydrated: true,
|
||||
});
|
||||
const devicesMap = new Map<string, Device>([
|
||||
[device1.deviceId, device1],
|
||||
[device2.deviceId, device2],
|
||||
]);
|
||||
const userDeviceMap = new Map<string, Map<string, Device>>([[defaultUserId, devicesMap]]);
|
||||
mockCrypto.getUserDeviceInfo.mockResolvedValue(userDeviceMap);
|
||||
|
||||
renderComponent({ room: mockRoom });
|
||||
await act(flushPromises);
|
||||
|
||||
// check the button exists with the expected text (the dehydrated device shouldn't be counted)
|
||||
const devicesButton = screen.getByRole("button", { name: "2 sessions" });
|
||||
|
||||
// click it
|
||||
await act(() => {
|
||||
return userEvent.click(devicesButton);
|
||||
});
|
||||
|
||||
// the dehydrated devices should be shown as an unverified device, which means
|
||||
// there should now be a button with the first dehydrated device id ...
|
||||
const device1Button = screen.getByRole("button", { description: "d1" });
|
||||
|
||||
// ... which should contain the device name
|
||||
expect(within(device1Button).getByText("dehydrated device 1")).toBeInTheDocument();
|
||||
// and a button with the second dehydrated device id ...
|
||||
const device2Button = screen.getByRole("button", { description: "d2" });
|
||||
|
||||
// ... which should contain the device name
|
||||
expect(within(device2Button).getByText("dehydrated device 2")).toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("with an encrypted room", () => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue