feat: add problem detection framework for common problems (#2412)

Introduces a ProblemManager that detects and surfaces actionable issues
(stale config, legacy frigate-hass-card resources, slow/failed streams)
via status bar indicators and notification popups with fix actions.
This commit is contained in:
Dermot Duffy
2026-03-13 20:00:59 -07:00
committed by GitHub
parent 95faddd9a0
commit ab683df5e8
46 changed files with 2147 additions and 166 deletions
@@ -1,9 +1,10 @@
import yaml from 'js-yaml';
import { describe, expect, it } from 'vitest';
import { MessageController } from '../../../src/components-lib/message/controller';
import { Link } from '../../../src/config/schema/common/link';
import { TROUBLESHOOTING_URL } from '../../../src/const';
import { localize } from '../../../src/localize/localize';
import { Message, MessageType, MessageURL } from '../../../src/types';
import { Message, MessageType } from '../../../src/types';
describe('MessageController', () => {
describe('should return the correct message string', () => {
@@ -65,8 +66,8 @@ describe('MessageController', () => {
it('should show for errors', () => {
const controller = new MessageController();
const message: Message = { message: 'Error message', type: 'error' };
expect(controller.getURL(message)).toEqual({
link: TROUBLESHOOTING_URL,
expect(controller.getLink(message)).toEqual({
url: TROUBLESHOOTING_URL,
title: localize('error.troubleshooting'),
});
});
@@ -81,7 +82,7 @@ describe('MessageController', () => {
icon: 'mdi:car',
type,
};
expect(controller.getURL(message)).toBeNull();
expect(controller.getLink(message)).toBeNull();
},
);
});
@@ -90,21 +91,21 @@ describe('MessageController', () => {
it('by default', () => {
const controller = new MessageController();
const message: Message = { message: 'Error message', type: 'error' };
expect(controller.getURL(message)?.link).toBe(TROUBLESHOOTING_URL);
expect(controller.getLink(message)?.url).toBe(TROUBLESHOOTING_URL);
});
it('when specified', () => {
const controller = new MessageController();
const url: MessageURL = {
link: 'link',
const url: Link = {
url: 'link',
title: 'title',
};
const message: Message = {
message: 'Error message',
type: 'error',
url,
link: url,
};
expect(controller.getURL(message)).toBe(url);
expect(controller.getLink(message)).toBe(url);
});
});
});