homebridge-tsvesync
Version:
Homebridge plugin for VeSync devices including Levoit air purifiers, humidifiers, and Etekcity smart outlets
270 lines • 7.03 kB
TypeScript
/// <reference types="jest" />
import { Logger } from 'homebridge';
import { PluginLogger } from '../../utils/logger';
import { RetryManager } from '../../utils/retry';
import { VeSyncOutlet } from '../../types/device.types';
import { VeSync } from 'tsvesync';
import { VeSyncSwitch } from '../../types/device.types';
import { VeSyncBulb } from '../../types/device.types';
import { VeSyncFan } from '../../types/device.types';
/**
* Creates a mock Logger instance for testing
*/
export declare const createMockLogger: () => jest.Mocked<Logger>;
/**
* Creates a mock PluginLogger instance for testing
*/
export declare const createMockPluginLogger: (log?: Logger) => jest.Mocked<PluginLogger>;
/**
* Creates a mock RetryManager instance for testing
*/
export declare const createMockRetryManager: () => jest.Mocked<RetryManager>;
/**
* Creates a mock service instance for testing
*/
export declare const createMockService: () => {
getCharacteristic: jest.Mock<any, any, any>;
setCharacteristic: jest.Mock<any, any, any>;
testCharacteristic: jest.Mock<any, any, any>;
removeCharacteristic: jest.Mock<any, any, any>;
addCharacteristic: jest.Mock<any, any, any>;
};
/**
* Creates a mock info service instance for testing
*/
export declare const createMockInfoService: () => {
setCharacteristic: jest.Mock<any, any, any>;
};
/**
* Type for mock device configuration
*/
export interface MockDeviceConfig {
deviceName?: string;
uuid?: string;
deviceType?: string;
getDetails?: jest.Mock;
}
/**
* Creates a mock device instance for testing
*/
export declare const createMockDevice: (config?: MockDeviceConfig) => {
deviceName: string;
uuid: string;
deviceType: string;
getDetails: jest.Mock<any, any, any>;
};
/**
* Waits for all promises in the queue to resolve
*/
export declare const flushPromises: () => Promise<unknown>;
/**
* Helper to run async tests with proper timeout and error handling
*/
export declare const runAsyncTest: (testFn: () => Promise<void>, timeout?: number) => Promise<void>;
/**
* Simulates a network delay
*/
export declare const simulateNetworkDelay: (ms?: number) => Promise<void>;
/**
* Type for mock outlet configuration
*/
export interface MockOutletConfig {
deviceName?: string;
deviceType?: string;
cid?: string;
uuid?: string;
power?: number;
voltage?: number;
energy?: number;
current?: number;
}
/**
* Creates a mock outlet instance for testing
*/
export declare const createMockOutlet: (config?: MockOutletConfig) => jest.Mocked<VeSyncOutlet>;
/**
* Creates a mock VeSync client for testing
*/
export declare const createMockVeSync: () => jest.Mocked<VeSync>;
/**
* Type for mock switch configuration
*/
export interface MockSwitchConfig {
deviceName?: string;
deviceType?: string;
cid?: string;
uuid?: string;
power?: boolean;
}
/**
* Creates a mock switch instance for testing
*/
export declare const createMockSwitch: (config?: MockSwitchConfig) => jest.Mocked<VeSyncSwitch>;
export interface MockLightOptions {
deviceName: string;
deviceType: string;
cid: string;
uuid: string;
power?: boolean;
brightness?: number;
colorTemp?: number;
hue?: number;
saturation?: number;
subDeviceNo?: number;
isSubDevice?: boolean;
}
export declare function createMockLight(options: MockLightOptions): VeSyncBulb;
/**
* Type for mock fan configuration
*/
export interface MockFanConfig {
deviceName?: string;
deviceType?: string;
cid?: string;
uuid?: string;
speed?: number;
rotationDirection?: 'clockwise' | 'counterclockwise';
oscillationState?: boolean;
childLock?: boolean;
mode?: 'normal' | 'auto' | 'sleep' | 'turbo';
}
/**
* Creates a mock fan instance for testing
*/
export declare const createMockFan: (config?: MockFanConfig) => jest.Mocked<VeSyncFan>;
/**
* Type for mock bulb configuration
*/
export interface MockBulbConfig {
deviceName?: string;
deviceType?: string;
cid?: string;
uuid?: string;
brightness?: number;
colorTemp?: number;
hue?: number;
saturation?: number;
}
/**
* Creates a mock bulb instance for testing
*/
export declare const createMockBulb: (config?: MockBulbConfig) => jest.Mocked<VeSyncBulb>;
/**
* Type for mock air purifier configuration
*/
export interface MockAirPurifierConfig {
deviceName?: string;
deviceType?: string;
cid?: string;
uuid?: string;
airQualityValue?: number;
pm1?: number;
pm10?: number;
aqPercent?: number;
filterLife?: number | {
percent: number;
};
hasAirQuality?: boolean;
hasFilter?: boolean;
}
/**
* Creates a mock air purifier with air quality and filter features
*/
export declare const createMockAirPurifier: (config?: MockAirPurifierConfig) => jest.Mocked<VeSyncFan>;
/**
* Air quality test scenarios for different conditions
*/
export declare const airQualityScenarios: {
excellent: {
pm25: number;
pm1: number;
pm10: number;
level: number;
description: string;
};
good: {
pm25: number;
pm1: number;
pm10: number;
level: number;
description: string;
};
fair: {
pm25: number;
pm1: number;
pm10: number;
level: number;
description: string;
};
poor: {
pm25: number;
pm1: number;
pm10: number;
level: number;
description: string;
};
veryPoor: {
pm25: number;
pm1: number;
pm10: number;
level: number;
description: string;
};
};
/**
* Filter life test scenarios
*/
export declare const filterLifeScenarios: {
new: {
percent: number;
needsReplacement: boolean;
description: string;
};
good: {
percent: number;
needsReplacement: boolean;
description: string;
};
fair: {
percent: number;
needsReplacement: boolean;
description: string;
};
low: {
percent: number;
needsReplacement: boolean;
description: string;
};
critical: {
percent: number;
needsReplacement: boolean;
description: string;
};
empty: {
percent: number;
needsReplacement: boolean;
description: string;
};
};
/**
* Creates air quality test data for device mocking
*/
export declare const createAirQualityTestData: (scenario: keyof typeof airQualityScenarios) => {
air_quality: number;
air_quality_value: number;
pm1: number;
pm10: number;
aq_percent: number;
};
/**
* Creates filter life test data for device mocking
*/
export declare const createFilterLifeTestData: (scenario: keyof typeof filterLifeScenarios, format?: 'number' | 'object') => {
filter_life: {
percent: number;
replace_indicator: boolean;
};
} | {
filter_life: number;
};
//# sourceMappingURL=test-helpers.d.ts.map