import * as tools from '../src/tools'; import * as utils from '../src/utils'; function getData( tool: string, version: string, php_version?: string, os_version?: string ): Record { return { tool: tool, version: version, php_version: php_version || '7.4', os_version: os_version || 'linux', extension: '.phar', prefix: 'releases', repository: 'user/tool', version_prefix: '', verb: 'download', domain: 'https://example.com', github: 'https://github.com' }; } jest .spyOn(utils, 'fetch') .mockImplementation(async (url: string): Promise => { return `[{"ref": "refs/tags/1.2.3", "url": "${url}"}]`; }); describe('Tools tests', () => { it('checking getToolSemver', async () => { expect(await tools.getToolSemver(getData('tool', 'latest'))).toBe('1.2.3'); }); it('checking parseReleaseVersion', async () => { expect(await tools.getToolVersion(getData('tool', 'latest'))).toBe( 'latest' ); expect(await tools.getToolVersion(getData('tool', '1.2.3'))).toBe('1.2.3'); expect(await tools.getToolVersion(getData('tool', '1.2'))).toBe('1.2.3'); expect(await tools.getToolVersion(getData('tool', '^1.2.3'))).toBe('1.2.3'); expect(await tools.getToolVersion(getData('tool', '>=1.2.3'))).toBe( '1.2.3' ); expect(await tools.getToolVersion(getData('tool', '>1.2.3'))).toBe('1.2.3'); expect(await tools.getToolVersion(getData('tool', '1.2.3-ALPHA'))).toBe( '1.2.3-ALPHA' ); expect(await tools.getToolVersion(getData('tool', '1.2.3-alpha'))).toBe( '1.2.3-alpha' ); expect(await tools.getToolVersion(getData('tool', '1.2.3-beta'))).toBe( '1.2.3-beta' ); expect(await tools.getToolVersion(getData('tool', '1.2.3-rc'))).toBe( '1.2.3-rc' ); expect(await tools.getToolVersion(getData('tool', '1.2.3-dev'))).toBe( '1.2.3-dev' ); expect(await tools.getToolVersion(getData('tool', '1.2.3-alpha1'))).toBe( '1.2.3-alpha1' ); expect(await tools.getToolVersion(getData('tool', '1.2.3-alpha.1'))).toBe( '1.2.3-alpha.1' ); }); it('checking parseRelease', async () => { let data = getData('tool', 'latest', '7.4', 'linux'); data = await tools.parseRelease('tool', data); expect({release: data.release, version: data.version}).toStrictEqual({ release: 'tool', version: 'latest' }); data = await tools.parseRelease('alias:1.2.3', data); expect({release: data.release, version: data.version}).toStrictEqual({ release: 'tool:1.2.3', version: '1.2.3' }); data = await tools.parseRelease('tool:1.2.3', data); expect({release: data.release, version: data.version}).toStrictEqual({ release: 'tool:1.2.3', version: '1.2.3' }); data = await tools.parseRelease('tool:^1.2.3', data); expect({release: data.release, version: data.version}).toStrictEqual({ release: 'tool:^1.2.3', version: '1.2.3' }); data = await tools.parseRelease('tool:>=1.2.3', data); expect({release: data.release, version: data.version}).toStrictEqual({ release: 'tool:>=1.2.3', version: '1.2.3' }); data = await tools.parseRelease('tool:>1.2.3', data); expect({release: data.release, version: data.version}).toStrictEqual({ release: 'tool:>1.2.3', version: '1.2.3' }); data = await tools.parseRelease('tool:1.2.3-ALPHA', data); expect({release: data.release, version: data.version}).toStrictEqual({ release: 'tool:1.2.3-ALPHA', version: '1.2.3-ALPHA' }); data = await tools.parseRelease('tool:1.2.3-beta', data); expect({release: data.release, version: data.version}).toStrictEqual({ release: 'tool:1.2.3-beta', version: '1.2.3-beta' }); data = await tools.parseRelease('tool:1.2.3-rc', data); expect({release: data.release, version: data.version}).toStrictEqual({ release: 'tool:1.2.3-rc', version: '1.2.3-rc' }); data = await tools.parseRelease('tool:1.2.3-dev', data); expect({release: data.release, version: data.version}).toStrictEqual({ release: 'tool:1.2.3-dev', version: '1.2.3-dev' }); data = await tools.parseRelease('tool:1.2.3-alpha1', data); expect({release: data.release, version: data.version}).toStrictEqual({ release: 'tool:1.2.3-alpha1', version: '1.2.3-alpha1' }); data = await tools.parseRelease('tool:1.2.3-alpha.1', data); expect({release: data.release, version: data.version}).toStrictEqual({ release: 'tool:1.2.3-alpha.1', version: '1.2.3-alpha.1' }); data = await tools.parseRelease('user/tool:^1.2.3', data); expect({release: data.release, version: data.version}).toStrictEqual({ release: 'tool:^1.2.3', version: '^1.2.3' }); }); it('checking getUrl', async () => { const data = getData('tool', 'latest', '7.4', 'linux'); expect(await tools.getUrl(data)).toBe( 'https://example.com/user/tool/releases/latest/download/tool.phar' ); data['version'] = '1.2.3'; expect(await tools.getUrl(data)).toBe( 'https://example.com/user/tool/releases/download/1.2.3/tool.phar' ); data['version_prefix'] = 'v'; expect(await tools.getUrl(data)).toBe( 'https://example.com/user/tool/releases/download/v1.2.3/tool.phar' ); }); it('checking addPhive', async () => { const data = getData('phive', '1.2.3', '7.4', 'linux'); data['domain'] = 'https://phar.io'; data['repository'] = 'phar-io/phive'; data['version_parameter'] = 'status'; let script: string = await tools.addPhive(data); expect(script).toContain( 'add_tool https://github.com/phar-io/phive/releases/download/1.2.3/phive-1.2.3.phar phive' ); data['version'] = 'latest'; data['php_version'] = '5.5'; data['os_version'] = 'win32'; script = await tools.addPhive(data); expect(script).toContain('Phive is not supported on PHP 5.5'); data['php_version'] = '5.6'; script = await tools.addPhive(data); expect(script).toContain( 'Add-Tool https://github.com/phar-io/phive/releases/download/0.12.1/phive-0.12.1.phar phive' ); data['php_version'] = '7.1'; data['version'] = 'latest'; script = await tools.addPhive(data); expect(script).toContain( 'Add-Tool https://github.com/phar-io/phive/releases/download/0.13.5/phive-0.13.5.phar phive' ); }); it('checking getPharUrl', async () => { const data = getData('tool', 'latest', '7.4', 'linux'); data['version_prefix'] = ''; expect(await tools.getPharUrl(data)).toBe('https://example.com/tool.phar'); data['version'] = '1.2.3'; data['version_prefix'] = 'v'; expect(await tools.getPharUrl(data)).toBe( 'https://example.com/tool-v1.2.3.phar' ); }); it('checking addBlackfirePlayer', async () => { const data = getData('blackfire-player', 'latest', '7.4', 'linux'); data['domain'] = 'https://get.blackfire.io'; data['version_prefix'] = 'v'; expect(await tools.addBlackfirePlayer(data)).toContain( 'https://get.blackfire.io/blackfire-player.phar' ); data['php_version'] = '5.5'; expect(await tools.addBlackfirePlayer(data)).toContain( 'https://get.blackfire.io/blackfire-player-v1.9.3.phar' ); data['php_version'] = '7.0'; expect(await tools.addBlackfirePlayer(data)).toContain( 'https://get.blackfire.io/blackfire-player-v1.9.3.phar' ); data['version'] = '1.2.3'; expect(await tools.addBlackfirePlayer(data)).toContain( 'https://get.blackfire.io/blackfire-player-v1.2.3.phar' ); }); it('checking addDeployer', async () => { const data = getData('deployer', 'latest', '7.4', 'linux'); data['domain'] = 'https://deployer.org'; expect(await tools.addDeployer(data)).toContain( 'https://deployer.org/deployer.phar' ); data['version'] = '1.2.3'; expect(await tools.addDeployer(data)).toContain( 'https://deployer.org/releases/v1.2.3/deployer.phar' ); }); it('checking filterList', async () => { expect(await tools.filterList(['a', 'b'])).toStrictEqual([ 'composer', 'a', 'b' ]); expect(await tools.filterList(['a', 'b', 'composer'])).toStrictEqual([ 'composer', 'a', 'b' ]); expect(await tools.filterList(['a', 'b', 'composer:1.2'])).toStrictEqual([ 'composer', 'a', 'b' ]); expect(await tools.filterList(['a', 'b', 'composer:1.2.3'])).toStrictEqual([ 'composer:1.2.3', 'a', 'b' ]); expect(await tools.filterList(['a', 'b', 'composer:v1.2.3'])).toStrictEqual( ['composer:1.2.3', 'a', 'b'] ); expect( await tools.filterList(['a', 'b', 'composer:snapshot']) ).toStrictEqual(['composer:snapshot', 'a', 'b']); expect( await tools.filterList(['a', 'b', 'composer:preview']) ).toStrictEqual(['composer:preview', 'a', 'b']); expect(await tools.filterList(['a', 'b', 'c', 'composer:1'])).toStrictEqual( ['composer:1', 'a', 'b', 'c'] ); expect(await tools.filterList(['a', 'b', 'c', 'composer:2'])).toStrictEqual( ['composer:2', 'a', 'b', 'c'] ); expect( await tools.filterList(['a', 'b', 'c', 'composer:v1']) ).toStrictEqual(['composer:1', 'a', 'b', 'c']); expect( await tools.filterList(['a', 'b', 'c', 'composer:v2']) ).toStrictEqual(['composer:2', 'a', 'b', 'c']); }); it('checking addComposer', async () => { const data = getData('composer', 'latest', '7.4', 'linux'); data['domain'] = 'https://getcomposer.org'; data['repository'] = 'composer/composer'; expect(await tools.addComposer(data)).toContain( 'https://getcomposer.org/composer-stable.phar' ); data['version'] = 'stable'; expect(await tools.addComposer(data)).toContain( 'https://getcomposer.org/composer-stable.phar' ); data['version'] = 'snapshot'; expect(await tools.addComposer(data)).toContain( 'https://getcomposer.org/composer.phar' ); data['version'] = 'preview'; expect(await tools.addComposer(data)).toContain( 'https://getcomposer.org/composer-preview.phar' ); data['version'] = '1'; expect(await tools.addComposer(data)).toContain( 'https://getcomposer.org/composer-1.phar' ); data['version'] = '2'; expect(await tools.addComposer(data)).toContain( 'https://getcomposer.org/composer-2.phar' ); data['version'] = '1.7.2'; expect(await tools.addComposer(data)).toContain( 'https://github.com/composer/composer/releases/download/1.7.2/composer.phar' ); expect(await tools.addComposer(data)).toContain( 'https://getcomposer.org/composer-1.7.2.phar' ); data['version'] = '2.0.0-RC2'; expect(await tools.addComposer(data)).toContain( 'https://github.com/composer/composer/releases/download/2.0.0-RC2/composer.phar' ); expect(await tools.addComposer(data)).toContain( 'https://getcomposer.org/composer-2.0.0-RC2.phar' ); data['version'] = 'wrong'; expect(await tools.addComposer(data)).toContain( 'https://getcomposer.org/composer-stable.phar' ); }); it('checking addSymfony', async () => { const data = getData('symfony', 'latest', '7.4', 'linux'); expect(await tools.addSymfony(data)).toContain( 'releases/latest/download/symfony_linux_amd64' ); data['version'] = '1.2.3'; expect(await tools.addSymfony(data)).toContain( 'releases/download/v1.2.3/symfony_linux_amd64' ); data['version'] = 'latest'; data['os_version'] = 'darwin'; expect(await tools.addSymfony(data)).toContain( 'releases/latest/download/symfony_darwin_amd64' ); data['version'] = '1.2.3'; expect(await tools.addSymfony(data)).toContain( 'releases/download/v1.2.3/symfony_darwin_amd64' ); data['version'] = 'latest'; data['os_version'] = 'win32'; expect(await tools.addSymfony(data)).toContain( 'releases/latest/download/symfony_windows_amd64' ); data['version'] = '1.2.3'; expect(await tools.addSymfony(data)).toContain( 'releases/download/v1.2.3/symfony_windows_amd64' ); data['os_version'] = 'openbsd'; expect(await tools.addSymfony(data)).toContain( 'Platform openbsd is not supported' ); }); it('checking addWPCLI', async () => { const data = getData('wp-cli', 'latest', '7.4', 'linux'); data['repository'] = 'wp-cli/wp-cli'; data['version_prefix'] = 'v'; expect(await tools.addWPCLI(data)).toContain( 'wp-cli/builds/blob/gh-pages/phar/wp-cli.phar?raw=true' ); data['version'] = '2.4.0'; expect(await tools.addWPCLI(data)).toContain( 'wp-cli/wp-cli/releases/download/v2.4.0/wp-cli-2.4.0.phar' ); }); it('checking addArchive', async () => { const data = getData('tool', 'latest', '7.4', 'linux'); data['url'] = 'https://example.com/tool.phar'; data['version_parameter'] = JSON.stringify('-v'); let script: string = await tools.addArchive(data); expect(script).toContain( 'add_tool https://example.com/tool.phar tool "-v"' ); data['os_version'] = 'darwin'; script = await tools.addArchive(data); expect(script).toContain( 'add_tool https://example.com/tool.phar tool "-v"' ); data['os_version'] = 'win32'; script = await tools.addArchive(data); expect(script).toContain( 'Add-Tool https://example.com/tool.phar tool "-v"' ); data['os_version'] = 'openbsd'; script = await tools.addArchive(data); expect(script).toContain('Platform openbsd is not supported'); }); it('checking addDevTools', async () => { const data = getData('phpize', 'latest', '7.4', 'linux'); let script: string = await tools.addDevTools(data); expect(script).toContain('add_devtools phpize'); data['tool'] = 'php-config'; script = await tools.addDevTools(data); expect(script).toContain('add_devtools php-config'); data['tool'] = 'phpize'; data['os_version'] = 'darwin'; script = await tools.addDevTools(data); expect(script).toContain('add_devtools phpize'); data['tool'] = 'php-config'; script = await tools.addDevTools(data); expect(script).toContain('add_devtools php-config'); data['tool'] = 'phpize'; data['os_version'] = 'win32'; script = await tools.addDevTools(data); expect(script).toContain( 'Add-Log "$tick" "phpize" "phpize is not a windows tool"' ); data['tool'] = 'php-config'; script = await tools.addDevTools(data); expect(script).toContain( 'Add-Log "$tick" "php-config" "php-config is not a windows tool"' ); data['os_version'] = 'openbsd'; script = await tools.addDevTools(data); expect(script).toContain('Platform openbsd is not supported'); }); it('checking addPackage', async () => { const data = getData('tool', '1.2.3', '7.4', 'linux'); data['release'] = 'tool:1.2.3'; let script: string = await tools.addPackage(data); expect(script).toContain('add_composertool tool tool:1.2.3 user/'); data['os_version'] = 'darwin'; script = await tools.addPackage(data); expect(script).toContain('add_composertool tool tool:1.2.3 user/'); data['os_version'] = 'win32'; script = await tools.addPackage(data); expect(script).toContain('Add-Composertool tool tool:1.2.3 user/'); data['os_version'] = 'openbsd'; script = await tools.addPackage(data); expect(script).toContain('Platform openbsd is not supported'); }); it('checking addTools on linux', async () => { const script: string = await tools.addTools( 'blackfire, blackfire-player, cs2pr, flex, grpc_php_plugin, php-cs-fixer, phplint, phpstan, phpunit, pecl, phing, phinx, phinx:1.2.3, phive, php-config, phpize, protoc, symfony, vapor, wp', '7.4', 'linux' ); expect(script).toContain('add_blackfire'); expect(script).toContain( 'add_tool https://get.blackfire.io/blackfire-player.phar blackfire-player "-V"' ); expect(script).toContain( 'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-stable.phar,https://getcomposer.org/composer-stable.phar composer' ); expect(script).toContain( 'add_tool https://github.com/staabm/annotate-pull-request-from-checkstyle/releases/latest/download/cs2pr cs2pr "-V"' ); expect(script).toContain( 'add_tool https://github.com/FriendsOfPHP/PHP-CS-Fixer/releases/latest/download/php-cs-fixer.phar php-cs-fixer "-V"' ); expect(script).toContain( 'add_tool https://github.com/phpstan/phpstan/releases/latest/download/phpstan.phar phpstan "-V"' ); expect(script).toContain( 'add_tool https://www.phing.info/get/phing-latest.phar phing "-v"' ); expect(script).toContain( 'add_tool https://phar.io/releases/phive.phar phive "status"' ); expect(script).toContain( 'add_tool https://phar.phpunit.de/phpunit.phar phpunit "--version"' ); expect(script).toContain( 'add_tool https://github.com/symfony/cli/releases/latest/download/symfony_linux_amd64 symfony-cli "version"' ); expect(script).toContain( 'add_tool https://github.com/wp-cli/builds/blob/gh-pages/phar/wp-cli.phar?raw=true wp-cli "--version"' ); expect(script).toContain('add_protoc latest'); expect(script).toContain('add_grpc_php_plugin latest'); expect(script).toContain('add_pecl'); expect(script).toContain('add_composertool flex flex symfony/'); expect(script).toContain('add_composertool phinx phinx robmorgan/'); expect(script).toContain('add_composertool phplint phplint overtrue/'); expect(script).toContain('add_composertool phinx phinx:1.2.3 robmorgan/'); expect(script).toContain('add_composertool vapor-cli vapor-cli laravel/'); expect(script).toContain('add_devtools php-config'); expect(script).toContain('add_devtools phpize'); }); it('checking addTools on darwin', async () => { const listOfTools = [ 'behat', 'blackfire', 'blackfire-player', 'composer-normalize', 'composer-require-checker', 'composer-unused', 'cs2pr:1.2.3', 'flex', 'grpc_php_plugin:1.2.3', 'infection', 'phan', 'phan:2.7.2', 'phing:1.2.3', 'phinx', 'phive:1.2.3', 'php-config', 'phpcbf', 'phpcpd', 'phpcs', 'phpize', 'phpmd', 'phpspec', 'protoc:v1.2.3', 'psalm', 'symfony-cli', 'symfony:1.2.3', 'vapor-cli', 'wp-cli' ]; const script: string = await tools.addTools( listOfTools.join(', '), '7.4', 'darwin' ); expect(script).toContain('add_blackfire'); expect(script).toContain( 'add_tool https://get.blackfire.io/blackfire-player.phar blackfire-player "-V"' ); expect(script).toContain( 'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-stable.phar,https://getcomposer.org/composer-stable.phar composer' ); expect(script).toContain( 'add_tool https://github.com/ergebnis/composer-normalize/releases/latest/download/composer-normalize.phar composer-normalize "-V"' ); expect(script).toContain( 'add_tool https://github.com/maglnet/ComposerRequireChecker/releases/latest/download/composer-require-checker.phar composer-require-checker "-V"' ); expect(script).toContain( 'add_tool https://github.com/staabm/annotate-pull-request-from-checkstyle/releases/download/1.2.3/cs2pr cs2pr "-V"' ); expect(script).toContain( 'add_tool https://github.com/infection/infection/releases/latest/download/infection.phar infection "-V"' ); expect(script).toContain( 'add_tool https://github.com/phan/phan/releases/latest/download/phan.phar phan "-v"' ); expect(script).toContain( 'add_tool https://www.phing.info/get/phing-1.2.3.phar phing "-v"' ); expect(script).toContain( 'add_tool https://github.com/squizlabs/PHP_CodeSniffer/releases/latest/download/phpcs.phar phpcs "--version"' ); expect(script).toContain( 'add_tool https://github.com/squizlabs/PHP_CodeSniffer/releases/latest/download/phpcbf.phar phpcbf "--version"' ); expect(script).toContain( 'add_tool https://phar.phpunit.de/phpcpd.phar phpcpd "--version"' ); expect(script).toContain( 'add_tool https://github.com/phpmd/phpmd/releases/latest/download/phpmd.phar phpmd "--version"' ); expect(script).toContain( 'https://github.com/vimeo/psalm/releases/latest/download/psalm.phar psalm "-v"' ); expect(script).toContain('add_grpc_php_plugin 1.2.3'); expect(script).toContain('add_protoc 1.2.3'); expect(script).toContain('add_composertool behat behat behat/'); expect(script).toContain('add_composertool phpspec phpspec phpspec/'); expect(script).toContain('add_composertool vapor-cli vapor-cli laravel/'); expect(script).toContain('add_composertool flex flex symfony/'); expect(script).toContain('add_composertool phinx phinx robmorgan/'); expect(script).toContain( 'add_tool https://github.com/phan/phan/releases/download/2.7.2/phan.phar phan "-v"' ); expect(script).toContain( 'add_tool https://github.com/phar-io/phive/releases/download/1.2.3/phive-1.2.3.phar phive' ); expect(script).toContain( 'add_composertool composer-unused composer-unused icanhazstring/' ); expect(script).toContain( 'add_tool https://github.com/symfony/cli/releases/latest/download/symfony_darwin_amd64 symfony-cli "version"' ); expect(script).toContain( 'add_tool https://github.com/symfony/cli/releases/download/v1.2.3/symfony_darwin_amd64 symfony-cli "version"' ); expect(script).toContain( 'add_tool https://github.com/wp-cli/builds/blob/gh-pages/phar/wp-cli.phar?raw=true wp-cli "--version"' ); expect(script).toContain('add_devtools phpize'); expect(script).toContain('add_devtools php-config'); }); it('checking addTools on windows', async () => { const listOfTools = [ 'blackfire', 'blackfire-player:1.8.1', 'cs2pr', 'deployer', 'does_not_exist', 'flex', 'phinx', 'phive:0.13.2', 'php-config', 'phpize', 'phpmd', 'symfony', 'wp' ]; const script: string = await tools.addTools( listOfTools.join(', '), '7.4', 'win32' ); expect(script).toContain('Add-Blackfire'); expect(script).toContain( 'Add-Tool https://get.blackfire.io/blackfire-player-v1.8.1.phar blackfire-player "-V"' ); expect(script).toContain( 'Add-Tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-stable.phar,https://getcomposer.org/composer-stable.phar composer' ); expect(script).toContain( 'Add-Tool https://github.com/staabm/annotate-pull-request-from-checkstyle/releases/latest/download/cs2pr cs2pr "-V"' ); expect(script).toContain('Add-Composertool flex flex symfony/'); expect(script).toContain( 'Add-Tool https://deployer.org/deployer.phar deployer "-V"' ); expect(script).toContain( 'Add-Tool https://github.com/phpmd/phpmd/releases/latest/download/phpmd.phar phpmd "--version"' ); expect(script).toContain('Add-Composertool phinx phinx robmorgan/'); expect(script).toContain( 'Add-Tool https://github.com/phar-io/phive/releases/download/0.13.2/phive-0.13.2.phar phive "status"' ); expect(script).toContain( 'Add-Tool https://github.com/symfony/cli/releases/latest/download/symfony_windows_amd64.exe symfony-cli "version"' ); expect(script).toContain( 'Add-Tool https://github.com/wp-cli/builds/blob/gh-pages/phar/wp-cli.phar?raw=true wp-cli "--version"' ); expect(script).toContain('phpize is not a windows tool'); expect(script).toContain('php-config is not a windows tool'); expect(script).toContain('Tool does_not_exist is not supported'); }); it('checking addTools with composer tool using user/tool as input', async () => { const listOfTools = [ 'composer:v1', 'codeception/codeception', 'prestissimo', 'hirak/prestissimo', 'composer-prefetcher', 'narrowspark/automatic-composer-prefetcher', 'robmorgan/phinx: ^1.2' ]; const script: string = await tools.addTools( listOfTools.join(', '), '7.4', 'win32' ); expect(script).toContain( 'Add-Tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-1.phar,https://getcomposer.org/composer-1.phar composer' ); expect(script).toContain('Add-Composertool prestissimo prestissimo hirak/'); expect(script).toContain('Add-Composertool phinx phinx:^1.2 robmorgan/'); expect(script).toContain( 'Add-Composertool automatic-composer-prefetcher automatic-composer-prefetcher narrowspark/' ); }); it('checking composer setup', async () => { const listOfTools = ['composer', 'composer:v1']; let script: string = await tools.addTools( listOfTools.join(', '), '7.4', 'linux' ); expect(script).toContain( 'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-1.phar,https://getcomposer.org/composer-1.phar composer' ); script = await tools.addTools('composer:preview', '7.4', 'linux'); expect(script).toContain( 'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-preview.phar,https://getcomposer.org/composer-preview.phar composer preview' ); script = await tools.addTools( 'composer:v1, composer:preview, composer:snapshot', '7.4', 'linux' ); expect(script).toContain( 'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-snapshot.phar,https://getcomposer.org/composer.phar composer snapshot' ); script = await tools.addTools('none', '7.4', 'linux'); expect(script).toStrictEqual(''); script = await tools.addTools('none, phpunit', '7.4', 'linux'); expect(script).toStrictEqual( '\nstep_log "Setup Tools"' + '\nadd_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-stable.phar,https://getcomposer.org/composer-stable.phar composer latest\n' + '\nadd_tool https://phar.phpunit.de/phpunit.phar phpunit "--version"' ); }); });