Skip to content

Commit

Permalink
Tests
Browse files Browse the repository at this point in the history
  • Loading branch information
mskelton committed Mar 21, 2024
1 parent 22cd914 commit 5c205a8
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 19 deletions.
6 changes: 3 additions & 3 deletions bundles/@yarnpkg/plugin-outdated.js

Large diffs are not rendered by default.

31 changes: 20 additions & 11 deletions src/utils.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Manifest } from "@yarnpkg/core"
import { fromUrl } from "hosted-git-info"
import semver from "semver"
import { fn } from "typanion"

export const truthy = Boolean as unknown as <T>(
arg: T | undefined | null | false
Expand Down Expand Up @@ -28,17 +29,25 @@ export function getHomepageURL({ raw: manifest }: Manifest): string | null {
: repoURL
}

const hasPrerelease = (version: string) =>
semver.parse(version)!.prerelease.length
const isNumber = (value: string | number): value is number =>
typeof value === "number"

const padArray = (arr: number[], length: number) =>
arr.concat(Array(length - arr.length).fill(0))

const parsePreRelease = (prerelease: readonly (string | number)[]) =>
padArray(prerelease.filter(isNumber), 3).join(".")

/**
* Because some packages have a pre-release version as their `latest` version,
* we need to first check if the latest version is a pre-release. If it is,
* we compare the current and latest directly, otherwise we coerce the current
* version to remove any pre-release identifiers to determine if it is outdated.
*/
export function isVersionOutdated(current: string, latest: string) {
return hasPrerelease(current) && hasPrerelease(latest)
? semver.lt(current, latest)
: semver.lt(semver.coerce(current)!, latest)
const latestPrerelease = semver.prerelease(latest)
const currentPrerelease = semver.prerelease(current)

if (latestPrerelease && currentPrerelease) {
return semver.lt(
parsePreRelease(currentPrerelease),
parsePreRelease(latestPrerelease)
)
}

return semver.lt(current, latest)
}
14 changes: 13 additions & 1 deletion test/specs/outdated.test.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { isVersionOutdated } from "../../src/utils"
import { expect, test } from "../fixtures/env"
import { readSupplementalFile, writeSupplementalFile } from "../utils/files"

Expand Down Expand Up @@ -183,7 +184,7 @@ test.describe("yarn outdated", () => {
run,
writeJSON,
}) => {
await writeJSON("package.json", { dependencies: { patch: "1.0.1" } })
await writeJSON("package.json", { dependencies: { patch: "1.0.0" } })
await run("install")

const { stderr, stdout } = await run("outdated")
Expand Down Expand Up @@ -229,3 +230,14 @@ test.describe("yarn outdated", () => {
})
})
})

test("isVersionOutdated", () => {
expect(isVersionOutdated("1.0.0", "1.0.0")).toBe(false)
expect(isVersionOutdated("1.0.0", "1.0.1")).toBe(true)
expect(isVersionOutdated("1.0.0", "1.0.1-rc.1")).toBe(true)

expect(isVersionOutdated("1.0.0-rc.1", "1.0.0")).toBe(true)
expect(isVersionOutdated("1.0.0-rc.1", "1.0.1")).toBe(true)
expect(isVersionOutdated("1.0.0-rc.1", "1.0.0-rc.1")).toBe(false)
expect(isVersionOutdated("1.0.0-rc.1", "1.0.0-rc.2")).toBe(true)
})
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
➤ YN0000: ┌ Checking for outdated dependencies
➤ YN0000: └ Completed

➤ YN0000: ✨ All your dependencies are up to date!
➤ YN0000: Done
➤ YN0000: Package Current Latest Package Type
➤ YN0000: patch 1.0.0 1.0.1-alpha.1 dependencies

➤ YN0000: 1 dependency is out of date
➤ YN0000: Done with warnings
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
➤ YN0000: ┌ Checking for outdated dependencies
➤ YN0000: └ Completed

➤ YN0000: ✨ All your dependencies are up to date!
➤ YN0000: Done
➤ YN0000: Package Current Latest Package Type
➤ YN0000: patch 1.0.1-alpha.1 1.0.1 dependencies

➤ YN0000: 1 dependency is out of date
➤ YN0000: Done with warnings

0 comments on commit 5c205a8

Please sign in to comment.