150 lines
4.6 KiB
TypeScript
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)),
|
|
);
|
|
});
|
|
});
|
|
});
|