|
|
|
import browser from 'webextension-polyfill';
|
|
|
|
import ExtensionPlatform from './extension';
|
|
|
|
|
|
|
|
jest.mock('webextension-polyfill', () => {
|
|
|
|
return {
|
|
|
|
runtime: {
|
|
|
|
getManifest: jest.fn(),
|
|
|
|
},
|
|
|
|
};
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('extension platform', () => {
|
|
|
|
beforeEach(() => {
|
|
|
|
// TODO: Delete this an enable 'resetMocks' in `jest.config.js` instead
|
|
|
|
jest.resetAllMocks();
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('getVersion', () => {
|
|
|
|
it('should return non-prerelease version', () => {
|
|
|
|
browser.runtime.getManifest.mockReturnValue({ version: '1.2.3' });
|
|
|
|
const extensionPlatform = new ExtensionPlatform();
|
|
|
|
|
|
|
|
const version = extensionPlatform.getVersion();
|
|
|
|
|
|
|
|
expect(version).toBe('1.2.3');
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should return rollback version', () => {
|
|
|
|
browser.runtime.getManifest.mockReturnValue({ version: '1.2.3.1' });
|
|
|
|
const extensionPlatform = new ExtensionPlatform();
|
|
|
|
|
|
|
|
const version = extensionPlatform.getVersion();
|
|
|
|
|
|
|
|
expect(version).toBe('1.2.3.1');
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should return SemVer-formatted version for Chrome style manifest of prerelease', () => {
|
|
|
|
browser.runtime.getManifest.mockReturnValue({
|
|
|
|
version: '1.2.3.0',
|
|
|
|
version_name: '1.2.3-beta.0',
|
|
|
|
});
|
|
|
|
const extensionPlatform = new ExtensionPlatform();
|
|
|
|
|
|
|
|
const version = extensionPlatform.getVersion();
|
|
|
|
|
|
|
|
expect(version).toBe('1.2.3-beta.0');
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should return SemVer-formatted version for Firefox style manifest of prerelease', () => {
|
|
|
|
browser.runtime.getManifest.mockReturnValue({
|
|
|
|
version: '1.2.3beta0',
|
|
|
|
});
|
|
|
|
const extensionPlatform = new ExtensionPlatform();
|
|
|
|
|
|
|
|
const version = extensionPlatform.getVersion();
|
|
|
|
|
|
|
|
expect(version).toBe('1.2.3-beta.0');
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should throw error if build version is missing from Chrome style prerelease manifest', () => {
|
|
|
|
browser.runtime.getManifest.mockReturnValue({
|
|
|
|
version: '1.2.3',
|
|
|
|
version_name: '1.2.3-beta.0',
|
|
|
|
});
|
|
|
|
const extensionPlatform = new ExtensionPlatform();
|
|
|
|
|
|
|
|
expect(() => extensionPlatform.getVersion()).toThrow(
|
|
|
|
'Version missing build number:',
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should throw error if build version is missing from Firefox style prerelease manifest', () => {
|
|
|
|
browser.runtime.getManifest.mockReturnValue({
|
|
|
|
version: '1.2.3beta',
|
|
|
|
});
|
|
|
|
const extensionPlatform = new ExtensionPlatform();
|
|
|
|
|
|
|
|
expect(() => extensionPlatform.getVersion()).toThrow(
|
|
|
|
'Version contains invalid prerelease:',
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should throw error if patch is missing from Firefox style prerelease manifest', () => {
|
|
|
|
browser.runtime.getManifest.mockReturnValue({
|
|
|
|
version: '1.2.beta0',
|
|
|
|
});
|
|
|
|
const extensionPlatform = new ExtensionPlatform();
|
|
|
|
|
|
|
|
expect(() => extensionPlatform.getVersion()).toThrow(
|
|
|
|
'Version contains invalid prerelease:',
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|