From 2ceec39a4f10b3d61fcba1687f33f4afcb0b7f9e Mon Sep 17 00:00:00 2001 From: Vincent Klaiber Date: Mon, 3 Dec 2018 12:42:46 +0100 Subject: [PATCH] Add link to internal package --- lib/package-detail-view.js | 8 ++++-- spec/fixtures/package-internal/README.md | 0 spec/fixtures/package-internal/package.json | 4 +++ spec/package-detail-view-spec.coffee | 30 +++++++++++++++------ 4 files changed, 32 insertions(+), 10 deletions(-) create mode 100644 spec/fixtures/package-internal/README.md create mode 100644 spec/fixtures/package-internal/package.json diff --git a/lib/package-detail-view.js b/lib/package-detail-view.js index beaacc21..f0cd2a26 100644 --- a/lib/package-detail-view.js +++ b/lib/package-detail-view.js @@ -41,8 +41,12 @@ export default class PackageDetailView { const packageRepoClickHandler = (event) => { event.preventDefault() const repoUrl = this.packageManager.getRepositoryUrl(this.pack) - if (repoUrl) { - shell.openExternal(repoUrl) + if (typeof repoUrl === 'string') { + if (url.parse(repoUrl).pathname === '/atom/atom') { + shell.openExternal(`${repoUrl}/tree/master/packages/${this.pack.name}`) + } else { + shell.openExternal(repoUrl) + } } } this.refs.packageRepo.addEventListener('click', packageRepoClickHandler) diff --git a/spec/fixtures/package-internal/README.md b/spec/fixtures/package-internal/README.md new file mode 100644 index 00000000..e69de29b diff --git a/spec/fixtures/package-internal/package.json b/spec/fixtures/package-internal/package.json new file mode 100644 index 00000000..2dc03d28 --- /dev/null +++ b/spec/fixtures/package-internal/package.json @@ -0,0 +1,4 @@ +{ + "name": "package-internal", + "repository": "https://github.com/atom/atom" +} diff --git a/spec/package-detail-view-spec.coffee b/spec/package-detail-view-spec.coffee index 08e11dfa..a531a96d 100644 --- a/spec/package-detail-view-spec.coffee +++ b/spec/package-detail-view-spec.coffee @@ -1,5 +1,6 @@ fs = require 'fs' path = require 'path' +{shell} = require 'electron' PackageDetailView = require '../lib/package-detail-view' PackageManager = require '../lib/package-manager' @@ -19,14 +20,14 @@ describe "PackageDetailView", -> packageManager = new PackageManager view = null - loadPackageFromRemote = (opts) -> + loadPackageFromRemote = (packageName, opts) -> opts ?= {} packageManager.client = createClientSpy() packageManager.client.package.andCallFake (name, cb) -> - packageData = require(path.join(__dirname, 'fixtures', 'package-with-readme', 'package.json')) - packageData.readme = fs.readFileSync(path.join(__dirname, 'fixtures', 'package-with-readme', 'README.md'), 'utf8') + packageData = require(path.join(__dirname, 'fixtures', packageName, 'package.json')) + packageData.readme = fs.readFileSync(path.join(__dirname, 'fixtures', packageName, 'README.md'), 'utf8') cb(null, packageData) - view = new PackageDetailView({name: 'package-with-readme'}, new SettingsView(), packageManager, SnippetsProvider) + view = new PackageDetailView({name: packageName}, new SettingsView(), packageManager, SnippetsProvider) view.beforeShow(opts) it "renders a package when provided in `initialize`", -> @@ -46,7 +47,7 @@ describe "PackageDetailView", -> expect(packageManager.client.package.callCount).toBe(1) it "shows a loading message and calls out to atom.io when package metadata is missing", -> - loadPackageFromRemote() + loadPackageFromRemote('package-with-readme') expect(view.refs.loadingMessage).not.toBe(null) expect(view.refs.loadingMessage.classList.contains('hidden')).not.toBe(true) expect(packageManager.client.package).toHaveBeenCalled() @@ -81,13 +82,13 @@ describe "PackageDetailView", -> expect(view.element.querySelectorAll('.package-card').length).toBe(0) it "renders the README successfully after a call to the atom.io api", -> - loadPackageFromRemote() + loadPackageFromRemote('package-with-readme') expect(view.packageCard).toBeDefined() expect(view.packageCard.refs.packageName.textContent).toBe('package-with-readme') expect(view.element.querySelectorAll('.package-readme').length).toBe(1) it "renders the README successfully with sanitized html", -> - loadPackageFromRemote() + loadPackageFromRemote('package-with-readme') expect(view.element.querySelectorAll('.package-readme script').length).toBe(0) expect(view.element.querySelectorAll('.package-readme iframe').length).toBe(0) expect(view.element.querySelectorAll('.package-readme input[type="checkbox"][disabled]').length).toBe(2) @@ -106,5 +107,18 @@ describe "PackageDetailView", -> expect(view.element.querySelectorAll('.package-readme').length).toBe(1) it "should show 'Install' as the first breadcrumb by default", -> - loadPackageFromRemote() + loadPackageFromRemote('package-with-readme') expect(view.refs.breadcrumb.textContent).toBe('Install') + + it "should open repository url", -> + loadPackageFromRemote('package-with-readme') + spyOn(shell, 'openExternal') + view.refs.packageRepo.click() + expect(shell.openExternal).toHaveBeenCalledWith('https://github.com/example/package-with-readme') + + it "should open internal package repository url", -> + loadPackageFromRemote('package-internal') + spyOn(shell, 'openExternal') + view.refs.packageRepo.click() + expect(shell.openExternal).toHaveBeenCalledWith('https://github.com/atom/atom/tree/master/packages/package-internal') +