diff --git a/lib/repo.js b/lib/repo.js index 7b415ee234289..f19eb67180eb0 100644 --- a/lib/repo.js +++ b/lib/repo.js @@ -34,9 +34,9 @@ const getRepo = async pkg => { pkgid: pkg }) } - + const info = hostedFromMani(mani) - const url = info ? info.browse() : unknownHostedUrl(rurl) + const url = info ? info.browse(r.directory) : unknownHostedUrl(rurl) if (!url) { throw Object.assign(new Error('no repository: could not get url'), { diff --git a/test/tap/repo.js b/test/tap/repo.js index 3e97fdeaed228..15577a584b72d 100644 --- a/test/tap/repo.js +++ b/test/tap/repo.js @@ -168,6 +168,79 @@ test('npm repo test-repo-url-ssh - non-github (ssh://)', function (t) { }) }) +/* ----- Test by new mock registry: BEGIN ----- */ + +const Tacks = require('tacks') +const mockTar = require('../util/mock-tarball.js') + +const { Dir, File } = Tacks +const testDir = path.join(__dirname, path.basename(__filename, '.js')) + +let server +test('setup mocked registry', t => { + common.fakeRegistry.compat({}, (err, s) => { + t.ifError(err, 'registry mocked successfully') + server = s + t.end() + }) +}) + +test('npm repo test-repo-with-directory', t => { + const fixture = new Tacks(Dir({ + 'package.json': File({}) + })) + fixture.create(testDir) + const packument = { + name: 'test-repo-with-directory', + 'dist-tags': { latest: '1.2.3' }, + versions: { + '1.2.3': { + name: 'test-repo-with-directory', + version: '1.2.3', + dist: { + tarball: `${server.registry}/test-repo-with-directory/-/test-repo-with-directory-1.2.3.tgz` + }, + repository: { + type: 'git', + url: 'git+https://github.com/foo/test-repo-with-directory.git', + directory: 'some/directory' + } + } + } + } + server.get('/test-repo-with-directory').reply(200, packument) + return mockTar({ + 'package.json': JSON.stringify({ + name: 'test-repo-with-directory', + version: '1.2.3' + }) + }).then(tarball => { + server.get('/test-repo-with-directory/-/test-repo-with-directory-1.2.3.tgz').reply(200, tarball) + return common.npm([ + 'repo', 'test-repo-with-directory', + '--registry=' + server.registry, + '--loglevel=silent', + '--browser=' + fakeBrowser + ]) + }).then(([code, stdout, stderr]) => { + t.equal(code, 0) + t.comment(stdout) + t.comment(stderr) + + const res = fs.readFileSync(outFile, 'ascii') + t.equal(res, 'https://github.com/foo/test-repo-with-directory/tree/master/some%2Fdirectory\n') + rimraf.sync(outFile) + }) +}) + +test('cleanup mocked registry', t => { + server.close() + rimraf.sync(testDir) + t.end() +}) + +/* ----- Test by new mock registry: END ----- */ + test('cleanup', function (t) { fs.unlinkSync(fakeBrowser) t.pass('cleaned up')