Skip to content
This repository has been archived by the owner on Dec 15, 2022. It is now read-only.

Add link to internal package #1095

Merged
merged 1 commit into from Jan 10, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 6 additions & 2 deletions lib/package-detail-view.js
Expand Up @@ -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)
Expand Down
Empty file.
4 changes: 4 additions & 0 deletions spec/fixtures/package-internal/package.json
@@ -0,0 +1,4 @@
{
"name": "package-internal",
"repository": "https://github.com/atom/atom"
}
30 changes: 22 additions & 8 deletions 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'
Expand All @@ -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`", ->
Expand All @@ -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()
Expand Down Expand Up @@ -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)
Expand All @@ -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')