UNPKG

energy-manager-iot

Version:

Library for energy management in IoT devices via MQTT protocol. Documentation: https://jonhvmp.github.io/energy-manager-iot-docs/

116 lines (115 loc) 6.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); // Ensure MQTT mock is applied before importing validators const validators_1 = require("../utils/validators"); const command_1 = require("../types/command"); /** * Tests for validator utility functions * * This test suite verifies that the validator functions correctly * identify valid and invalid input values according to system requirements. */ // Ensure MQTT module is mocked jest.mock('mqtt'); describe('Validators', () => { describe('validateDeviceId', () => { test('should accept valid IDs', () => { expect((0, validators_1.validateDeviceId)('sensor1')).toBe(true); expect((0, validators_1.validateDeviceId)('DEVICE_123')).toBe(true); expect((0, validators_1.validateDeviceId)('temp-sensor-01')).toBe(true); expect((0, validators_1.validateDeviceId)('a'.repeat(50))).toBe(true); // 50 characters }); test('should reject invalid IDs', () => { expect((0, validators_1.validateDeviceId)('')).toBe(false); // Empty expect((0, validators_1.validateDeviceId)('ab')).toBe(false); // Too short expect((0, validators_1.validateDeviceId)('device@123')).toBe(false); // Special characters expect((0, validators_1.validateDeviceId)('a'.repeat(51))).toBe(false); // Too long }); }); describe('validateGroupName', () => { test('should accept valid group names', () => { expect((0, validators_1.validateGroupName)('living-room')).toBe(true); expect((0, validators_1.validateGroupName)('Room 1')).toBe(true); expect((0, validators_1.validateGroupName)('ab')).toBe(true); // 2 characters expect((0, validators_1.validateGroupName)('a'.repeat(50))).toBe(true); // 50 characters }); test('should reject invalid group names', () => { expect((0, validators_1.validateGroupName)('')).toBe(false); // Empty expect((0, validators_1.validateGroupName)('a')).toBe(false); // Too short expect((0, validators_1.validateGroupName)('room@home')).toBe(false); // Special characters expect((0, validators_1.validateGroupName)('a'.repeat(51))).toBe(false); // Too long }); }); describe('validateMqttBrokerUrl', () => { test('should accept valid broker URLs', () => { expect((0, validators_1.validateMqttBrokerUrl)('mqtt://localhost')).toBe(true); expect((0, validators_1.validateMqttBrokerUrl)('mqtt://localhost:1883')).toBe(true); expect((0, validators_1.validateMqttBrokerUrl)('mqtts://broker.example.com:8883')).toBe(true); }); test('should reject invalid broker URLs', () => { expect((0, validators_1.validateMqttBrokerUrl)('')).toBe(false); expect((0, validators_1.validateMqttBrokerUrl)('http://localhost')).toBe(false); // Wrong protocol expect((0, validators_1.validateMqttBrokerUrl)('mqtt://')).toBe(false); // No host expect((0, validators_1.validateMqttBrokerUrl)('mqtt://@:1883')).toBe(false); // Invalid format }); }); describe('validateCommand', () => { test('should accept valid commands', () => { expect((0, validators_1.validateCommand)({ type: command_1.CommandType.SLEEP, timestamp: Date.now() })).toBe(true); expect((0, validators_1.validateCommand)({ type: command_1.CommandType.SET_REPORTING, payload: { interval: 60 }, timestamp: Date.now() })).toBe(true); }); test('should reject invalid commands', () => { // Invalid type expect((0, validators_1.validateCommand)({ // @ts-ignore - Intentionally testing with invalid type type: 'invalid_command', timestamp: Date.now() })).toBe(false); // No timestamp expect((0, validators_1.validateCommand)({ type: command_1.CommandType.SLEEP, // @ts-ignore - Testing without timestamp timestamp: undefined })).toBe(false); // SET_REPORTING without proper payload expect((0, validators_1.validateCommand)({ type: command_1.CommandType.SET_REPORTING, timestamp: Date.now() })).toBe(false); expect((0, validators_1.validateCommand)({ type: command_1.CommandType.SET_REPORTING, payload: {}, // No interval timestamp: Date.now() })).toBe(false); expect((0, validators_1.validateCommand)({ type: command_1.CommandType.SET_REPORTING, payload: { interval: 'invalid' }, // Non-numeric interval timestamp: Date.now() })).toBe(false); }); }); describe('validateDeviceConfig', () => { test('should accept valid configurations', () => { expect((0, validators_1.validateDeviceConfig)({})).toBe(true); expect((0, validators_1.validateDeviceConfig)({ reportingInterval: 60 })).toBe(true); expect((0, validators_1.validateDeviceConfig)({ sleepThreshold: 15 })).toBe(true); expect((0, validators_1.validateDeviceConfig)({ securityLevel: 3 })).toBe(true); }); test('should reject invalid configurations', () => { expect((0, validators_1.validateDeviceConfig)({ reportingInterval: 0 })).toBe(false); expect((0, validators_1.validateDeviceConfig)({ reportingInterval: -1 })).toBe(false); expect((0, validators_1.validateDeviceConfig)({ reportingInterval: 86401 })).toBe(false); expect((0, validators_1.validateDeviceConfig)({ sleepThreshold: -1 })).toBe(false); expect((0, validators_1.validateDeviceConfig)({ sleepThreshold: 101 })).toBe(false); expect((0, validators_1.validateDeviceConfig)({ securityLevel: 0 })).toBe(false); expect((0, validators_1.validateDeviceConfig)({ securityLevel: 6 })).toBe(false); }); }); });