@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
76 lines • 2.8 kB
JavaScript
/**
* @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