describe("hx-confirm attribute", function () { var confirm beforeEach(function () { this.server = makeServer(); confirm = sinon.stub(window, "confirm"); clearWorkArea(); }); afterEach(function () { this.server.restore(); confirm.restore() clearWorkArea(); }); it('prompts using window.confirm when hx-confirm is set', function () { this.server.respondWith("GET", "/test", "Clicked!"); confirm.returns(true); var btn = make('') btn.click(); confirm.calledOnce.should.equal(true); this.server.respond(); btn.innerHTML.should.equal("Clicked!"); }) it('stops the request if confirm is cancelled', function () { this.server.respondWith("GET", "/test", "Clicked!"); confirm.returns(false); var btn = make('') btn.click(); confirm.calledOnce.should.equal(true); this.server.respond(); btn.innerHTML.should.equal("Click Me!"); }) it('uses the value of hx-confirm as the prompt', function () { this.server.respondWith("GET", "/test", "Clicked!"); confirm.returns(false); var btn = make('') btn.click(); confirm.firstCall.args[0].should.equal("Sure?"); this.server.respond(); btn.innerHTML.should.equal("Click Me!"); }) it('should prompt when htmx:confirm handler calls issueRequest', function () { try { var btn = make('') var handler = htmx.on("htmx:confirm", function (evt) { evt.preventDefault(); evt.detail.issueRequest(); }); btn.click(); confirm.calledOnce.should.equal(true); } finally { htmx.off("htmx:confirm", handler); } }) it('should include the question in htmx:confirm event', function () { var stub = sinon.stub(); try { var btn = make('') var handler = htmx.on("htmx:confirm", stub); btn.click(); stub.calledOnce.should.equal(true); stub.firstCall.args[0].detail.should.have.property("question", "Surely?"); } finally { htmx.off("htmx:confirm", handler); } }) it('should allow skipping built-in window.confirm when using issueRequest', function () { this.server.respondWith("GET", "/test", "Clicked!"); try { var btn = make('') var handler = htmx.on("htmx:confirm", function (evt) { evt.detail.question.should.equal("Sure?"); evt.preventDefault(); evt.detail.issueRequest(true); }); btn.click(); confirm.called.should.equal(false); this.server.respond(); btn.innerHTML.should.equal("Clicked!"); } finally { htmx.off("htmx:confirm", handler); } }) it('should allow skipping built-in window.confirm when using issueRequest', function () { this.server.respondWith("GET", "/test", "Clicked!"); try { var btn = make('') var handler = htmx.on("htmx:confirm", function (evt) { evt.detail.question.should.equal("Sure?"); evt.preventDefault(); evt.detail.issueRequest(true); }); btn.click(); confirm.called.should.equal(false); this.server.respond(); btn.innerHTML.should.equal("Clicked!"); } finally { htmx.off("htmx:confirm", handler); } }) it('should allow htmx:confirm even when no hx-confirm is set', function () { this.server.respondWith("GET", "/test", "Clicked!"); try { var btn = make('') var handler = htmx.on("htmx:confirm", function (evt) { evt.detail.should.have.property("question", null); evt.preventDefault(); evt.detail.issueRequest(); }); btn.click(); confirm.called.should.equal(false); // no hx-confirm means no window.confirm this.server.respond(); btn.innerHTML.should.equal("Clicked!"); } finally { htmx.off("htmx:confirm", handler); } }) });