1+ import { assert , assertEquals , fail , assertRejects } from "deno/testing/asserts.ts"
12import { Installation , Package , PackageRequirement } from "../types.ts"
2- import { assert , assertEquals , fail } from "deno/testing/asserts.ts"
33import { useTestConfig } from "../hooks/useTestConfig.ts"
4+ import useInventory from "../hooks/useInventory.ts"
45import resolve , { _internals } from "./resolve.ts"
56import useCellar from "../hooks/useCellar.ts"
7+ import * as semver from "../utils/semver.ts"
68import { stub } from "deno/testing/mock.ts"
79import SemVer from "../utils/semver.ts"
810import Path from "../utils/Path.ts"
@@ -58,7 +60,7 @@ Deno.test("resolve cellar.has", async runner => {
5860 assert ( errord )
5961 } )
6062
61- await runner . step ( "uses existing version if even if update set" , async ( ) => {
63+ await runner . step ( "uses existing version if even if update set" , async ( ) => {
6264 const stub1 = stub ( _internals , "useInventory" , ( ) => ( {
6365 get : ( ) => fail ( ) ,
6466 select : ( ) => Promise . resolve ( pkg . version ) ,
@@ -77,3 +79,73 @@ Deno.test("resolve cellar.has", async runner => {
7779 }
7880 } )
7981} )
82+
83+ const permissions = { net : false , read : true , env : [ "TMPDIR" , "HOME" , "TMP" , "TEMP" ] , write : true /*FIXME*/ }
84+
85+ // https://github.com/teaxyz/cli/issues/655
86+ Deno . test ( "postgres@500 fails" , { permissions } , async ( ) => {
87+ useTestConfig ( )
88+
89+ const pkg = {
90+ project : "posqtgres.org" ,
91+ version : new SemVer ( "15.0.1" )
92+ }
93+
94+ const select = useInventory ( ) . select
95+ const stub1 = stub ( _internals , "useInventory" , ( ) => ( {
96+ get : ( ) => Promise . resolve ( [ pkg . version ] ) ,
97+ select,
98+ } ) )
99+
100+ const pkgs = [
101+ { project : pkg . project , constraint : new semver . Range ( '@500' ) }
102+ ]
103+
104+ try {
105+ // https://github.com/teaxyz/cli/issues/655
106+ await assertRejects ( ( ) => resolve ( pkgs ) )
107+ } finally {
108+ stub1 . restore ( )
109+ }
110+ } )
111+
112+ // https://github.com/teaxyz/cli/issues/655
113+ Deno . test ( "postgres@500 fails if installed" , { permissions } , async ( ) => {
114+ const pkg = {
115+ project : "posqtgres.org" ,
116+ version : new SemVer ( "15.0.1" )
117+ }
118+ const prefix = useTestConfig ( ) . prefix
119+
120+ const cellar = useCellar ( )
121+ const has = ( b : Path | Package | PackageRequirement ) => {
122+ if ( "constraint" in b && b . constraint . satisfies ( pkg . version ) ) {
123+ const a : Installation = { pkg, path : prefix . join ( pkg . project , `v${ pkg . version } ` ) }
124+ return Promise . resolve ( a )
125+ } else {
126+ return Promise . resolve ( undefined )
127+ }
128+ }
129+
130+ const select = useInventory ( ) . select
131+ const stub1 = stub ( _internals , "useInventory" , ( ) => ( {
132+ get : ( ) => Promise . resolve ( [ pkg . version ] ) ,
133+ select,
134+ } ) )
135+ const stub2 = stub ( _internals , "useCellar" , ( ) => ( {
136+ ...cellar ,
137+ has
138+ } ) )
139+
140+ const pkgs = [
141+ { project : pkg . project , constraint : new semver . Range ( '@500' ) }
142+ ]
143+
144+ try {
145+ // https://github.com/teaxyz/cli/issues/655
146+ await assertRejects ( ( ) => resolve ( pkgs ) )
147+ } finally {
148+ stub1 . restore ( )
149+ stub2 . restore ( )
150+ }
151+ } )
0 commit comments