JamieMason/Jasmine-Matchers

View on GitHub
scripts/update-browserstack.js

Summary

Maintainability
A
0 mins
Test Coverage
/*
 * node scripts/update-browserstack.js
 */
const childProcess = require('child_process');
const fs = require('fs');
const path = require('path');

const { BROWSER_STACK_USERNAME, BROWSER_STACK_ACCESS_KEY } = process.env;
const url = 'https://www.browserstack.com/automate/browsers.json';
const command = `curl -u "${BROWSER_STACK_USERNAME}:${BROWSER_STACK_ACCESS_KEY}" ${url}`;
const res = childProcess.execSync(command, { encoding: 'utf8' });

const browsers = JSON.parse(res);
const location = path.resolve(__dirname, '../karma/browserstack.json');
const config = browsers
  .sort(sortBy('browser_version', true))
  .sort(sortBy('browser'))
  .reduce(addBrowser, {});
const json = JSON.stringify(config, null, 2);
fs.writeFileSync(location, json, 'utf8');

function addBrowser(memo, browser) {
  memo[getBrowserName(browser)] = {
    base: 'BrowserStack',
    browser: browser.browser,
    browser_version: browser.browser_version, // eslint-disable-line camelcase
    device: browser.device,
    os: browser.os,
    os_version: browser.os_version, // eslint-disable-line camelcase
  };
  return memo;
}

function getBrowserName(browser) {
  return (
    browser.browser + '-' + (browser.browser_version || browser.os_version)
  );
}

function sortBy(key, reverse) {
  const moveSmaller = reverse ? 1 : -1;
  const moveLarger = reverse ? -1 : 1;

  return function (a, b) {
    if (a[key] < b[key]) {
      return moveSmaller;
    }
    if (a[key] > b[key]) {
      return moveLarger;
    }
    return 0;
  };
}