* chore: add core module test cases * chore: fix tests * chore: add code coverage report * chore: split coverage step * chore: split coverage step * Update jan-electron-linter-and-test.yml * Update jan-electron-linter-and-test.yml * Update jan-electron-linter-and-test.yml * chore: update tests * chore: add web utils test cases * chore: add restful and helper tests * chore: add tests
123 lines
3.2 KiB
TypeScript
123 lines
3.2 KiB
TypeScript
import Extension from './extension';
|
|
import { join } from 'path';
|
|
import 'pacote';
|
|
|
|
it('should set active and call emitUpdate', () => {
|
|
const extension = new Extension();
|
|
extension.emitUpdate = jest.fn();
|
|
|
|
extension.setActive(true);
|
|
|
|
expect(extension._active).toBe(true);
|
|
expect(extension.emitUpdate).toHaveBeenCalled();
|
|
});
|
|
|
|
|
|
it('should return correct specifier', () => {
|
|
const origin = 'test-origin';
|
|
const options = { version: '1.0.0' };
|
|
const extension = new Extension(origin, options);
|
|
|
|
expect(extension.specifier).toBe('test-origin@1.0.0');
|
|
});
|
|
|
|
|
|
it('should set origin and installOptions in constructor', () => {
|
|
const origin = 'test-origin';
|
|
const options = { someOption: true };
|
|
const extension = new Extension(origin, options);
|
|
|
|
expect(extension.origin).toBe(origin);
|
|
expect(extension.installOptions.someOption).toBe(true);
|
|
expect(extension.installOptions.fullMetadata).toBe(true); // default option
|
|
});
|
|
|
|
it('should install extension and set url', async () => {
|
|
const origin = 'test-origin';
|
|
const options = {};
|
|
const extension = new Extension(origin, options);
|
|
|
|
const mockManifest = {
|
|
name: 'test-name',
|
|
productName: 'Test Product',
|
|
version: '1.0.0',
|
|
main: 'index.js',
|
|
description: 'Test description'
|
|
};
|
|
|
|
jest.mock('pacote', () => ({
|
|
manifest: jest.fn().mockResolvedValue(mockManifest),
|
|
extract: jest.fn().mockResolvedValue(null)
|
|
}));
|
|
|
|
extension.emitUpdate = jest.fn();
|
|
await extension._install();
|
|
|
|
expect(extension.url).toBe('extension://test-name/index.js');
|
|
expect(extension.emitUpdate).toHaveBeenCalled();
|
|
});
|
|
|
|
|
|
it('should call all listeners in emitUpdate', () => {
|
|
const extension = new Extension();
|
|
const callback1 = jest.fn();
|
|
const callback2 = jest.fn();
|
|
|
|
extension.subscribe('listener1', callback1);
|
|
extension.subscribe('listener2', callback2);
|
|
|
|
extension.emitUpdate();
|
|
|
|
expect(callback1).toHaveBeenCalledWith(extension);
|
|
expect(callback2).toHaveBeenCalledWith(extension);
|
|
});
|
|
|
|
|
|
it('should remove listener in unsubscribe', () => {
|
|
const extension = new Extension();
|
|
const callback = jest.fn();
|
|
|
|
extension.subscribe('testListener', callback);
|
|
extension.unsubscribe('testListener');
|
|
|
|
expect(extension.listeners['testListener']).toBeUndefined();
|
|
});
|
|
|
|
|
|
it('should add listener in subscribe', () => {
|
|
const extension = new Extension();
|
|
const callback = jest.fn();
|
|
|
|
extension.subscribe('testListener', callback);
|
|
|
|
expect(extension.listeners['testListener']).toBe(callback);
|
|
});
|
|
|
|
|
|
it('should set properties from manifest', async () => {
|
|
const origin = 'test-origin';
|
|
const options = {};
|
|
const extension = new Extension(origin, options);
|
|
|
|
const mockManifest = {
|
|
name: 'test-name',
|
|
productName: 'Test Product',
|
|
version: '1.0.0',
|
|
main: 'index.js',
|
|
description: 'Test description'
|
|
};
|
|
|
|
jest.mock('pacote', () => ({
|
|
manifest: jest.fn().mockResolvedValue(mockManifest)
|
|
}));
|
|
|
|
await extension.getManifest();
|
|
|
|
expect(extension.name).toBe('test-name');
|
|
expect(extension.productName).toBe('Test Product');
|
|
expect(extension.version).toBe('1.0.0');
|
|
expect(extension.main).toBe('index.js');
|
|
expect(extension.description).toBe('Test description');
|
|
});
|
|
|