Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/hooks/useCellar.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { assertEquals } from "deno/testing/asserts.ts"
import { assertEquals, assertRejects } from "deno/testing/asserts.ts"
import SemVer, * as semver from "../utils/semver.ts"
import { useTestConfig } from "./useTestConfig.ts"
import install from "../plumbing/install.ts"
Expand All @@ -14,6 +14,8 @@ Deno.test("useCellar.resolve()", async () => {
await useCellar().resolve(installation.pkg)
await useCellar().resolve({ project: "python.org", constraint: new semver.Range("^3") })
await useCellar().resolve(installation.path)

assertRejects(() => useCellar().resolve({ project: "python.org", constraint: new semver.Range("@300")}))
})

Deno.test("useCellar.has()", async () => {
Expand Down
76 changes: 74 additions & 2 deletions src/plumbing/resolve.test.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import { assert, assertEquals, fail, assertRejects } from "deno/testing/asserts.ts"
import { Installation, Package, PackageRequirement } from "../types.ts"
import { assert, assertEquals, fail } from "deno/testing/asserts.ts"
import { useTestConfig } from "../hooks/useTestConfig.ts"
import useInventory from "../hooks/useInventory.ts"
import resolve, { _internals } from "./resolve.ts"
import useCellar from "../hooks/useCellar.ts"
import * as semver from "../utils/semver.ts"
import { stub } from "deno/testing/mock.ts"
import SemVer from "../utils/semver.ts"
import Path from "../utils/Path.ts"
Expand Down Expand Up @@ -58,7 +60,7 @@ Deno.test("resolve cellar.has", async runner => {
assert(errord)
})

await runner.step("uses existing version if even if update set", async () => {
await runner.step("uses existing version if even if update set", async () => {
const stub1 = stub(_internals, "useInventory", () => ({
get: () => fail(),
select: () => Promise.resolve(pkg.version),
Expand All @@ -77,3 +79,73 @@ Deno.test("resolve cellar.has", async runner => {
}
})
})

const permissions = { net: false, read: true, env: ["TMPDIR", "HOME", "TMP", "TEMP"], write: true /*FIXME*/ }

// https://github.com/teaxyz/cli/issues/655
Deno.test("postgres@500 fails", { permissions }, async () => {
useTestConfig()

const pkg = {
project: "posqtgres.org",
version: new SemVer("15.0.1")
}

const select = useInventory().select
const stub1 = stub(_internals, "useInventory", () => ({
get: () => Promise.resolve([pkg.version]),
select,
}))

const pkgs = [
{ project: pkg.project, constraint: new semver.Range('@500') }
]

try {
// https://github.com/teaxyz/cli/issues/655
await assertRejects(() => resolve(pkgs))
} finally {
stub1.restore()
}
})

// https://github.com/teaxyz/cli/issues/655
Deno.test("postgres@500 fails if installed", { permissions }, async () => {
const pkg = {
project: "posqtgres.org",
version: new SemVer("15.0.1")
}
const prefix = useTestConfig().prefix

const cellar = useCellar()
const has = (b: Path | Package | PackageRequirement) => {
if ("constraint" in b && b.constraint.satisfies(pkg.version)) {
const a: Installation = {pkg, path: prefix.join(pkg.project, `v${pkg.version}`) }
return Promise.resolve(a)
} else {
return Promise.resolve(undefined)
}
}

const select = useInventory().select
const stub1 = stub(_internals, "useInventory", () => ({
get: () => Promise.resolve([pkg.version]),
select,
}))
const stub2 = stub(_internals, "useCellar", () => ({
...cellar,
has
}))

const pkgs = [
{ project: pkg.project, constraint: new semver.Range('@500') }
]

try {
// https://github.com/teaxyz/cli/issues/655
await assertRejects(() => resolve(pkgs))
} finally {
stub1.restore()
stub2.restore()
}
})
8 changes: 8 additions & 0 deletions src/utils/semver.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,10 @@ Deno.test("semver", async test => {

await test.step("satisfies", () => {
assertEquals(new semver.Range("=3.1.0").max([new SemVer("3.1.0")]), new SemVer("3.1.0"))

// the following two test for https://github.com/teaxyz/lib/pull/36
assertEquals(new semver.Range("^300").max([new SemVer("3.1.0")]), undefined)
assertEquals(new semver.Range("@300").max([new SemVer("3.1.0")]), undefined)
})

await test.step("constructor", () => {
Expand Down Expand Up @@ -153,6 +157,10 @@ Deno.test("semver", async test => {
assertThrows(() => new semver.Range("1.2"))
assertThrows(() => new semver.Range("1.2.3"))
assertThrows(() => new semver.Range("1.2.3.4"))

assertEquals(new semver.Range("@300").toString(), "^300")
assertEquals(new semver.Range("@300.1").toString(), "~300.1")
assertEquals(new semver.Range("@300.1.0").toString(), ">=300.1<300.1.1")
})

await test.step("intersection", async test => {
Expand Down
2 changes: 1 addition & 1 deletion src/utils/semver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ export default class SemVer {
this.raw = v.raw
this.pretty = v.pretty
} else {
this.components = input
this.components = [...input]
this.raw = input.join('.')
}

Expand Down