feat(unifi): implement comprehensive UniFi API client with controllers, protect, access, account, managers, resources, HTTP client, interfaces, logging, plugins, and tests
This commit is contained in:
181
test/test.ts
181
test/test.ts
@@ -1,8 +1,179 @@
|
||||
import { expect, tap } from '@git.zone/tstest/tapbundle';
|
||||
import * as unifi from '../ts/index.js'
|
||||
import * as unifi from '../ts/index.js';
|
||||
|
||||
tap.test('first test', async () => {
|
||||
console.log(unifi)
|
||||
})
|
||||
// =============================================================================
|
||||
// UNIT TESTS - No credentials needed, tests class structure and exports
|
||||
// =============================================================================
|
||||
|
||||
export default tap.start()
|
||||
tap.test('should export all main classes', async () => {
|
||||
// Entry point classes
|
||||
expect(unifi.UnifiAccount).toBeDefined();
|
||||
expect(unifi.UnifiController).toBeDefined();
|
||||
expect(unifi.UnifiProtect).toBeDefined();
|
||||
expect(unifi.UnifiAccess).toBeDefined();
|
||||
|
||||
// Manager classes
|
||||
expect(unifi.SiteManager).toBeDefined();
|
||||
expect(unifi.HostManager).toBeDefined();
|
||||
expect(unifi.DeviceManager).toBeDefined();
|
||||
expect(unifi.ClientManager).toBeDefined();
|
||||
expect(unifi.CameraManager).toBeDefined();
|
||||
expect(unifi.DoorManager).toBeDefined();
|
||||
|
||||
// Resource classes
|
||||
expect(unifi.UnifiSite).toBeDefined();
|
||||
expect(unifi.UnifiHost).toBeDefined();
|
||||
expect(unifi.UnifiDevice).toBeDefined();
|
||||
expect(unifi.UnifiClient).toBeDefined();
|
||||
expect(unifi.UnifiCamera).toBeDefined();
|
||||
expect(unifi.UnifiDoor).toBeDefined();
|
||||
|
||||
// HTTP client
|
||||
expect(unifi.UnifiHttp).toBeDefined();
|
||||
});
|
||||
|
||||
tap.test('should instantiate UnifiAccount', async () => {
|
||||
const account = new unifi.UnifiAccount({
|
||||
apiKey: 'test-api-key',
|
||||
});
|
||||
|
||||
expect(account).toBeInstanceOf(unifi.UnifiAccount);
|
||||
expect(account.siteManager).toBeInstanceOf(unifi.SiteManager);
|
||||
expect(account.hostManager).toBeInstanceOf(unifi.HostManager);
|
||||
});
|
||||
|
||||
tap.test('should instantiate UnifiController', async () => {
|
||||
const controller = new unifi.UnifiController({
|
||||
host: '192.168.1.1',
|
||||
username: 'admin',
|
||||
password: 'password',
|
||||
controllerType: 'unifi-os',
|
||||
});
|
||||
|
||||
expect(controller).toBeInstanceOf(unifi.UnifiController);
|
||||
expect(controller.deviceManager).toBeInstanceOf(unifi.DeviceManager);
|
||||
expect(controller.clientManager).toBeInstanceOf(unifi.ClientManager);
|
||||
expect(controller.isAuthenticated()).toBeFalse();
|
||||
});
|
||||
|
||||
tap.test('should instantiate UnifiProtect', async () => {
|
||||
const protect = new unifi.UnifiProtect({
|
||||
host: '192.168.1.1',
|
||||
username: 'admin',
|
||||
password: 'password',
|
||||
});
|
||||
|
||||
expect(protect).toBeInstanceOf(unifi.UnifiProtect);
|
||||
expect(protect.cameraManager).toBeInstanceOf(unifi.CameraManager);
|
||||
expect(protect.isAuthenticated()).toBeFalse();
|
||||
});
|
||||
|
||||
tap.test('should instantiate UnifiAccess', async () => {
|
||||
const access = new unifi.UnifiAccess({
|
||||
host: '192.168.1.1',
|
||||
token: 'test-bearer-token',
|
||||
});
|
||||
|
||||
expect(access).toBeInstanceOf(unifi.UnifiAccess);
|
||||
expect(access.doorManager).toBeInstanceOf(unifi.DoorManager);
|
||||
});
|
||||
|
||||
tap.test('should create UnifiSite from API object', async () => {
|
||||
const site = unifi.UnifiSite.createFromApiObject({
|
||||
siteId: 'site-123',
|
||||
name: 'Test Site',
|
||||
description: 'A test site',
|
||||
isDefault: true,
|
||||
timezone: 'UTC',
|
||||
});
|
||||
|
||||
expect(site.siteId).toEqual('site-123');
|
||||
expect(site.name).toEqual('Test Site');
|
||||
expect(site.isDefault).toBeTrue();
|
||||
});
|
||||
|
||||
tap.test('should create UnifiDevice from API object', async () => {
|
||||
const device = unifi.UnifiDevice.createFromApiObject({
|
||||
_id: 'dev-123',
|
||||
mac: '00:11:22:33:44:55',
|
||||
model: 'UAP-AC-Pro',
|
||||
type: 'uap',
|
||||
name: 'Living Room AP',
|
||||
site_id: 'default',
|
||||
adopted: true,
|
||||
ip: '192.168.1.100',
|
||||
state: 1,
|
||||
version: '6.0.0',
|
||||
});
|
||||
|
||||
expect(device._id).toEqual('dev-123');
|
||||
expect(device.mac).toEqual('00:11:22:33:44:55');
|
||||
expect(device.isOnline()).toBeTrue();
|
||||
expect(device.isAccessPoint()).toBeTrue();
|
||||
expect(device.isSwitch()).toBeFalse();
|
||||
expect(device.getDisplayName()).toEqual('Living Room AP');
|
||||
});
|
||||
|
||||
tap.test('should create UnifiClient from API object', async () => {
|
||||
const client = unifi.UnifiClient.createFromApiObject({
|
||||
_id: 'client-123',
|
||||
mac: 'aa:bb:cc:dd:ee:ff',
|
||||
site_id: 'default',
|
||||
is_wired: false,
|
||||
hostname: 'laptop',
|
||||
ip: '192.168.1.50',
|
||||
essid: 'HomeWiFi',
|
||||
signal: -55,
|
||||
tx_bytes: 1073741824,
|
||||
rx_bytes: 2147483648,
|
||||
});
|
||||
|
||||
expect(client._id).toEqual('client-123');
|
||||
expect(client.isWireless()).toBeTrue();
|
||||
expect(client.getConnectionType()).toEqual('Wireless (HomeWiFi)');
|
||||
expect(client.getSignalQuality()).toEqual('Good');
|
||||
expect(client.getDataUsage()).toEqual(3221225472);
|
||||
});
|
||||
|
||||
tap.test('should create UnifiCamera from API object', async () => {
|
||||
const camera = unifi.UnifiCamera.createFromApiObject({
|
||||
id: 'cam-123',
|
||||
mac: '00:11:22:33:44:66',
|
||||
host: '192.168.1.101',
|
||||
name: 'Front Door',
|
||||
type: 'UVC-G4-Doorbell',
|
||||
state: 'CONNECTED',
|
||||
isConnected: true,
|
||||
isRecording: true,
|
||||
featureFlags: {
|
||||
hasSmartDetect: true,
|
||||
hasMic: true,
|
||||
hasSpeaker: true,
|
||||
},
|
||||
lastMotion: Date.now() - 30000,
|
||||
});
|
||||
|
||||
expect(camera.id).toEqual('cam-123');
|
||||
expect(camera.isOnline()).toBeTrue();
|
||||
expect(camera.isDoorbell()).toBeTrue();
|
||||
expect(camera.hasSmartDetect()).toBeTrue();
|
||||
expect(camera.hasRecentMotion(60)).toBeTrue();
|
||||
});
|
||||
|
||||
tap.test('should create UnifiDoor from API object', async () => {
|
||||
const door = unifi.UnifiDoor.createFromApiObject({
|
||||
unique_id: 'door-123',
|
||||
name: 'Main Entrance',
|
||||
alias: 'Front Door',
|
||||
door_lock_relay_status: 'lock',
|
||||
door_position_status: 'close',
|
||||
});
|
||||
|
||||
expect(door.unique_id).toEqual('door-123');
|
||||
expect(door.getDisplayName()).toEqual('Front Door');
|
||||
expect(door.isLocked()).toBeTrue();
|
||||
expect(door.isClosed()).toBeTrue();
|
||||
expect(door.getStatus()).toEqual('Locked, Closed');
|
||||
});
|
||||
|
||||
export default tap.start();
|
||||
|
||||
Reference in New Issue
Block a user