import unifiedDiscover, { discoverKasaDevices, discoverTapoDevices, UnifiedDiscoveryConfig } from '../src/unified-discovery'; import { DeviceProtocol, UnifiedDeviceFactory } from '../src/unified-device-factory'; import { describe, it, expect } from '@jest/globals'; describe('Unified Discovery', () => { describe('Device Protocol Detection', () => { it('should detect Kasa devices correctly', () => { const kasaDevices = [{ model: 'HS100' }, { model: 'KP115' }, { model: 'KL130' }, { model: 'LB130' }, { model: 'EP40' }]; kasaDevices.forEach((device) => { expect(UnifiedDeviceFactory.detectProtocol(device)).toBe(DeviceProtocol.KASA); }); }); it('should detect Tapo devices correctly', () => { const tapoDevices = [{ deviceType: 'SMART.TAPOBULB' }, { device_type: 'SMART.TAPOSTRIP' }, { model: 'Tapo L530' }]; tapoDevices.forEach((device) => { expect(UnifiedDeviceFactory.detectProtocol(device)).toBe(DeviceProtocol.TAPO); }); }); }); describe('Unified Device Creation', () => { it('should create unified device from Kasa info', () => { const kasaInfo = { deviceId: 'kasa123', alias: 'Living Room Light', address: '192.168.1.100', model: 'KL130', device_type: 'IOT.SMARTBULB', }; const unifiedDevice = UnifiedDeviceFactory.createUnifiedDevice(kasaInfo); expect(unifiedDevice.id).toBe('kasa123'); expect(unifiedDevice.name).toBe('Living Room Light'); expect(unifiedDevice.host).toBe('192.168.1.100'); expect(unifiedDevice.protocol).toBe(DeviceProtocol.KASA); expect(unifiedDevice.model).toBe('KL130'); }); it('should create unified device from Tapo info', () => { const tapoInfo = { deviceMac: 'AA:BB:CC:DD:EE:FF', deviceName: 'Bedroom Light', ip: '192.168.1.101', deviceModel: 'L530', deviceType: 'SMART.TAPOBULB', }; const unifiedDevice = UnifiedDeviceFactory.createUnifiedDevice(tapoInfo); expect(unifiedDevice.id).toBe('AA:BB:CC:DD:EE:FF'); expect(unifiedDevice.name).toBe('Bedroom Light'); expect(unifiedDevice.host).toBe('192.168.1.101'); expect(unifiedDevice.protocol).toBe(DeviceProtocol.TAPO); expect(unifiedDevice.model).toBe('L530'); }); }); describe('Discovery Configuration', () => { it('should respect discovery configuration options', async () => { const config: UnifiedDiscoveryConfig = { includeKasa: false, includeTapo: true, kasaTimeout: 2000, }; // This is a mock test - in real scenarios, you'd mock the network calls expect(config.includeKasa).toBe(false); expect(config.includeTapo).toBe(true); expect(config.kasaTimeout).toBe(2000); }); }); });