import { onBrowserStackComplete, onBrowserStackPrepare } from './src/utils' import { config as mainConfig } from './wdio.main.conf' const user = process.env.BROWSERSTACK_USER const key = process.env.BROWSERSTACK_KEY if (!user) throw new Error('Miss browser stack user') if (!key) throw new Error('Miss browser stack key') function buildMainOptions (sessionName: string) { return { projectName: 'PeerTube', buildName: 'Main E2E - ' + new Date().toISOString(), sessionName, consoleLogs: 'info', networkLogs: true } } function buildBStackDesktopOptions (options: { sessionName: string resolution: string os?: string osVersion?: string }) { const { sessionName, resolution, os, osVersion } = options return { 'bstack:options': { ...buildMainOptions(sessionName), os, osVersion, resolution } } } function buildBStackMobileOptions (options: { sessionName: string deviceName: string osVersion: string }) { const { sessionName, deviceName, osVersion } = options return { 'bstack:options': { ...buildMainOptions(sessionName), realMobile: true, osVersion, deviceName } } } module.exports = { config: { ...mainConfig, user, key, maxInstances: 5, capabilities: [ { browserName: 'Chrome', ...buildBStackDesktopOptions({ sessionName: 'Latest Chrome Desktop', resolution: '1280x1024', os: 'Windows', osVersion: '8' }) }, { browserName: 'Firefox', browserVersion: '78', // Very old ESR ...buildBStackDesktopOptions({ sessionName: 'Firefox ESR Desktop', resolution: '1280x1024', os: 'Windows', osVersion: '8' }) }, { browserName: 'Safari', browserVersion: '12.1', ...buildBStackDesktopOptions({ sessionName: 'Safari Desktop', resolution: '1280x1024' }) }, { browserName: 'Firefox', ...buildBStackDesktopOptions({ sessionName: 'Firefox Latest', resolution: '1280x1024', os: 'Windows', osVersion: '8' }) }, { browserName: 'Edge', ...buildBStackDesktopOptions({ sessionName: 'Edge Latest', resolution: '1280x1024' }) }, { browserName: 'Chrome', ...buildBStackMobileOptions({ sessionName: 'Latest Chrome Android', deviceName: 'Samsung Galaxy S8', osVersion: '7.0' }) }, { browserName: 'Safari', ...buildBStackMobileOptions({ sessionName: 'Safari iPhone', deviceName: 'iPhone 8', osVersion: '13' }) }, { browserName: 'Safari', ...buildBStackMobileOptions({ sessionName: 'Safari iPad', deviceName: 'iPad 7th', osVersion: '13' }) } ], host: 'hub-cloud.browserstack.com', connectionRetryTimeout: 240000, waitforTimeout: 20000, specs: [ // We don't want to test "local" tests './src/suites-all/*.e2e-spec.ts' ], services: [ [ 'browserstack', { browserstackLocal: true } ] ], onWorkerStart: function (_cid, capabilities) { if (capabilities['bstack:options'].realMobile === true) { capabilities['bstack:options'].local = false } }, onPrepare: onBrowserStackPrepare, onComplete: onBrowserStackComplete } as WebdriverIO.Config }