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
JavaScript
;
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);
});
});
});