Files
advanced-camera-card/tests/components-lib/message/controller.test.ts
T

150 lines
4.6 KiB
TypeScript

import yaml from 'js-yaml';
import { describe, expect, it } from 'vitest';
import { MessageController } from '../../../src/components-lib/message/controller';
import { TROUBLESHOOTING_URL } from '../../../src/const';
import { Message, MessageType } from '../../../src/types';
describe('MessageController', () => {
describe('should return the correct message string', () => {
it('should return simple message string', () => {
const controller = new MessageController();
const message: Message = {
message: 'Message',
type: 'info',
};
expect(controller.getMessageString(message)).toBe('Message');
});
it('should embed simple string context', () => {
const controller = new MessageController();
const message: Message = {
message: 'Message',
context: 'Context',
type: 'info',
};
expect(controller.getMessageString(message)).toBe('Message: Context');
});
});
describe('should return the correct icon', () => {
describe('when icon is specified', () => {
it.each([['info' as const], ['error' as const], ['connection' as const]])(
'%s',
(type: MessageType) => {
const controller = new MessageController();
const message: Message = {
message: 'Message',
icon: 'mdi:car',
type,
};
expect(controller.getIcon(message)).toBe('mdi:car');
},
);
});
it('when type is an error', () => {
const controller = new MessageController();
const message: Message = {
message: 'Message',
type: 'error',
};
expect(controller.getIcon(message)).toBe('mdi:alert-circle');
});
it('by default', () => {
const controller = new MessageController();
const message: Message = {
message: 'Message',
};
expect(controller.getIcon(message)).toBe('mdi:information-outline');
});
});
describe('should show troubleshooting link', () => {
it('should show for errors', () => {
const controller = new MessageController();
const message: Message = { message: 'Error message', type: 'error' };
expect(controller.shouldShowTroubleshootingURL(message)).toBe(true);
});
describe('should not show for other types', () => {
it.each([['info' as const], ['connection' as const]])(
'%s',
(type: MessageType) => {
const controller = new MessageController();
const message: Message = {
message: 'Message',
icon: 'mdi:car',
type,
};
expect(controller.shouldShowTroubleshootingURL(message)).toBe(false);
},
);
});
describe('should show correct URL', () => {
it('by default', () => {
const controller = new MessageController();
const message: Message = { message: 'Error message', type: 'error' };
expect(controller.getTroubleshootingURL(message)).toBe(TROUBLESHOOTING_URL);
});
it('when specified', () => {
const controller = new MessageController();
const troubleshootingURL = 'http://localhost/troubleshooting.md';
const message: Message = {
message: 'Error message',
type: 'error',
troubleshootingURL: troubleshootingURL,
};
expect(controller.getTroubleshootingURL(message)).toBe(troubleshootingURL);
});
});
});
describe('should get context strings', () => {
it('for no context', () => {
const controller = new MessageController();
const message: Message = {
message: 'Message',
type: 'info',
};
expect(controller.getContextStrings(message)).toEqual([]);
});
it('for simple string', () => {
const controller = new MessageController();
const message: Message = {
message: 'Message',
context: 'Context',
type: 'info',
};
expect(controller.getContextStrings(message)).toEqual(['Context']);
});
it('for object', () => {
const controller = new MessageController();
const obj = { one: 1, two: 2 };
const message: Message = {
message: 'Message',
context: obj,
type: 'info',
};
expect(controller.getContextStrings(message)).toEqual([yaml.dump(obj)]);
});
it('for array', () => {
const controller = new MessageController();
const array = ['one', 'two'];
const message: Message = {
message: 'Message',
context: array,
type: 'info',
};
expect(controller.getContextStrings(message)).toEqual(
array.map((item) => yaml.dump(item)),
);
});
});
});