11var path = require ( 'path' )
22var mkdirp = require ( 'mkdirp' )
3+ var mr = require ( 'npm-registry-mock' )
34var osenv = require ( 'osenv' )
45var rimraf = require ( 'rimraf' )
56var cacheFile = require ( 'npm-cache-filename' )
@@ -14,28 +15,26 @@ var CACHE_DIR = path.resolve(PKG_DIR, 'cache')
1415var cacheBase = cacheFile ( CACHE_DIR ) ( common . registry + '/-/all' )
1516var cachePath = path . join ( cacheBase , '.cache.json' )
1617
18+ var server
19+
1720test ( 'setup' , function ( t ) {
18- t . pass ( 'all set up' )
19- t . done ( )
21+ mr ( { port : common . port , throwOnUnmatched : true } , function ( err , s ) {
22+ t . ifError ( err , 'registry mocked successfully' )
23+ server = s
24+ t . pass ( 'all set up' )
25+ t . done ( )
26+ } )
2027} )
2128
2229test ( 'notifies when there are no results' , function ( t ) {
2330 setup ( )
24- var now = Date . now ( )
25- var cacheContents = {
26- '_updated' : now ,
27- bar : { name : 'bar' , version : '1.0.0' } ,
28- cool : { name : 'cool' , version : '1.0.0' } ,
29- foo : { name : 'foo' , version : '2.0.0' } ,
30- other : { name : 'other' , version : '1.0.0' }
31- }
32- var fixture = new Tacks ( File ( cacheContents ) )
33- fixture . create ( cachePath )
31+ server . get ( '/-/v1/search?text=none&size=20' ) . once ( ) . reply ( 200 , {
32+ objects : [ ]
33+ } )
3434 common . npm ( [
35- 'search' , 'nomatcheswhatsoeverfromthis ' ,
35+ 'search' , 'none ' ,
3636 '--registry' , common . registry ,
37- '--loglevel' , 'error' ,
38- '--cache' , CACHE_DIR
37+ '--loglevel' , 'error'
3938 ] , { } , function ( err , code , stdout , stderr ) {
4039 if ( err ) throw err
4140 t . equal ( stderr , '' , 'no error output' )
@@ -47,13 +46,16 @@ test('notifies when there are no results', function (t) {
4746
4847test ( 'spits out a useful error when no cache nor network' , function ( t ) {
4948 setup ( )
49+ server . get ( '/-/v1/search?text=foo&size=20' ) . once ( ) . reply ( 404 , { } )
50+ server . get ( '/-/all' ) . many ( ) . reply ( 404 , { } )
5051 var cacheContents = { }
5152 var fixture = new Tacks ( File ( cacheContents ) )
5253 fixture . create ( cachePath )
5354 common . npm ( [
5455 'search' , 'foo' ,
5556 '--registry' , common . registry ,
5657 '--loglevel' , 'silly' ,
58+ '--json' ,
5759 '--fetch-retry-mintimeout' , 0 ,
5860 '--fetch-retry-maxtimeout' , 0 ,
5961 '--cache' , CACHE_DIR
@@ -68,16 +70,12 @@ test('spits out a useful error when no cache nor network', function (t) {
6870
6971test ( 'can switch to JSON mode' , function ( t ) {
7072 setup ( )
71- var now = Date . now ( )
72- var cacheContents = {
73- '_updated' : now ,
74- bar : { name : 'bar' , version : '1.0.0' } ,
75- cool : { name : 'cool' , version : '1.0.0' } ,
76- foo : { name : 'foo' , version : '2.0.0' } ,
77- other : { name : 'other' , version : '1.0.0' }
78- }
79- var fixture = new Tacks ( File ( cacheContents ) )
80- fixture . create ( cachePath )
73+ server . get ( '/-/v1/search?text=oo&size=20' ) . once ( ) . reply ( 200 , {
74+ objects : [
75+ { package : { name : 'cool' , version : '1.0.0' } } ,
76+ { package : { name : 'foo' , version : '2.0.0' } }
77+ ]
78+ } )
8179 common . npm ( [
8280 'search' , 'oo' ,
8381 '--json' ,
@@ -86,30 +84,23 @@ test('can switch to JSON mode', function (t) {
8684 '--cache' , CACHE_DIR
8785 ] , { } , function ( err , code , stdout , stderr ) {
8886 if ( err ) throw err
89- t . deepEquals ( JSON . parse ( stdout ) , [
90- { name : 'cool' , version : '1.0.0' } ,
91- { name : 'foo' , version : '2.0.0' }
92- ] , 'results returned as valid json' )
9387 t . equal ( stderr , '' , 'no error output' )
9488 t . equal ( code , 0 , 'search gives 0 error code even if no matches' )
89+ t . deepEquals ( JSON . parse ( stdout ) , [
90+ { name : 'cool' , version : '1.0.0' , date : null } ,
91+ { name : 'foo' , version : '2.0.0' , date : null }
92+ ] , 'results returned as valid json' )
9593 t . done ( )
9694 } )
9795} )
9896
9997test ( 'JSON mode does not notify on empty' , function ( t ) {
10098 setup ( )
101- var now = Date . now ( )
102- var cacheContents = {
103- '_updated' : now ,
104- bar : { name : 'bar' , version : '1.0.0' } ,
105- cool : { name : 'cool' , version : '1.0.0' } ,
106- foo : { name : 'foo' , version : '2.0.0' } ,
107- other : { name : 'other' , version : '1.0.0' }
108- }
109- var fixture = new Tacks ( File ( cacheContents ) )
110- fixture . create ( cachePath )
99+ server . get ( '/-/v1/search?text=oo&size=20' ) . once ( ) . reply ( 200 , {
100+ objects : [ ]
101+ } )
111102 common . npm ( [
112- 'search' , 'nomatcheswhatsoeverfromthis ' ,
103+ 'search' , 'oo ' ,
113104 '--json' ,
114105 '--registry' , common . registry ,
115106 '--loglevel' , 'error' ,
@@ -125,16 +116,12 @@ test('JSON mode does not notify on empty', function (t) {
125116
126117test ( 'can switch to tab separated mode' , function ( t ) {
127118 setup ( )
128- var now = Date . now ( )
129- var cacheContents = {
130- '_updated' : now ,
131- bar : { name : 'bar' , version : '1.0.0' } ,
132- cool : { name : 'cool' , version : '1.0.0' } ,
133- foo : { name : 'foo' , description : 'this\thas\ttabs' , version : '2.0.0' } ,
134- other : { name : 'other' , version : '1.0.0' }
135- }
136- var fixture = new Tacks ( File ( cacheContents ) )
137- fixture . create ( cachePath )
119+ server . get ( '/-/v1/search?text=oo&size=20' ) . once ( ) . reply ( 200 , {
120+ objects : [
121+ { package : { name : 'cool' , version : '1.0.0' } } ,
122+ { package : { name : 'foo' , description : 'this\thas\ttabs' , version : '2.0.0' } }
123+ ]
124+ } )
138125 common . npm ( [
139126 'search' , 'oo' ,
140127 '--parseable' ,
@@ -152,18 +139,11 @@ test('can switch to tab separated mode', function (t) {
152139
153140test ( 'tab mode does not notify on empty' , function ( t ) {
154141 setup ( )
155- var now = Date . now ( )
156- var cacheContents = {
157- '_updated' : now ,
158- bar : { name : 'bar' , version : '1.0.0' } ,
159- cool : { name : 'cool' , version : '1.0.0' } ,
160- foo : { name : 'foo' , version : '2.0.0' } ,
161- other : { name : 'other' , version : '1.0.0' }
162- }
163- var fixture = new Tacks ( File ( cacheContents ) )
164- fixture . create ( cachePath )
142+ server . get ( '/-/v1/search?text=oo&size=20' ) . once ( ) . reply ( 200 , {
143+ objects : [ ]
144+ } )
165145 common . npm ( [
166- 'search' , 'nomatcheswhatsoeverfromthis ' ,
146+ 'search' , 'oo ' ,
167147 '--parseable' ,
168148 '--registry' , common . registry ,
169149 '--loglevel' , 'error' ,
@@ -301,9 +281,11 @@ var searches = [
301281 }
302282]
303283
284+ // These test classic hand-matched searches
304285searches . forEach ( function ( search ) {
305286 test ( search . description , function ( t ) {
306287 setup ( )
288+ server . get ( '/-/v1/search?text=' + encodeURI ( search . term ) + '&size=20' ) . once ( ) . reply ( 404 , { } )
307289 var now = Date . now ( )
308290 var cacheContents = {
309291 '_updated' : now ,
@@ -349,6 +331,7 @@ searches.forEach(function (search) {
349331
350332test ( 'cleanup' , function ( t ) {
351333 cleanup ( )
334+ server . close ( )
352335 t . end ( )
353336} )
354337
@@ -358,6 +341,7 @@ function setup () {
358341}
359342
360343function cleanup ( ) {
344+ server . done ( )
361345 process . chdir ( osenv . tmpdir ( ) )
362346 rimraf . sync ( PKG_DIR )
363347}
0 commit comments