Path: blob/main/components/ide/gha-update-image/lib/jb-stable-version.test.ts
2499 views
// Copyright (c) 2024 Gitpod GmbH. All rights reserved.1// Licensed under the GNU Affero General Public License (AGPL).2// See License.AGPL.txt in the project root for license information.34import { expect, test, mock, describe } from "bun:test";5import { JetBrainsIDE, getStableVersionsInfo } from "./jb-stable-version";6import { SemVer } from "semver";78describe("stableVersion", () => {9const testIdes: JetBrainsIDE[] = [10{11productName: "IntelliJ IDEA Ultimate",12productId: "intellij",13productCode: "IIU",14productType: "release",15exampleRepo: "https://github.com/gitpod-samples/spring-petclinic",16},17{18productName: "GoLand",19productId: "goland",20productCode: "GO",21productType: "release",22exampleRepo: "https://github.com/gitpod-samples/template-golang-cli",23},24];2526interface args {27IUBuildVersion: string;28IUMajorVersion: string;29GOBuildVersion: string;30GOMajorVersion: string;31}32interface expect {33err?: string;34buildVersion?: SemVer;35majorVersion?: string;36}3738const toAxiosData = (ide: JetBrainsIDE, majorVersion: string, buildVersion: string) => [39{40name: ide.productName,41link: ide.productCode,42releases: [43{44majorVersion: majorVersion,45build: buildVersion,46downloads: {47linux: { link: ide.productCode },48},49},50],51},52];5354test("getStableVersionsInfo", async () => {55const tests: { name: string; args: args; expect: expect }[] = [56{57name: "happy path",58args: {59IUBuildVersion: "2024.1.1",60IUMajorVersion: "2024.1",6162GOBuildVersion: "2024.1.1",63GOMajorVersion: "2024.1",64},65expect: { err: undefined, buildVersion: new SemVer("2024.1.1"), majorVersion: "2024.1" },66},67{68name: "happy path with minimal build version",69args: {70IUBuildVersion: "2024.1.300",71IUMajorVersion: "2024.1",7273GOBuildVersion: "2024.2.200",74GOMajorVersion: "2024.1",75},76expect: { err: undefined, buildVersion: new SemVer("2024.1.300"), majorVersion: "2024.1" },77},78{79name: "happy path with minimal build version#2",80args: {81IUBuildVersion: "2024.20.300",82IUMajorVersion: "2024.1",8384GOBuildVersion: "2024.2.200",85GOMajorVersion: "2024.1",86},87expect: { err: undefined, buildVersion: new SemVer("2024.2.200"), majorVersion: "2024.1" },88},89{90name: "happy path with minimal build version#3",91args: {92IUBuildVersion: "2024.1.300",93IUMajorVersion: "2024.1",9495GOBuildVersion: "2024.1.1200",96GOMajorVersion: "2024.1",97},98expect: { err: undefined, buildVersion: new SemVer("2024.1.300"), majorVersion: "2024.1" },99},100{101name: "multiple major versions",102args: {103IUBuildVersion: "2024.1.300",104IUMajorVersion: "2024.1",105106GOBuildVersion: "2024.2.200",107GOMajorVersion: "2024.2",108},109expect: { err: "Multiple major versions found, skipping update: 2024.1, 2024.2" },110},111{112name: "multiple build versions",113args: {114IUBuildVersion: "2024.1.300",115IUMajorVersion: "2024.1",116117GOBuildVersion: "2025.2.200",118GOMajorVersion: "2024.1",119},120expect: { err: "Multiple build versions (major) found, skipping update: 2024, 2025" },121},122];123for (const tt of tests) {124mock.module("axios", () => ({125default: (url: string) => {126if (url.includes("IIU")) {127return {128data: toAxiosData(testIdes[0], tt.args.IUMajorVersion, tt.args.IUBuildVersion),129};130} else if (url.includes("GO")) {131return {132data: toAxiosData(testIdes[1], tt.args.GOMajorVersion, tt.args.GOBuildVersion),133};134}135},136}));137138if (tt.expect.err) {139expect(() => getStableVersionsInfo(testIdes)).toThrow(tt.expect.err);140} else if (tt.expect.buildVersion && tt.expect.majorVersion) {141const got = await getStableVersionsInfo(testIdes);142expect(got.majorVersion).toBe(tt.expect.majorVersion);143expect(String(got.buildVersion)).toBe(String(tt.expect.buildVersion));144}145}146});147});148149150