matterbridge-roborock-vacuum-plugin
Version:
Matterbridge Roborock Vacuum Plugin
93 lines • 5.66 kB
JavaScript
import { describe, expect, it } from 'vitest';
import { baseCleanModeConfigs, CleanModeDisplayLabel, CleanModeLabelInfo, getModeDisplayMap, getModeOptions, getModeSettingsMap, smartCleanModeConfigs, } from '../../../../behaviors/roborock.vacuum/core/cleanModeConfig/index.js';
import { CleanModeSetting } from '../../../../behaviors/roborock.vacuum/core/CleanModeSetting.js';
describe('cleanModeConfig', () => {
describe('getModeDisplayMap', () => {
it('should return a record mapping mode numbers to labels for base configs', () => {
const map = getModeDisplayMap(baseCleanModeConfigs);
expect(map[CleanModeLabelInfo[CleanModeDisplayLabel.VacuumAndMopDefault].mode]).toBe(CleanModeDisplayLabel.VacuumAndMopDefault);
expect(map[CleanModeLabelInfo[CleanModeDisplayLabel.VacuumDefault].mode]).toBe(CleanModeDisplayLabel.VacuumDefault);
expect(map[CleanModeLabelInfo[CleanModeDisplayLabel.MopDefault].mode]).toBe(CleanModeDisplayLabel.MopDefault);
});
it('should include VacFollowedByMop entry', () => {
const map = getModeDisplayMap(smartCleanModeConfigs);
expect(map[CleanModeLabelInfo[CleanModeDisplayLabel.VacFollowedByMop].mode]).toBe(CleanModeDisplayLabel.VacFollowedByMop);
});
it('should include EnergySaving entry', () => {
const map = getModeDisplayMap(baseCleanModeConfigs);
expect(map[CleanModeLabelInfo[CleanModeDisplayLabel.VacuumAndMopEnergySaving].mode]).toBe(CleanModeDisplayLabel.VacuumAndMopEnergySaving);
});
it('should include SmartPlan in smart configs', () => {
const map = getModeDisplayMap(smartCleanModeConfigs);
expect(map[CleanModeLabelInfo[CleanModeDisplayLabel.SmartPlan].mode]).toBe(CleanModeDisplayLabel.SmartPlan);
});
});
describe('getModeSettingsMap', () => {
it('should return a record mapping mode numbers to CleanModeSetting instances', () => {
const map = getModeSettingsMap(baseCleanModeConfigs);
const defaultMode = CleanModeLabelInfo[CleanModeDisplayLabel.VacuumAndMopDefault].mode;
const setting = map[defaultMode];
expect(setting).toBeInstanceOf(CleanModeSetting);
expect(setting.hasFullSettings).toBe(true);
});
it('should contain all base config entries', () => {
const map = getModeSettingsMap(baseCleanModeConfigs);
expect(Object.keys(map).length).toBe(baseCleanModeConfigs.length);
});
it('should contain smart config entries including SmartPlan', () => {
const map = getModeSettingsMap(smartCleanModeConfigs);
const smartMode = CleanModeLabelInfo[CleanModeDisplayLabel.SmartPlan].mode;
expect(map[smartMode]).toBeDefined();
expect(Object.keys(map).length).toBe(smartCleanModeConfigs.length);
});
});
describe('getModeOptions', () => {
it('should return array of ModeOptions with mode, label, and modeTags', () => {
const options = getModeOptions(baseCleanModeConfigs);
expect(options.length).toBe(baseCleanModeConfigs.length);
const first = options[0];
expect(first).toHaveProperty('mode');
expect(first).toHaveProperty('label');
expect(first).toHaveProperty('modeTags');
expect(Array.isArray(first.modeTags)).toBe(true);
});
it('should not include setting property in options', () => {
const options = getModeOptions(baseCleanModeConfigs);
const first = options[0];
expect('setting' in first).toBe(false);
});
});
describe('CleanModeLabelInfo', () => {
it('should have correct mode number for VacFollowedByMop', () => {
expect(CleanModeLabelInfo[CleanModeDisplayLabel.VacFollowedByMop].mode).toBe(11);
});
it('should have correct mode number for EnergySaving', () => {
expect(CleanModeLabelInfo[CleanModeDisplayLabel.VacuumAndMopEnergySaving].mode).toBe(10);
});
it('should have correct label for GoVacation', () => {
expect(CleanModeLabelInfo[CleanModeDisplayLabel.GoVacation].label).toBe('Go Vacation');
expect(CleanModeLabelInfo[CleanModeDisplayLabel.GoVacation].mode).toBe(99);
});
});
describe('baseCleanModeConfigs', () => {
it('should have Persist sequenceType for standard modes', () => {
const defaultMode = baseCleanModeConfigs.find((c) => c.mode === CleanModeLabelInfo[CleanModeDisplayLabel.VacuumAndMopDefault].mode);
expect(defaultMode).toBeDefined();
expect(defaultMode?.setting.sequenceType).toBe(0); // CleanSequenceType.Persist
});
});
describe('smartCleanModeConfigs', () => {
it('should include SmartPlan as first entry', () => {
expect(smartCleanModeConfigs[0].mode).toBe(CleanModeLabelInfo[CleanModeDisplayLabel.SmartPlan].mode);
});
it('should include all base configs plus SmartPlan', () => {
expect(smartCleanModeConfigs.length).toBe(baseCleanModeConfigs.length + 2);
});
it('should contain VacFollowedByMop config with OneTime sequenceType', () => {
const vacFollowedByMop = smartCleanModeConfigs.find((c) => c.mode === CleanModeLabelInfo[CleanModeDisplayLabel.VacFollowedByMop].mode);
expect(vacFollowedByMop).toBeDefined();
expect(vacFollowedByMop?.setting.sequenceType).toBe(1); // CleanSequenceType.OneTime
});
});
});
//# sourceMappingURL=cleanModeConfig.test.js.map