 describe "bootbox.dialog", ->
   beforeEach ->
-    invoke = (s, method) => @dialog.find(s)[method]()
-
-    @text   = (s) -> invoke s, "text"
-    @html   = (s) -> invoke s, "html"
-    @exists = (s) -> @dialog.find(s).length isnt 0
+    @find   = (s)    -> @dialog.find s
+    @exists = (s)    -> @find(s).length isnt 0
+    @class  = (s, c) -> @find(s).hasClass(c)
+    @invoke = (s, m) -> @find(s)[m]()
+    @text   = (s)    -> @invoke s, "text"
+    @html   = (s)    -> @invoke s, "html"
 
   describe "invalid usage tests", ->
 

    it "adds the fade class to the dialog", ->
      expect(@dialog.hasClass("fade")).to.be.true

    it "show the expected message", ->
      expect(@text(".bootbox-body")).to.equal "test"

    it "does not have a header", ->


    it "has a backdrop", ->
      expect(@dialog.next(".modal-backdrop")).to.be.ok

  describe "when creating dialog with a button", ->
    beforeEach ->
      @create = (button = {}) =>
        @dialog = bootbox.dialog
          message: "test"
          buttons:
            one: button

    describe "when the button has no label", ->

      it "throws an error", ->
        expect(@create).to.throw /button with key one requires a label/

    describe "when the button has no callback", ->
      beforeEach ->
        @create
          label: "My Label"

      it "shows a footer", ->
        expect(@exists(".modal-footer")).to.be.ok

      it "shows one button", ->
        expect(@find(".btn").length).to.equal 1

      it "shows the correct button text", ->
        expect(@text(".btn")).to.equal "My Label"

      it "applies the correct button class", ->
        expect(@class(".btn", "btn-primary")).to.be.true

    describe "when the button has a label and callback", ->
      beforeEach ->
        @callback = sinon.spy()

        @create
          label: "Another Label"
          callback: @callback

        @hidden = sinon.spy @dialog, "modal"

      it "shows a footer", ->
        expect(@exists(".modal-footer")).to.be.ok

      it "shows the correct button text", ->
        expect(@text(".btn")).to.equal "Another Label"

      describe "when dismissing the dialog by clicking OK", ->
        beforeEach ->
          @dialog.find(".btn-primary").trigger "click"

        it "should invoke the callback", ->
          expect(@callback).to.have.been.called

        it "should hide the modal", ->
          expect(@hidden).to.have.been.calledWithExactly "hide"
