import {HttpClient} from '@actions/http-client'; import os from 'os'; import fs from 'fs'; import {JetBrainsDistribution} from '../../src/distributions/jetbrains/installer'; import {JavaInstallerOptions} from '../../src/distributions/base-models'; import manifestData from '../data/jetbrains.json'; describe('getAvailableVersions', () => { let spyHttpClient: jest.SpyInstance; beforeEach(() => { spyHttpClient = jest.spyOn(HttpClient.prototype, 'getJson'); spyHttpClient.mockReturnValue({ statusCode: 200, headers: {}, result: [] }); }); afterEach(() => { jest.resetAllMocks(); jest.clearAllMocks(); jest.restoreAllMocks(); }); it('load available versions', async () => { spyHttpClient = jest.spyOn(HttpClient.prototype, 'getJson'); spyHttpClient .mockReturnValueOnce({ statusCode: 200, headers: {}, result: manifestData as any }) .mockReturnValueOnce({ statusCode: 200, headers: {}, result: manifestData as any }) .mockReturnValueOnce({ statusCode: 200, headers: {}, result: [] }); const distribution = new JetBrainsDistribution({ version: '17', architecture: 'x64', packageType: 'jdk', checkLatest: false }); const availableVersions = await distribution['getAvailableVersions'](); expect(availableVersions).not.toBeNull(); expect(availableVersions.length).toBe(manifestData.length * 2); }); }); describe('findPackageForDownload', () => { it.each([ ['17', '17.0.11+1207.24'], ['11.0', '11.0.16+2043.64'], ['11.0.11', '11.0.11+1542.1'], ['21.0.2', '21.0.2+375.1'], ['21', '21.0.3+465.3'], ['x', '21.0.3+465.3'] ])('version is resolved correctly %s -> %s', async (input, expected) => { const distribution = new JetBrainsDistribution( { version: input, architecture: 'x64', packageType: 'jdk', checkLatest: false }, ); distribution['getAvailableVersions'] = async () => manifestData as any; const resolvedVersion = await distribution['findPackageForDownload'](input); expect(resolvedVersion.version).toBe(expected); }); it('version is not found', async () => { const distribution = new JetBrainsDistribution( { version: '8.0.452', architecture: 'x64', packageType: 'jdk', checkLatest: false }, ); distribution['getAvailableVersions'] = async () => manifestData as any; await expect(distribution['findPackageForDownload']('8.x')).rejects.toThrow( /Could not find satisfied version for SemVer */ ); }); it('version list is empty', async () => { const distribution = new JetBrainsDistribution( { version: '8', architecture: 'x64', packageType: 'jdk', checkLatest: false }, ); distribution['getAvailableVersions'] = async () => []; await expect(distribution['findPackageForDownload']('8')).rejects.toThrow( /Could not find satisfied version for SemVer */ ); }); });