mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-09-21 07:58:04 +03:00
155 lines
5.7 KiB
CoffeeScript
155 lines
5.7 KiB
CoffeeScript
PackageConfigPanel = require 'package-config-panel'
|
|
packageManager = require 'package-manager'
|
|
_ = require 'underscore'
|
|
|
|
describe "PackageConfigPanel", ->
|
|
[panel, configObserver] = []
|
|
|
|
beforeEach ->
|
|
installedPackages = [
|
|
{
|
|
name: 'p1'
|
|
version: '3.2.1'
|
|
}
|
|
{
|
|
name: 'p2'
|
|
version: '1.2.3'
|
|
}
|
|
{
|
|
name: 'p3'
|
|
version: '5.8.5'
|
|
}
|
|
]
|
|
|
|
availablePackages = [
|
|
{
|
|
name: 'p4'
|
|
version: '3.2.1'
|
|
homepage: 'http://p4.io'
|
|
}
|
|
{
|
|
name: 'p5'
|
|
version: '1.2.3'
|
|
repository: url: 'http://github.com/atom/p5.git'
|
|
bugs: url: 'http://github.com/atom/p5/issues'
|
|
}
|
|
{
|
|
name: 'p6'
|
|
version: '5.8.5'
|
|
}
|
|
]
|
|
|
|
spyOn(packageManager, 'getAvailable').andCallFake (callback) ->
|
|
callback(null, availablePackages)
|
|
spyOn(packageManager, 'uninstall').andCallFake (pack, callback) ->
|
|
_.remove(installedPackages, pack)
|
|
callback()
|
|
spyOn(packageManager, 'install').andCallFake (pack, callback) ->
|
|
installedPackages.push(pack)
|
|
callback()
|
|
|
|
spyOn(atom, 'getAvailablePackageMetadata').andReturn(installedPackages)
|
|
spyOn(atom, 'resolvePackagePath').andCallFake (name) ->
|
|
if _.contains(_.pluck(installedPackages, 'name'), name)
|
|
"/tmp/atom-packages/#{name}"
|
|
|
|
configObserver = jasmine.createSpy("configObserver")
|
|
observeSubscription = config.observe('core.disabledPackages', configObserver)
|
|
config.set('core.disabledPackages', ['p1', 'p3'])
|
|
configObserver.reset()
|
|
jasmine.unspy(window, "setTimeout")
|
|
panel = new PackageConfigPanel
|
|
|
|
installedCallback = jasmine.createSpy("installed packages callback")
|
|
panel.packageEventEmitter.on("installed-packages-loaded", installedCallback)
|
|
waitsFor -> installedCallback.callCount > 0
|
|
|
|
describe 'Installed tab', ->
|
|
it "lists all installed packages with a link to enable or disable the package", ->
|
|
p1View = panel.installed.find("[name='p1']").view()
|
|
expect(p1View).toExist()
|
|
expect(p1View.enableToggle.find('a').text()).toBe 'Enable'
|
|
|
|
p2View = panel.installed.find("[name='p2']").view()
|
|
expect(p2View).toExist()
|
|
expect(p2View.enableToggle.find('a').text()).toBe 'Disable'
|
|
|
|
p3View = panel.installed.find("[name='p3']").view()
|
|
expect(p3View).toExist()
|
|
expect(p3View.enableToggle.find('a').text()).toBe 'Enable'
|
|
|
|
describe "when the core.disabledPackages array changes", ->
|
|
it "updates the checkboxes for newly disabled / enabled packages", ->
|
|
config.set('core.disabledPackages', ['p2'])
|
|
p1View = panel.installed.find("[name='p1']").view()
|
|
expect(p1View.enableToggle.find('a').text()).toBe 'Disable'
|
|
|
|
p2View = panel.installed.find("[name='p2']").view()
|
|
expect(p2View.enableToggle.find('a').text()).toBe 'Enable'
|
|
|
|
p3View = panel.installed.find("[name='p3']").view()
|
|
expect(p3View.enableToggle.find('a').text()).toBe 'Disable'
|
|
|
|
describe "when the disable link is clicked", ->
|
|
it "adds the package name to the disabled packages array", ->
|
|
p2View = panel.installed.find("[name='p2']").view()
|
|
p2View.enableToggle.find('a').click()
|
|
expect(configObserver).toHaveBeenCalledWith(['p1', 'p3', 'p2'])
|
|
|
|
describe "when the enable link is clicked", ->
|
|
it "removes the package name from the disabled packages array", ->
|
|
p3View = panel.installed.find("[name='p3']").view()
|
|
p3View.enableToggle.find('a').click()
|
|
expect(configObserver).toHaveBeenCalledWith(['p1'])
|
|
|
|
describe "when Uninstall is clicked", ->
|
|
it "removes the package from the tab", ->
|
|
expect(panel.installed.find("[name='p1']")).toExist()
|
|
p1View = panel.installed.find("[name='p1']").view()
|
|
expect(p1View.defaultAction.text()).toBe 'Uninstall'
|
|
p1View.defaultAction.click()
|
|
expect(panel.installed.find("[name='p1']")).not.toExist()
|
|
|
|
describe 'Available tab', ->
|
|
it 'lists all available packages', ->
|
|
panel.availableLink.click()
|
|
panel.attachToDom()
|
|
|
|
expect(panel.available.packagesArea.children('.panel').length).toBe 3
|
|
p4View = panel.available.packagesArea.children('.panel:eq(0)').view()
|
|
p5View = panel.available.packagesArea.children('.panel:eq(1)').view()
|
|
p6View = panel.available.packagesArea.children('.panel:eq(2)').view()
|
|
|
|
expect(p4View.name.text()).toBe 'p4'
|
|
expect(p5View.name.text()).toBe 'p5'
|
|
expect(p6View.name.text()).toBe 'p6'
|
|
|
|
expect(p4View.version.text()).toBe '3.2.1'
|
|
expect(p5View.version.text()).toBe '1.2.3'
|
|
expect(p6View.version.text()).toBe '5.8.5'
|
|
|
|
p4View.dropdownButton.click()
|
|
expect(p4View.homepage).toBeVisible()
|
|
expect(p4View.homepage.find('a').attr('href')).toBe 'http://p4.io'
|
|
expect(p4View.issues).toBeHidden()
|
|
|
|
p5View.dropdownButton.click()
|
|
expect(p5View.homepage).toBeVisible()
|
|
expect(p5View.homepage.find('a').attr('href')).toBe 'http://github.com/atom/p5'
|
|
expect(p5View.issues).toBeVisible()
|
|
expect(p5View.issues.find('a').attr('href')).toBe 'http://github.com/atom/p5/issues'
|
|
|
|
p6View.dropdownButton.click()
|
|
expect(p6View.homepage).toBeHidden()
|
|
expect(p6View.issues).toBeHidden()
|
|
|
|
describe "when Install is clicked", ->
|
|
it "adds the package to the Installed tab", ->
|
|
expect(panel.installed.find("[name='p4']")).not.toExist()
|
|
expect(panel.available.find("[name='p4']")).toExist()
|
|
p4View = panel.available.find("[name='p4']").view()
|
|
expect(p4View.defaultAction.text()).toBe 'Install'
|
|
p4View.defaultAction.click()
|
|
expect(panel.installed.find("[name='p4']")).toExist()
|
|
expect(p4View.defaultAction.text()).toBe 'Uninstall'
|