summaryrefslogtreecommitdiff
path: root/deps/npm/test/tap/search.esearch.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/test/tap/search.esearch.js')
-rw-r--r--deps/npm/test/tap/search.esearch.js192
1 files changed, 192 insertions, 0 deletions
diff --git a/deps/npm/test/tap/search.esearch.js b/deps/npm/test/tap/search.esearch.js
new file mode 100644
index 0000000000..d892aec957
--- /dev/null
+++ b/deps/npm/test/tap/search.esearch.js
@@ -0,0 +1,192 @@
+var common = require('../common-tap.js')
+var finished = require('mississippi').finished
+var mkdirp = require('mkdirp')
+var mr = require('npm-registry-mock')
+var npm = require('../../')
+var osenv = require('osenv')
+var path = require('path')
+var rimraf = require('rimraf')
+var test = require('tap').test
+
+var SEARCH = '/-/v1/search'
+var PKG_DIR = path.resolve(__dirname, 'create-entry-update-stream')
+var CACHE_DIR = path.resolve(PKG_DIR, 'cache')
+
+var esearch = require('../../lib/search/esearch')
+
+var server
+
+function setup () {
+ cleanup()
+ mkdirp.sync(CACHE_DIR)
+ process.chdir(CACHE_DIR)
+}
+
+function cleanup () {
+ process.chdir(osenv.tmpdir())
+ rimraf.sync(PKG_DIR)
+}
+
+test('setup', function (t) {
+ mr({port: common.port, throwOnUnmatched: true}, function (err, s) {
+ t.ifError(err, 'registry mocked successfully')
+ npm.load({ cache: CACHE_DIR, registry: common.registry }, function (err) {
+ t.ifError(err, 'npm loaded successfully')
+ server = s
+ t.pass('all set up')
+ t.done()
+ })
+ })
+})
+
+test('basic test', function (t) {
+ setup()
+ server.get(SEARCH + '?text=oo&size=1').once().reply(200, {
+ objects: [
+ { package: { name: 'cool', version: '1.0.0' } },
+ { package: { name: 'foo', version: '2.0.0' } }
+ ]
+ })
+ var results = []
+ var s = esearch({
+ include: ['oo'],
+ limit: 1
+ })
+ t.ok(s, 'got a stream')
+ s.on('data', function (d) {
+ results.push(d)
+ })
+ finished(s, function (err) {
+ if (err) { throw err }
+ t.ok(true, 'stream finished without error')
+ t.deepEquals(results, [{
+ name: 'cool',
+ version: '1.0.0',
+ description: null,
+ maintainers: null,
+ keywords: null,
+ date: null
+ }, {
+ name: 'foo',
+ version: '2.0.0',
+ description: null,
+ maintainers: null,
+ keywords: null,
+ date: null
+ }])
+ server.done()
+ t.done()
+ })
+})
+
+test('only returns certain fields for each package', function (t) {
+ setup()
+ var date = new Date()
+ server.get(SEARCH + '?text=oo&size=1').once().reply(200, {
+ objects: [{
+ package: {
+ name: 'cool',
+ version: '1.0.0',
+ description: 'desc',
+ maintainers: [
+ {username: 'x', email: 'a@b.c'},
+ {username: 'y', email: 'c@b.a'}
+ ],
+ keywords: ['a', 'b', 'c'],
+ date: date.toISOString(),
+ extra: 'lol'
+ }
+ }]
+ })
+ var results = []
+ var s = esearch({
+ include: ['oo'],
+ limit: 1
+ })
+ t.ok(s, 'got a stream')
+ s.on('data', function (d) {
+ results.push(d)
+ })
+ finished(s, function (err) {
+ if (err) { throw err }
+ t.ok(true, 'stream finished without error')
+ t.deepEquals(results, [{
+ name: 'cool',
+ version: '1.0.0',
+ description: 'desc',
+ maintainers: [
+ {username: 'x', email: 'a@b.c'},
+ {username: 'y', email: 'c@b.a'}
+ ],
+ keywords: ['a', 'b', 'c'],
+ date: date
+ }])
+ server.done()
+ t.done()
+ })
+})
+
+test('accepts a limit option', function (t) {
+ setup()
+ server.get(SEARCH + '?text=oo&size=3').once().reply(200, {
+ objects: [
+ { package: { name: 'cool', version: '1.0.0' } },
+ { package: { name: 'cool', version: '1.0.0' } }
+ ]
+ })
+ var results = 0
+ var s = esearch({
+ include: ['oo'],
+ limit: 3
+ })
+ s.on('data', function () { results++ })
+ finished(s, function (err) {
+ if (err) { throw err }
+ t.ok(true, 'request sent with correct size')
+ t.equal(results, 2, 'behaves fine with fewer results than size')
+ server.done()
+ t.done()
+ })
+})
+
+test('passes foo:bar syntax params directly', function (t) {
+ setup()
+ server.get(SEARCH + '?text=foo%3Abar&size=1').once().reply(200, {
+ objects: []
+ })
+ var s = esearch({
+ include: ['foo:bar'],
+ limit: 1
+ })
+ s.on('data', function () {})
+ finished(s, function (err) {
+ if (err) { throw err }
+ t.ok(true, 'request sent with correct params')
+ server.done()
+ t.done()
+ })
+})
+
+test('space-separates and URI-encodes multiple search params', function (t) {
+ setup()
+ server.get(SEARCH + '?text=foo%20bar%3Abaz%20quux%3F%3D&size=1').once().reply(200, {
+ objects: []
+ })
+ var s = esearch({
+ include: ['foo', 'bar:baz', 'quux?='],
+ limit: 1
+ })
+ s.on('data', function () {})
+ finished(s, function (err) {
+ if (err) { throw err }
+ t.ok(true, 'request sent with correct params')
+ server.done()
+ t.done()
+ })
+})
+
+test('cleanup', function (t) {
+ server.close()
+ cleanup()
+ t.done()
+})