matterbridge-roborock-vacuum-plugin
Version:
Matterbridge Roborock Vacuum Plugin
98 lines • 4.62 kB
JavaScript
import { beforeEach, describe, expect, it, vi } from 'vitest';
import { PlatformConfigManager as PlatformConfigManagerStatic } from '../../../platform/platformConfigManager.js';
import { RoborockService } from '../../../services/roborockService.js';
import { createMockLocalStorage, makeLogger } from '../../testUtils.js';
describe('RoborockService - Authentication', () => {
let roborockService;
let mockLogger;
let mockContainer;
let mockAuthCoordinator;
beforeEach(async () => {
mockLogger = makeLogger();
mockAuthCoordinator = {
authenticate: vi.fn(),
};
mockContainer = {
getAuthenticationCoordinator: vi.fn(() => mockAuthCoordinator),
getDeviceManagementService: vi.fn(() => ({})),
getAreaManagementService: vi.fn(() => ({})),
getMessageRoutingService: vi.fn(() => ({})),
getPollingService: vi.fn(() => ({})),
getConnectionService: vi.fn(() => ({})),
setUserData: vi.fn(),
};
const persist = createMockLocalStorage();
const PlatformConfigManager = PlatformConfigManagerStatic;
const config = {
authentication: {
username: 'test@example.com',
region: 'US',
forceAuthentication: false,
authenticationMethod: 'Password',
password: 'password123',
},
pluginConfiguration: {
whiteList: [],
enableServerMode: false,
enableMultipleMap: false,
sanitizeSensitiveLogs: false,
refreshInterval: 10,
debug: false,
unregisterOnShutdown: false,
},
advancedFeature: {
enableAdvancedFeature: false,
settings: {
clearStorageOnStartup: false,
showRoutinesAsRoom: false,
includeDockStationStatus: false,
includeVacuumErrorStatus: false,
forceRunAtDefault: false,
useVacationModeToSendVacuumToDock: false,
enableCleanModeMapping: false,
cleanModeSettings: {
vacuuming: { fanMode: 'Balanced', mopRouteMode: 'Standard' },
mopping: { waterFlowMode: 'Medium', mopRouteMode: 'Standard', distanceOff: 25 },
vacmop: { fanMode: 'Balanced', waterFlowMode: 'Medium', mopRouteMode: 'Standard', distanceOff: 25 },
},
overrideMatterConfiguration: false,
matterOverrideSettings: {
matterVendorName: 'xxx',
matterVendorId: 123,
matterProductName: 'yy',
matterProductId: 456,
},
enableEmailNotification: false,
emailNotificationSettings: {},
},
},
};
const mockConfigManager = PlatformConfigManager.create(config, mockLogger);
roborockService = new RoborockService({
refreshInterval: 10,
baseUrl: 'https://api.roborock.com',
persist: persist,
configManager: mockConfigManager,
container: mockContainer,
toastMessage: vi.fn(),
}, mockLogger, mockConfigManager);
});
it('should return success when authentication succeeds', async () => {
const mockUserData = { username: 'test@example.com', nickname: 'Test' };
mockAuthCoordinator.authenticate.mockResolvedValue(mockUserData);
const result = await roborockService.authenticate();
expect(result.userData).toEqual(mockUserData);
expect(result.shouldContinue).toBe(true);
expect(result.isSuccess).toBe(true);
expect(mockLogger.info).toHaveBeenCalledWith(expect.stringContaining('Authentication successful'));
});
it('should call logger.error and return failure when authentication throws', async () => {
mockAuthCoordinator.authenticate.mockRejectedValue(new Error('auth failed'));
const result = await roborockService.authenticate();
expect(result.userData).toBeUndefined();
expect(result.shouldContinue).toBe(false);
expect(result.isSuccess).toBe(false);
expect(mockLogger.error).toHaveBeenCalledWith(expect.stringContaining('Authentication failed: auth failed'));
});
});
//# sourceMappingURL=roborockService.authentication.test.js.map