222 lines
5.5 KiB
JavaScript

const assert = require('assert');
const { UAParser } = require('../../src/main/ua-parser');
describe('Browser naming adjustments', () => {
it('Google Chrome => Chrome', () => {
const headers = {
'sec-ch-ua' : '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"',
};
const { browser } = UAParser(headers).withClientHints();
assert.strictEqual(browser.name, 'Chrome');
});
it('Microsoft Edge => Edge', () => {
const headers = {
'sec-ch-ua' : '"Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"',
};
const { browser } = UAParser(headers).withClientHints();
assert.strictEqual(browser.name, 'Edge');
});
it('Android WebView => Chrome WebView', () => {
const headers = {
'sec-ch-ua' : '"Android WebView";v="123", "Not:A-Brand";v="8", "Chromium";v="123"',
};
const { browser } = UAParser(headers).withClientHints();
assert.strictEqual(browser.name, 'Chrome WebView');
});
it('HeadlessChrome => Chrome Headless', () => {
const headers = {
'sec-ch-ua' : '"Chromium";v="124", "HeadlessChrome";v="124", "Not-A.Brand";v="99"',
};
const { browser } = UAParser(headers).withClientHints();
assert.strictEqual(browser.name, 'Chrome Headless');
});
});
describe('Identify vendor & type of device from given model name', () => {
[
{
model: '220733SG',
expect: {
vendor : 'Xiaomi',
type : 'mobile'
}
},
{
model: '5087Z',
expect: {
vendor : 'TCL',
type : 'mobile'
}
},
{
model: '9137W',
expect: {
vendor : 'TCL',
type : 'tablet'
}
},
{
model: 'BE2015',
expect: {
vendor : 'OnePlus',
type : 'mobile'
}
},
{
model: 'CPH2389',
expect: {
vendor : 'OPPO',
type : 'mobile'
}
},
{
model: 'Infinix X669C',
expect: {
vendor : 'Infinix',
type : 'mobile'
}
},
{
model: 'itel L6502',
expect: {
vendor : 'itel',
type : 'mobile'
}
},
{
model: 'Lenovo TB-X606F',
expect: {
vendor : 'Lenovo',
type : 'tablet'
}
},
{
model: 'LM-Q720',
expect: {
vendor : 'LG',
type : 'mobile'
}
},
{
model: 'M2003J15SC',
expect: {
vendor : 'Xiaomi',
type : 'mobile'
}
},
{
model: 'MAR-LX1A',
expect: {
vendor : 'Huawei',
type : 'mobile'
}
},
{
model: 'moto g(20)',
expect: {
vendor : 'Motorola',
type : 'mobile'
}
},
{
model: 'Nokia C210',
expect: {
vendor : 'Nokia',
type : 'mobile'
}
},
{
model: 'Pixel 8',
expect: {
vendor : 'Google',
type : 'mobile'
}
},
{
model: 'Redmi Note 9S',
expect: {
vendor : 'Xiaomi',
type : 'mobile'
}
},
{
model: 'RMX3830',
expect: {
vendor : 'Realme',
type : 'mobile'
}
},
{
model: 'SM-S536DL',
expect: {
vendor : 'Samsung',
type : 'mobile'
}
},
{
model: 'SM-S546VL',
expect: {
vendor : 'Samsung',
type : 'mobile'
}
},
{
model: 'SM-T875',
expect: {
vendor : 'Samsung',
type : 'tablet'
}
},
{
model: 'STK-L21',
expect: {
vendor : 'Huawei',
type : 'mobile'
}
},
{
model: 'T430W',
expect: {
vendor : 'TCL',
type : 'mobile'
}
},
{
model: 'TECNO KI5k',
expect: {
vendor : 'TECNO',
type : 'mobile'
}
},
{
model: 'vivo 1820',
expect: {
vendor : 'Vivo',
type : 'mobile'
}
},
{
model: 'Xbox',
expect: {
vendor : 'Microsoft',
type : 'console'
}
}
]
.forEach((test) => {
it(`Solve "${test.model}"`, () => {
const headers = {
'sec-ch-ua-model' : test.model,
};
const { device } = UAParser(headers).withClientHints();
assert.strictEqual(device.model, test.model);
assert.strictEqual(device.vendor, test.expect.vendor);
assert.strictEqual(device.type, test.expect.type);
});
});
});