Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'test/lib/repo.js')
-rw-r--r--test/lib/repo.js190
1 files changed, 190 insertions, 0 deletions
diff --git a/test/lib/repo.js b/test/lib/repo.js
new file mode 100644
index 000000000..a9cddc4eb
--- /dev/null
+++ b/test/lib/repo.js
@@ -0,0 +1,190 @@
+const t = require('tap')
+
+const requireInject = require('require-inject')
+const pacote = {
+ manifest: async (spec, options) => {
+ return spec === 'norepo' ? {
+ name: 'norepo',
+ version: '1.2.3'
+ }
+
+ : spec === 'repoobbj-nourl' ? {
+ name: 'repoobj-nourl',
+ repository: { no: 'url' }
+ }
+
+ : spec === 'hostedgit' ? {
+ repository: 'git://github.com/foo/hostedgit'
+ }
+ : spec === 'hostedgitat' ? {
+ repository: 'git@github.com:foo/hostedgitat'
+ }
+ : spec === 'hostedssh' ? {
+ repository: 'ssh://git@github.com/foo/hostedssh'
+ }
+ : spec === 'hostedgitssh' ? {
+ repository: 'git+ssh://git@github.com/foo/hostedgitssh'
+ }
+ : spec === 'hostedgithttp' ? {
+ repository: 'git+http://github.com/foo/hostedgithttp'
+ }
+ : spec === 'hostedgithttps' ? {
+ repository: 'git+https://github.com/foo/hostedgithttps'
+ }
+
+ : spec === 'hostedgitobj' ? {
+ repository: { url: 'git://github.com/foo/hostedgitobj' }
+ }
+ : spec === 'hostedgitatobj' ? {
+ repository: { url: 'git@github.com:foo/hostedgitatobj' }
+ }
+ : spec === 'hostedsshobj' ? {
+ repository: { url: 'ssh://git@github.com/foo/hostedsshobj' }
+ }
+ : spec === 'hostedgitsshobj' ? {
+ repository: { url: 'git+ssh://git@github.com/foo/hostedgitsshobj' }
+ }
+ : spec === 'hostedgithttpobj' ? {
+ repository: { url: 'git+http://github.com/foo/hostedgithttpobj' }
+ }
+ : spec === 'hostedgithttpsobj' ? {
+ repository: { url: 'git+https://github.com/foo/hostedgithttpsobj' }
+ }
+
+ : spec === 'unhostedgit' ? {
+ repository: 'git://gothib.com/foo/unhostedgit'
+ }
+ : spec === 'unhostedgitat' ? {
+ repository: 'git@gothib.com:foo/unhostedgitat'
+ }
+ : spec === 'unhostedssh' ? {
+ repository: 'ssh://git@gothib.com/foo/unhostedssh'
+ }
+ : spec === 'unhostedgitssh' ? {
+ repository: 'git+ssh://git@gothib.com/foo/unhostedgitssh'
+ }
+ : spec === 'unhostedgithttp' ? {
+ repository: 'git+http://gothib.com/foo/unhostedgithttp'
+ }
+ : spec === 'unhostedgithttps' ? {
+ repository: 'git+https://gothib.com/foo/unhostedgithttps'
+ }
+
+ : spec === 'unhostedgitobj' ? {
+ repository: { url: 'git://gothib.com/foo/unhostedgitobj' }
+ }
+ : spec === 'unhostedgitatobj' ? {
+ repository: { url: 'git@gothib.com:foo/unhostedgitatobj' }
+ }
+ : spec === 'unhostedsshobj' ? {
+ repository: { url: 'ssh://git@gothib.com/foo/unhostedsshobj' }
+ }
+ : spec === 'unhostedgitsshobj' ? {
+ repository: { url: 'git+ssh://git@gothib.com/foo/unhostedgitsshobj' }
+ }
+ : spec === 'unhostedgithttpobj' ? {
+ repository: { url: 'git+http://gothib.com/foo/unhostedgithttpobj' }
+ }
+ : spec === 'unhostedgithttpsobj' ? {
+ repository: { url: 'git+https://gothib.com/foo/unhostedgithttpsobj' }
+ }
+
+ : spec === '.' ? {
+ name: 'thispkg',
+ version: '1.2.3',
+ repository: 'https://example.com/thispkg.git'
+ }
+ : null
+ }
+}
+
+// keep a tally of which urls got opened
+const opened = {}
+const openUrl = (url, errMsg, cb) => {
+ opened[url] = opened[url] || 0
+ opened[url]++
+ process.nextTick(cb)
+}
+
+const repo = requireInject('../../lib/repo.js', {
+ pacote,
+ '../../lib/utils/open-url.js': openUrl
+})
+
+t.test('completion', t => {
+ repo.completion({}, (er, res) => {
+ t.equal(er, null)
+ t.same(res, [])
+ t.end()
+ })
+})
+
+t.test('open repo urls', t => {
+ const expect = {
+ hostedgit: 'https://github.com/foo/hostedgit',
+ hostedgitat: 'https://github.com/foo/hostedgitat',
+ hostedssh: 'https://github.com/foo/hostedssh',
+ hostedgitssh: 'https://github.com/foo/hostedgitssh',
+ hostedgithttp: 'https://github.com/foo/hostedgithttp',
+ hostedgithttps: 'https://github.com/foo/hostedgithttps',
+ hostedgitobj: 'https://github.com/foo/hostedgitobj',
+ hostedgitatobj: 'https://github.com/foo/hostedgitatobj',
+ hostedsshobj: 'https://github.com/foo/hostedsshobj',
+ hostedgitsshobj: 'https://github.com/foo/hostedgitsshobj',
+ hostedgithttpobj: 'https://github.com/foo/hostedgithttpobj',
+ hostedgithttpsobj: 'https://github.com/foo/hostedgithttpsobj',
+ unhostedgit: 'https://gothib.com/foo/unhostedgit',
+ unhostedssh: 'https://gothib.com/foo/unhostedssh',
+ unhostedgitssh: 'https://gothib.com/foo/unhostedgitssh',
+ unhostedgithttp: 'http://gothib.com/foo/unhostedgithttp',
+ unhostedgithttps: 'https://gothib.com/foo/unhostedgithttps',
+ unhostedgitobj: 'https://gothib.com/foo/unhostedgitobj',
+ unhostedsshobj: 'https://gothib.com/foo/unhostedsshobj',
+ unhostedgitsshobj: 'https://gothib.com/foo/unhostedgitsshobj',
+ unhostedgithttpobj: 'http://gothib.com/foo/unhostedgithttpobj',
+ unhostedgithttpsobj: 'https://gothib.com/foo/unhostedgithttpsobj',
+ '.': 'https://example.com/thispkg'
+ }
+ const keys = Object.keys(expect)
+ t.plan(keys.length)
+ keys.forEach(pkg => {
+ t.test(pkg, t => {
+ repo([pkg], (er) => {
+ if (er)
+ throw er
+ const url = expect[pkg]
+ t.equal(opened[url], 1, url, {opened})
+ t.end()
+ })
+ })
+ })
+})
+
+t.test('fail if cannot figure out repo url', t => {
+ const cases = [
+ 'norepo',
+ 'repoobbj-nourl',
+ 'unhostedgitat',
+ 'unhostedgitatobj'
+ ]
+
+ t.plan(cases.length)
+
+ cases.forEach(pkg => {
+ t.test(pkg, t => {
+ repo([pkg], er => {
+ t.match(er, { pkgid: pkg })
+ t.end()
+ })
+ })
+ })
+})
+
+t.test('open default package if none specified', t => {
+ repo([], (er) => {
+ if (er)
+ throw er
+ t.equal(opened['https://example.com/thispkg'], 2, 'opened expected url', {opened})
+ t.end()
+ })
+})