bitwarden-estensione-browser/src/services/browserPlatformUtils.servic...

124 lines
5.7 KiB
TypeScript
Raw Normal View History

2018-01-05 22:38:50 +01:00
import BrowserPlatformUtilsService from './browserPlatformUtils.service';
2018-01-09 20:26:20 +01:00
import { DeviceType } from 'jslib/enums';
2018-01-05 22:38:50 +01:00
describe('Browser Utils Service', () => {
describe('getDomain', () => {
it('should fail for invalid urls', () => {
expect(BrowserPlatformUtilsService.getDomain(null)).toBeNull();
expect(BrowserPlatformUtilsService.getDomain(undefined)).toBeNull();
expect(BrowserPlatformUtilsService.getDomain(' ')).toBeNull();
expect(BrowserPlatformUtilsService.getDomain('https://bit!:"_&ward.com')).toBeNull();
expect(BrowserPlatformUtilsService.getDomain('bitwarden')).toBeNull();
});
it('should handle urls without protocol', () => {
expect(BrowserPlatformUtilsService.getDomain('bitwarden.com')).toBe('bitwarden.com');
expect(BrowserPlatformUtilsService.getDomain('wrong://bitwarden.com')).toBe('bitwarden.com');
});
it('should handle valid urls', () => {
expect(BrowserPlatformUtilsService.getDomain('https://bitwarden')).toBe('bitwarden');
expect(BrowserPlatformUtilsService.getDomain('https://bitwarden.com')).toBe('bitwarden.com');
expect(BrowserPlatformUtilsService.getDomain('http://bitwarden.com')).toBe('bitwarden.com');
expect(BrowserPlatformUtilsService.getDomain('http://vault.bitwarden.com')).toBe('bitwarden.com');
expect(BrowserPlatformUtilsService.getDomain('https://user:password@bitwarden.com:8080/password/sites?and&query#hash')).toBe('bitwarden.com');
expect(BrowserPlatformUtilsService.getDomain('https://bitwarden.unknown')).toBe('bitwarden.unknown');
});
it('should support localhost and IP', () => {
expect(BrowserPlatformUtilsService.getDomain('https://localhost')).toBe('localhost');
expect(BrowserPlatformUtilsService.getDomain('https://192.168.1.1')).toBe('192.168.1.1');
});
});
describe('getBrowser', () => {
2018-04-14 17:54:59 +02:00
const originalUserAgent = navigator.userAgent;
const originalSafari = (window as any).safari;
const originalOpr = (window as any).opr;
2018-01-05 22:38:50 +01:00
// Reset the userAgent.
afterAll(() => {
Object.defineProperty(navigator, 'userAgent', {
2018-04-14 17:54:59 +02:00
value: originalUserAgent
});
Object.defineProperty(window, 'safari', {
value: originalSafari
});
Object.defineProperty(window, 'opr', {
value: originalOpr
2018-01-05 22:38:50 +01:00
});
});
it('should detect chrome', () => {
Object.defineProperty(navigator, 'userAgent', {
configurable: true,
value: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'
});
2018-04-10 20:20:03 +02:00
const browserPlatformUtilsService = new BrowserPlatformUtilsService(null);
2018-01-09 20:26:20 +01:00
expect(browserPlatformUtilsService.getDevice()).toBe(DeviceType.Chrome);
2018-01-05 22:38:50 +01:00
});
it('should detect firefox', () => {
Object.defineProperty(navigator, 'userAgent', {
configurable: true,
value: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0'
});
2018-04-10 20:20:03 +02:00
const browserPlatformUtilsService = new BrowserPlatformUtilsService(null);
2018-01-09 20:26:20 +01:00
expect(browserPlatformUtilsService.getDevice()).toBe(DeviceType.Firefox);
2018-01-05 22:38:50 +01:00
});
it('should detect opera', () => {
Object.defineProperty(navigator, 'userAgent', {
configurable: true,
value: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3175.3 Safari/537.36 OPR/49.0.2695.0 (Edition developer)'
});
2018-04-14 17:54:59 +02:00
Object.defineProperty(window, 'opr', {
configurable: true,
value: {}
});
2018-01-05 22:38:50 +01:00
2018-04-10 20:20:03 +02:00
const browserPlatformUtilsService = new BrowserPlatformUtilsService(null);
2018-01-09 20:26:20 +01:00
expect(browserPlatformUtilsService.getDevice()).toBe(DeviceType.Opera);
2018-01-05 22:38:50 +01:00
});
it('should detect edge', () => {
Object.defineProperty(navigator, 'userAgent', {
configurable: true,
value: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; ServiceUI 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063'
});
2018-04-10 20:20:03 +02:00
const browserPlatformUtilsService = new BrowserPlatformUtilsService(null);
2018-01-09 20:26:20 +01:00
expect(browserPlatformUtilsService.getDevice()).toBe(DeviceType.Edge);
2018-01-05 22:38:50 +01:00
});
2018-01-11 21:49:29 +01:00
it('should detect safari', () => {
Object.defineProperty(navigator, 'userAgent', {
configurable: true,
value: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/602.4.8 (KHTML, like Gecko) Version/10.0.3 Safari/602.4.8'
});
2018-04-14 16:16:05 +02:00
Object.defineProperty(window, 'safari', {
configurable: true,
value: {}
});
2018-04-10 20:20:03 +02:00
const browserPlatformUtilsService = new BrowserPlatformUtilsService(null);
2018-01-11 21:49:29 +01:00
expect(browserPlatformUtilsService.getDevice()).toBe(DeviceType.Safari);
});
it('should detect vivaldi', () => {
Object.defineProperty(navigator, 'userAgent', {
configurable: true,
value: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.97 Safari/537.36 Vivaldi/1.94.1008.40'
});
2018-04-10 20:20:03 +02:00
const browserPlatformUtilsService = new BrowserPlatformUtilsService(null);
2018-01-11 21:49:29 +01:00
expect(browserPlatformUtilsService.getDevice()).toBe(DeviceType.Vivaldi);
});
2018-01-05 22:38:50 +01:00
});
});