The device info resource, /ISAPI/System/deviceInfo.
model, firmwareVersion and deviceType are always present; the rest are
left out when the device does not send them. Parsing throws an Error when a
required field is missing and an IsapiError on a failing <ResponseStatus>.
Read through a stubbed fetch
Read through a stubbed fetch
import { assertEquals } from "@std/assert"; import { resolvesNext, spy } from "@std/testing/mock"; import { request } from "../request.ts"; import { deviceInfo } from "./device-info.ts"; const fetch = spy(resolvesNext([ new Response( "<DeviceInfo><model>DS-2CD2043G2-I</model>" + "<firmwareVersion>V5.7.3</firmwareVersion><deviceType>IPCamera</deviceType></DeviceInfo>", ), ])); const info = await request({ baseUrl: "http://192.0.2.21", username: "admin", password: "hunter2", fetch, }, deviceInfo); assertEquals(info.deviceType, "IPCamera"); assertEquals(info.serialNumber, undefined); assertEquals(fetch.calls[0].args[0], "http://192.0.2.21/ISAPI/System/deviceInfo");