UNPKG

@ledgerhq/live-common

Version:
76 lines 2.8 kB
/** * @jest-environment jsdom */ import { renderHook, act } from "@testing-library/react"; import { from } from "rxjs"; import { DeviceModelId } from "@ledgerhq/devices"; import Transport from "@ledgerhq/hw-transport"; import { withDevice } from "../../hw/deviceAccess"; import { getVersion } from "../../device/use-cases/getVersionUseCase"; import { useBleDevicePairing } from "./useBleDevicePairing"; jest.mock("../../hw/deviceAccess"); jest.mock("../../device/use-cases/getVersionUseCase"); jest.mock("@ledgerhq/hw-transport"); jest.useFakeTimers(); const mockedGetVersion = jest.mocked(getVersion); const mockedWithDevice = jest.mocked(withDevice); mockedWithDevice.mockReturnValue(job => from(job(new Transport()))); const aFirmwareInfo = { isBootloader: false, rawVersion: "", targetId: 0, mcuVersion: "", flags: Buffer.from([]), }; const aDevice = { deviceId: "DEVICE_ID_A", deviceName: "DEVICE_NAME_A", modelId: DeviceModelId.stax, wired: false, }; // FIXME: once we have our own definition of BleError class, this won't be needed class BleError extends Error { errorCode; constructor(message, errorCode) { super(message); this.errorCode = errorCode; } } describe("useBleDevicePairing", () => { afterEach(() => { mockedGetVersion.mockClear(); jest.clearAllTimers(); }); describe("When the request sent with the BLE transport to the device gets a success response", () => { beforeEach(() => { mockedGetVersion.mockResolvedValue(aFirmwareInfo); }); it("should inform the hook consumer that the device is paired", async () => { const { result } = renderHook(() => useBleDevicePairing({ deviceId: aDevice.deviceId, })); await act(async () => { jest.advanceTimersByTime(1); }); expect(result.current.isPaired).toBe(true); expect(result.current.pairingError).toBeNull(); }); }); describe("When the request sent with the BLE transport is rejected with an error", () => { beforeEach(() => { const bleError = new BleError("An error during pairing", 201); mockedGetVersion.mockRejectedValue(bleError); }); it("should inform the hook consumer an error occurred", async () => { const { result } = renderHook(() => useBleDevicePairing({ deviceId: aDevice.deviceId, })); await act(async () => { jest.advanceTimersByTime(1); }); expect(result.current.isPaired).toBe(false); expect(result.current.pairingError).not.toBeNull(); }); }); }); //# sourceMappingURL=useBleDevicePairing.test.js.map