2019-01-19 19:05:26 +00:00
"use strict" ;
2019-12-18 17:19:05 +00:00
const del = require ( "del" ) ;
2020-03-08 09:23:44 +00:00
const execa = require ( "execa" ) ;
2020-04-18 12:54:05 +00:00
const restana = require ( "restana" ) ;
2020-03-08 09:23:44 +00:00
const tempy = require ( "tempy" ) ;
2020-03-15 00:14:12 +00:00
const { bin } = require ( "./package.json" ) ;
2020-03-08 19:08:13 +00:00
const { join } = require ( "path" ) ;
2020-03-08 09:23:44 +00:00
const { test , expect , beforeAll , afterAll } = global ;
const { writeFile , readFile } = require ( "fs" ) . promises ;
2020-04-18 12:54:05 +00:00
const { isIPv6 } = require ( "net" ) ;
2019-01-19 19:05:26 +00:00
2020-03-08 13:33:24 +00:00
const packageJson = require ( "./fixtures/test.json" ) ;
2019-12-18 17:19:05 +00:00
const testDir = tempy . directory ( ) ;
2020-03-08 09:56:31 +00:00
const dependencyTypes = [
"dependencies" ,
"devDependencies" ,
"peerDependencies" ,
"optionalDependencies" ,
2020-03-08 09:23:44 +00:00
] ;
2019-12-18 17:19:05 +00:00
2020-03-15 00:14:12 +00:00
const testPackages = new Set ( ) ;
2020-03-08 09:56:31 +00:00
for ( const dependencyType of dependencyTypes ) {
for ( const name of Object . keys ( packageJson [ dependencyType ] || [ ] ) ) {
2020-03-15 00:14:12 +00:00
testPackages . add ( name ) ;
2020-03-08 09:56:31 +00:00
}
}
2020-04-18 12:54:05 +00:00
function makeUrl ( server ) {
const { address , port } = server . address ( ) ;
const hostname = isIPv6 ( address ) ? ` [ ${ address } ] ` : address ;
return Object . assign ( new URL ( "http://x" ) , { hostname , port } ) . toString ( ) ;
}
2020-03-15 00:14:12 +00:00
let npmServer , githubServer , githubUrl , npmUrl ;
2020-03-08 09:23:44 +00:00
beforeAll ( async ( ) => {
2020-03-09 22:57:04 +00:00
let commits , tags ;
[ npmServer , githubServer , commits , tags ] = await Promise . all ( [
2020-04-18 12:54:05 +00:00
restana ( ) ,
restana ( ) ,
2020-03-09 22:57:04 +00:00
readFile ( join ( _ _dirname , "fixtures/github/updates-commits.json" ) ) ,
readFile ( join ( _ _dirname , "fixtures/github/updates-tags.json" ) )
] ) ;
2020-03-08 19:04:37 +00:00
2020-03-08 09:23:44 +00:00
for ( const packageName of testPackages ) {
2019-12-18 17:19:05 +00:00
const name = packageName . replace ( /\//g , "%2f" ) ;
2020-03-09 16:52:15 +00:00
const path = join ( _ _dirname , ` fixtures/npm/ ${ name } .json ` ) ;
2020-03-15 00:14:12 +00:00
npmServer . get ( ` / ${ name } ` , async ( _ , res ) => res . send ( await readFile ( path ) ) ) ;
2019-12-18 17:19:05 +00:00
}
2020-03-15 00:14:12 +00:00
githubServer . get ( "/repos/silverwind/updates/commits" , ( _ , res ) => res . send ( commits ) ) ;
githubServer . get ( "/repos/silverwind/updates/git/refs/tags" , ( _ , res ) => res . send ( tags ) ) ;
2020-04-18 12:54:05 +00:00
[ githubServer , npmServer ] = await Promise . all ( [
githubServer . start ( 0 ) ,
npmServer . start ( 0 ) ,
2020-03-15 00:14:12 +00:00
] ) ;
2020-03-08 18:12:16 +00:00
2020-04-18 12:54:05 +00:00
githubUrl = makeUrl ( githubServer ) ;
npmUrl = makeUrl ( npmServer ) ;
2020-03-15 00:14:12 +00:00
await writeFile ( join ( testDir , ".npmrc" ) , ` registry= ${ npmUrl } ` ) ; // Fake registry
2020-03-08 16:40:55 +00:00
await writeFile ( join ( testDir , "package.json" ) , JSON . stringify ( packageJson , null , 2 ) ) ; // Copy fixture
2020-03-08 09:23:44 +00:00
} ) ;
2019-12-18 17:19:05 +00:00
2020-03-08 09:23:44 +00:00
afterAll ( async ( ) => {
2020-03-08 18:12:16 +00:00
await Promise . all ( [
del ( testDir , { force : true } ) ,
2020-03-09 16:52:15 +00:00
npmServer && npmServer . close ( ) ,
2020-03-08 18:12:16 +00:00
githubServer && githubServer . close ( ) ,
] ) ;
2020-03-08 09:23:44 +00:00
} ) ;
2019-01-19 19:05:26 +00:00
2020-03-08 09:23:44 +00:00
function makeTest ( args , expected ) {
return async ( ) => {
2020-03-15 00:14:12 +00:00
const argsArr = [ ... args . split ( /\s+/ ) , "-G" , githubUrl ] ;
2020-03-09 22:57:04 +00:00
const { stdout } = await execa ( join ( _ _dirname , bin ) , argsArr , { cwd : testDir } ) ;
2020-03-08 16:06:58 +00:00
const { results } = JSON . parse ( stdout ) ;
2020-03-08 16:44:04 +00:00
// Parse results, with custom validation for the dynamic "age" property
2020-03-08 16:06:58 +00:00
for ( const dependencyType of dependencyTypes ) {
2020-05-25 16:14:37 +00:00
for ( const [ dependencyName , actual ] of Object . entries ( results [ dependencyType ] || { } ) ) {
for ( const [ key , actualValue ] of Object . entries ( actual || { } ) ) {
const expectedValue = expected [ dependencyType ] [ dependencyName ] [ key ] ;
2020-03-08 16:06:58 +00:00
if ( key === "age" ) {
2020-05-25 16:14:37 +00:00
expect ( typeof actualValue ) . toEqual ( "string" ) ;
expect ( actualValue . length > 0 ) . toBeTruthy ( ) ;
2020-03-08 16:06:58 +00:00
} else {
2020-05-25 16:14:37 +00:00
expect ( expectedValue ) . toEqual ( actualValue ) ;
2020-03-08 16:06:58 +00:00
}
}
}
}
2020-03-08 09:23:44 +00:00
} ;
2019-01-19 19:05:26 +00:00
}
2020-03-08 09:56:31 +00:00
test ( "latest" , makeTest ( "-j" , {
2020-03-08 09:23:44 +00:00
dependencies : {
"gulp-sourcemaps" : {
old : "2.0.0" ,
new : "2.6.5" ,
info : "https://github.com/gulp-sourcemaps/gulp-sourcemaps" ,
} ,
"prismjs" : {
old : "1.0.0" ,
new : "1.17.1" ,
info : "https://github.com/LeaVerou/prism" ,
} ,
"svgstore" : {
old : "^3.0.0" ,
new : "^3.0.0-2" ,
info : "https://github.com/svgstore/svgstore" ,
} ,
"html-webpack-plugin" : {
old : "4.0.0-alpha.2" ,
new : "4.0.0-beta.11" ,
info : "https://github.com/jantimon/html-webpack-plugin" ,
} ,
"noty" : {
old : "3.1.0" ,
new : "3.2.0-beta" ,
info : "https://github.com/needim/noty" ,
} ,
"jpeg-buffer-orientation" : {
old : "0.0.0" ,
new : "2.0.3" ,
info : "https://github.com/fisker/jpeg-buffer-orientation" ,
} ,
"styled-components" : {
old : "2.5.0-1" ,
new : "5.0.0-rc.2" ,
info : "https://github.com/styled-components/styled-components" ,
} ,
"@babel/preset-env" : {
old : "7.0.0" ,
new : "7.7.6" ,
info : "https://github.com/babel/babel/tree/master/packages/babel-preset-env" ,
2020-03-08 18:12:16 +00:00
} ,
"updates" : {
old : "6941e05" ,
new : "537ccb7" ,
info : "https://github.com/silverwind/updates" ,
} ,
2020-03-08 09:23:44 +00:00
} ,
peerDependencies : {
"@babel/preset-env" : {
2020-03-09 21:00:55 +00:00
old : "~6.0.0" ,
new : "~7.7.6" ,
info : "https://github.com/babel/babel/tree/master/packages/babel-preset-env"
2019-01-19 19:05:26 +00:00
}
2020-03-08 09:23:44 +00:00
} ,
} ) ) ;
2019-01-20 21:34:40 +00:00
2020-03-08 09:56:31 +00:00
test ( "greatest" , makeTest ( "-j -g" , {
2020-03-08 09:23:44 +00:00
dependencies : {
"gulp-sourcemaps" : {
old : "2.0.0" ,
new : "2.6.5" ,
info : "https://github.com/gulp-sourcemaps/gulp-sourcemaps" ,
} ,
"prismjs" : {
old : "1.0.0" ,
new : "1.17.1" ,
info : "https://github.com/LeaVerou/prism" ,
} ,
"html-webpack-plugin" : {
old : "4.0.0-alpha.2" ,
new : "4.0.0-beta.11" ,
info : "https://github.com/jantimon/html-webpack-plugin" ,
} ,
"noty" : {
old : "3.1.0" ,
new : "3.1.4" ,
info : "https://github.com/needim/noty" ,
} ,
"jpeg-buffer-orientation" : {
old : "0.0.0" ,
new : "2.0.3" ,
info : "https://github.com/fisker/jpeg-buffer-orientation" ,
} ,
"styled-components" : {
old : "2.5.0-1" ,
new : "5.0.0-rc.2" ,
info : "https://github.com/styled-components/styled-components" ,
} ,
"@babel/preset-env" : {
old : "7.0.0" ,
new : "7.7.6" ,
info : "https://github.com/babel/babel/tree/master/packages/babel-preset-env" ,
2020-03-08 18:12:16 +00:00
} ,
"updates" : {
old : "6941e05" ,
new : "537ccb7" ,
info : "https://github.com/silverwind/updates" ,
} ,
2020-03-08 09:23:44 +00:00
} ,
peerDependencies : {
"@babel/preset-env" : {
2020-03-09 21:00:55 +00:00
old : "~6.0.0" ,
new : "~7.7.6" ,
info : "https://github.com/babel/babel/tree/master/packages/babel-preset-env"
2020-03-08 09:23:44 +00:00
}
}
} ) ) ;
2019-02-25 21:46:39 +00:00
2020-03-08 09:56:31 +00:00
test ( "prerelease" , makeTest ( "-j -g -p" , {
2020-03-08 09:23:44 +00:00
dependencies : {
"gulp-sourcemaps" : {
old : "2.0.0" ,
new : "2.6.5" ,
info : "https://github.com/gulp-sourcemaps/gulp-sourcemaps" ,
} ,
"prismjs" : {
old : "1.0.0" ,
new : "1.17.1" ,
info : "https://github.com/LeaVerou/prism" ,
} ,
"svgstore" : {
old : "^3.0.0" ,
new : "^3.0.0-2" ,
info : "https://github.com/svgstore/svgstore" ,
} ,
"html-webpack-plugin" : {
old : "4.0.0-alpha.2" ,
new : "4.0.0-beta.11" ,
info : "https://github.com/jantimon/html-webpack-plugin" ,
} ,
"noty" : {
old : "3.1.0" ,
new : "3.2.0-beta" ,
info : "https://github.com/needim/noty" ,
} ,
"jpeg-buffer-orientation" : {
old : "0.0.0" ,
new : "2.0.3" ,
info : "https://github.com/fisker/jpeg-buffer-orientation" ,
} ,
"styled-components" : {
old : "2.5.0-1" ,
new : "5.0.0-rc.2" ,
info : "https://github.com/styled-components/styled-components" ,
} ,
"@babel/preset-env" : {
old : "7.0.0" ,
new : "7.7.6" ,
info : "https://github.com/babel/babel/tree/master/packages/babel-preset-env" ,
2020-03-08 18:12:16 +00:00
} ,
"updates" : {
old : "6941e05" ,
new : "537ccb7" ,
info : "https://github.com/silverwind/updates" ,
} ,
2020-03-08 09:23:44 +00:00
} ,
peerDependencies : {
"@babel/preset-env" : {
2020-03-09 21:00:55 +00:00
old : "~6.0.0" ,
new : "~7.7.6" ,
info : "https://github.com/babel/babel/tree/master/packages/babel-preset-env"
2019-01-20 21:34:40 +00:00
}
2020-03-08 09:23:44 +00:00
} ,
} ) ) ;
2019-03-28 20:22:49 +00:00
2020-03-08 09:56:31 +00:00
test ( "release" , makeTest ( "-j -R" , {
2020-03-08 09:23:44 +00:00
dependencies : {
"gulp-sourcemaps" : {
old : "2.0.0" ,
new : "2.6.5" ,
info : "https://github.com/gulp-sourcemaps/gulp-sourcemaps" ,
} ,
"prismjs" : {
old : "1.0.0" ,
new : "1.17.1" ,
info : "https://github.com/LeaVerou/prism" ,
} ,
"svgstore" : {
old : "^3.0.0" ,
new : "^2.0.3" ,
info : "https://github.com/svgstore/svgstore" ,
} ,
"html-webpack-plugin" : {
old : "4.0.0-alpha.2" ,
new : "3.2.0" ,
info : "https://github.com/jantimon/html-webpack-plugin" ,
} ,
"noty" : {
old : "3.1.0" ,
new : "3.1.4" ,
info : "https://github.com/needim/noty" ,
} ,
"jpeg-buffer-orientation" : {
old : "0.0.0" ,
new : "2.0.3" ,
info : "https://github.com/fisker/jpeg-buffer-orientation" ,
} ,
"styled-components" : {
old : "2.5.0-1" ,
new : "4.4.1" ,
info : "https://github.com/styled-components/styled-components" ,
} ,
"@babel/preset-env" : {
old : "7.0.0" ,
new : "7.7.6" ,
info : "https://github.com/babel/babel/tree/master/packages/babel-preset-env" ,
2020-03-08 18:12:16 +00:00
} ,
"updates" : {
old : "6941e05" ,
new : "537ccb7" ,
info : "https://github.com/silverwind/updates" ,
} ,
2020-03-08 09:23:44 +00:00
} ,
peerDependencies : {
"@babel/preset-env" : {
2020-03-09 21:00:55 +00:00
old : "~6.0.0" ,
new : "~7.7.6" ,
info : "https://github.com/babel/babel/tree/master/packages/babel-preset-env"
2020-03-08 18:12:16 +00:00
} ,
2020-03-08 09:23:44 +00:00
} ,
} ) ) ;
2019-01-19 19:05:26 +00:00
2020-03-08 09:56:31 +00:00
test ( "patch" , makeTest ( "-j -P" , {
2020-03-08 09:23:44 +00:00
dependencies : {
"gulp-sourcemaps" : {
old : "2.0.0" ,
new : "2.0.1" ,
info : "https://github.com/floridoo/gulp-sourcemaps" ,
} ,
"svgstore" : {
old : "^3.0.0" ,
new : "^3.0.0-2" ,
info : "https://github.com/svgstore/svgstore" ,
} ,
"html-webpack-plugin" : {
old : "4.0.0-alpha.2" ,
new : "4.0.0-beta.11" ,
info : "https://github.com/jantimon/html-webpack-plugin" ,
} ,
"noty" : {
old : "3.1.0" ,
new : "3.1.4" ,
info : "https://github.com/needim/noty" ,
} ,
2020-03-08 18:12:16 +00:00
"updates" : {
old : "6941e05" ,
new : "537ccb7" ,
info : "https://github.com/silverwind/updates" ,
} ,
2020-03-08 09:23:44 +00:00
} ,
} ) ) ;
2020-03-09 21:24:57 +00:00
test ( "include version deps" , makeTest ( "-j -i noty" , {
dependencies : {
"noty" : {
old : "3.1.0" ,
new : "3.2.0-beta" ,
info : "https://github.com/needim/noty" ,
} ,
} ,
} ) ) ;
2020-04-20 09:09:28 +00:00
test ( "include version deps #2" , makeTest ( "-j -i noty -i noty,noty" , {
dependencies : {
"noty" : {
old : "3.1.0" ,
new : "3.2.0-beta" ,
info : "https://github.com/needim/noty" ,
} ,
} ,
} ) ) ;
2020-03-09 21:24:57 +00:00
test ( "exclude version deps" , makeTest ( "-j -e gulp-sourcemaps,prismjs,svgstore,html-webpack-plugin,noty,jpeg-buffer-orientation,styled-components,@babel/preset-env" , {
dependencies : {
"updates" : {
old : "6941e05" ,
new : "537ccb7" ,
info : "https://github.com/silverwind/updates" ,
} ,
} ,
} ) ) ;