__PackageName__ = require '../lib/__package-name__'

# Use the command `window:run-package-specs` (cmd-alt-ctrl-p) to run specs.
#
# To run a specific `it` or `describe` block add an `f` to the front (e.g. `fit`
# or `fdescribe`). Remove the `f` to unfocus the block.

describe "__PackageName__", ->
  [workspaceElement, activationPromise] = []

  beforeEach ->
    workspaceElement = atom.views.getView(atom.workspace)
    activationPromise = atom.packages.activatePackage('__package-name__')

  describe "when the __package-name__:toggle event is triggered", ->
    it "hides and shows the modal panel", ->
      # Before the activation event the view is not on the DOM, and no panel
      # has been created
      expect(workspaceElement.querySelector('.__package-name__')).not.toExist()

      # This is an activation event, triggering it will cause the package to be
      # activated.
      atom.commands.dispatch workspaceElement, '__package-name__:toggle'

      waitsForPromise ->
        activationPromise

      runs ->
        expect(workspaceElement.querySelector('.__package-name__')).toExist()

        __packageName__Element = workspaceElement.querySelector('.__package-name__')
        expect(__packageName__Element).toExist()

        __packageName__Panel = atom.workspace.panelForItem(__packageName__Element)
        expect(__packageName__Panel.isVisible()).toBe true
        atom.commands.dispatch workspaceElement, '__package-name__:toggle'
        expect(__packageName__Panel.isVisible()).toBe false

    it "hides and shows the view", ->
      # This test shows you an integration test testing at the view level.

      # Attaching the workspaceElement to the DOM is required to allow the
      # `toBeVisible()` matchers to work. Anything testing visibility or focus
      # requires that the workspaceElement is on the DOM. Tests that attach the
      # workspaceElement to the DOM are generally slower than those off DOM.
      jasmine.attachToDOM(workspaceElement)

      expect(workspaceElement.querySelector('.__package-name__')).not.toExist()

      # This is an activation event, triggering it causes the package to be
      # activated.
      atom.commands.dispatch workspaceElement, '__package-name__:toggle'

      waitsForPromise ->
        activationPromise

      runs ->
        # Now we can test for view visibility
        __packageName__Element = workspaceElement.querySelector('.__package-name__')
        expect(__packageName__Element).toBeVisible()
        atom.commands.dispatch workspaceElement, '__package-name__:toggle'
        expect(__packageName__Element).not.toBeVisible()
