1- import { assert , assertEquals , fail , assertRejects } from "deno/testing/asserts.ts"
1+ // deno-lint-ignore-file require-await
2+ import { assert , assertEquals , fail , assertRejects } from "deno/assert/mod.ts"
23import { Installation , Package , PackageRequirement } from "../types.ts"
34import { useTestConfig } from "../hooks/useTestConfig.ts"
45import useInventory from "../hooks/useInventory.ts"
@@ -9,14 +10,21 @@ import { stub } from "deno/testing/mock.ts"
910import SemVer from "../utils/semver.ts"
1011import Path from "../utils/Path.ts"
1112
12- Deno . test ( "resolve cellar.has" , async runner => {
13+ Deno . test ( "resolve cellar.has" , {
14+ permissions : { 'read' : true , 'env' : [ "TMPDIR" , "TMP" , "TEMP" , "HOME" ] , 'write' : [ Deno . env . get ( "TMPDIR" ) || Deno . env . get ( "TMP" ) || Deno . env . get ( "TEMP" ) || "/tmp" ] }
15+ } , async runner => {
1316 const prefix = useTestConfig ( ) . prefix
1417 const pkg = { project : "foo" , version : new SemVer ( "1.0.0" ) }
1518
1619 const cellar = useCellar ( )
17- const has = ( _ : Path | Package | PackageRequirement ) => {
18- const a : Installation = { pkg, path : prefix . join ( pkg . project , `v${ pkg . version } ` ) }
19- return Promise . resolve ( a )
20+ const has = async ( pkg_ : Package | PackageRequirement | Path ) => {
21+ if ( pkg_ instanceof Path ) fail ( )
22+ if ( pkg . project == pkg_ . project ) {
23+ if ( 'constraint' in pkg_ && ! pkg_ . constraint . satisfies ( pkg . version ) ) return
24+ if ( 'version' in pkg_ && ! pkg_ . version . eq ( pkg . version ) ) return
25+ const a : Installation = { pkg, path : prefix . join ( pkg . project , `v${ pkg . version } ` ) }
26+ return a
27+ }
2028 }
2129
2230 await runner . step ( "happy path" , async ( ) => {
@@ -29,7 +37,7 @@ Deno.test("resolve cellar.has", async runner => {
2937 } ) )
3038
3139 try {
32- const rv = await resolve ( [ pkg ] )
40+ const rv = await resolve ( [ pkg ] )
3341 assertEquals ( rv . pkgs [ 0 ] . project , pkg . project )
3442 assertEquals ( rv . installed [ 0 ] . pkg . project , pkg . project )
3543 } finally {
@@ -60,7 +68,7 @@ Deno.test("resolve cellar.has", async runner => {
6068 assert ( errord )
6169 } )
6270
63- await runner . step ( "uses existing version if even if update set" , async ( ) => {
71+ await runner . step ( "uses existing version if it is the latest even if update set" , async ( ) => {
6472 const stub1 = stub ( _internals , "useInventory" , ( ) => ( {
6573 get : ( ) => fail ( ) ,
6674 select : ( ) => Promise . resolve ( pkg . version ) ,
@@ -78,6 +86,36 @@ Deno.test("resolve cellar.has", async runner => {
7886 stub2 . restore ( )
7987 }
8088 } )
89+
90+ await runner . step ( "updates version if latest is not installed" , async runner => {
91+ const stub1 = stub ( _internals , "useInventory" , ( ) => ( {
92+ get : ( ) => fail ( ) ,
93+ select : ( ) => Promise . resolve ( new SemVer ( "1.0.1" ) ) ,
94+ } ) )
95+ const stub2 = stub ( _internals , "useCellar" , ( ) => ( {
96+ ...cellar , has
97+ } ) )
98+
99+ try {
100+ await runner . step ( "update: true" , async ( ) => {
101+ const rv = await resolve ( [ { project : pkg . project , constraint : new semver . Range ( "^1" ) } ] , { update : true } )
102+ assertEquals ( rv . pkgs [ 0 ] . project , pkg . project )
103+ assertEquals ( rv . pending [ 0 ] . project , pkg . project )
104+ assertEquals ( rv . pending [ 0 ] . version , new SemVer ( "1.0.1" ) )
105+ } )
106+
107+ await runner . step ( "update: set" , async ( ) => {
108+ const update = new Set ( [ pkg . project ] )
109+ const rv = await resolve ( [ { project : pkg . project , constraint : new semver . Range ( "^1" ) } ] , { update } )
110+ assertEquals ( rv . pkgs [ 0 ] . project , pkg . project )
111+ assertEquals ( rv . pending [ 0 ] . project , pkg . project )
112+ assertEquals ( rv . pending [ 0 ] . version , new SemVer ( "1.0.1" ) )
113+ } )
114+ } finally {
115+ stub1 . restore ( )
116+ stub2 . restore ( )
117+ }
118+ } )
81119} )
82120
83121const permissions = { net : false , read : true , env : [ "TMPDIR" , "HOME" , "TMP" , "TEMP" ] , write : true /*FIXME*/ }
0 commit comments