matterbridge-roborock-vacuum-plugin
Version:
Matterbridge Roborock Vacuum Plugin
72 lines • 4.33 kB
JavaScript
import { beforeEach, describe, expect, it, vi } from 'vitest';
import { CleanModeDisplayLabel, CleanModeLabelInfo, } from '../../../../behaviors/roborock.vacuum/core/cleanModeConfig/index.js';
import { CleanModeSetting } from '../../../../behaviors/roborock.vacuum/core/CleanModeSetting.js';
import { CleanSequenceType, MopRoute, MopWaterFlow, VacuumSuctionPower, } from '../../../../behaviors/roborock.vacuum/enums/index.js';
import { DefaultCleanModeHandler } from '../../../../behaviors/roborock.vacuum/handlers/defaultCleanModeHandler.js';
import { asPartial } from '../../../testUtils.js';
describe('DefaultCleanModeHandler', () => {
let handler;
let mockRoborockService;
let mockLogger;
let context;
const duid = 'test-duid';
const defaultSetting = new CleanModeSetting(VacuumSuctionPower.Balanced, MopWaterFlow.Medium, 0, MopRoute.Standard, CleanSequenceType.Persist);
beforeEach(() => {
handler = new DefaultCleanModeHandler();
mockRoborockService = { changeCleanMode: vi.fn() };
mockLogger = { notice: vi.fn(), debug: vi.fn(), error: vi.fn() };
const defaultMode = CleanModeLabelInfo[CleanModeDisplayLabel.VacuumAndMopDefault].mode;
context = {
roborockService: asPartial(mockRoborockService),
logger: asPartial(mockLogger),
enableCleanModeMapping: false,
cleanModeSettings: undefined,
cleanSettings: { [defaultMode]: defaultSetting },
behaviorName: 'TestBehavior',
};
});
describe('canHandle', () => {
it('should return true for MopAndVacuumDefault', () => {
expect(handler.canHandle(5, CleanModeDisplayLabel.VacuumAndMopDefault)).toBe(true);
});
it('should return true for MopDefault', () => {
expect(handler.canHandle(31, CleanModeDisplayLabel.MopDefault)).toBe(true);
});
it('should return true for VacuumDefault', () => {
expect(handler.canHandle(66, CleanModeDisplayLabel.VacuumDefault)).toBe(true);
});
it('should return false for non-default modes', () => {
expect(handler.canHandle(6, CleanModeDisplayLabel.VacuumAndMopQuick)).toBe(false);
});
});
describe('handle', () => {
it('should remap VacFollowedByMop mode to MopAndVacuumDefault mode', async () => {
const vacFollowedByMopMode = CleanModeLabelInfo[CleanModeDisplayLabel.VacFollowedByMop].mode;
await handler.handle(duid, vacFollowedByMopMode, CleanModeDisplayLabel.VacuumAndMopDefault, context);
expect(mockRoborockService.changeCleanMode).toHaveBeenCalledWith(duid, defaultSetting);
});
it('should use clean settings for default mode', async () => {
const defaultMode = CleanModeLabelInfo[CleanModeDisplayLabel.VacuumAndMopDefault].mode;
await handler.handle(duid, defaultMode, CleanModeDisplayLabel.VacuumAndMopDefault, context);
expect(mockRoborockService.changeCleanMode).toHaveBeenCalledWith(duid, defaultSetting);
});
it('should not call changeCleanMode when setting is undefined', async () => {
context.cleanSettings = {};
const defaultMode = CleanModeLabelInfo[CleanModeDisplayLabel.VacuumAndMopDefault].mode;
await handler.handle(duid, defaultMode, CleanModeDisplayLabel.VacuumAndMopDefault, context);
expect(mockRoborockService.changeCleanMode).not.toHaveBeenCalled();
});
it('should use cleanModeSettings when enableCleanModeMapping is true', async () => {
context.enableCleanModeMapping = true;
context.cleanModeSettings = {
vacuuming: { fanMode: 'Max', mopRouteMode: 'Standard' },
mopping: { waterFlowMode: 'Medium', mopRouteMode: 'Fast', distanceOff: 0 },
vacmop: { fanMode: 'Max', waterFlowMode: 'High', mopRouteMode: 'Fast', distanceOff: 0 },
};
const defaultMode = CleanModeLabelInfo[CleanModeDisplayLabel.VacuumAndMopDefault].mode;
await handler.handle(duid, defaultMode, CleanModeDisplayLabel.VacuumAndMopDefault, context);
expect(mockRoborockService.changeCleanMode).toHaveBeenCalled();
});
});
});
//# sourceMappingURL=defaultCleanModeHandler.test.js.map