describe("HTMx AJAX Tests", function(){ beforeEach(function() { this.server = makeServer(); clearWorkArea(); }); afterEach(function() { this.server.restore(); clearWorkArea(); }); // bootstrap test it('issues a GET request on click and swaps content', function() { this.server.respondWith("GET", "/test", "Clicked!"); var btn = make('') btn.click(); this.server.respond(); btn.innerHTML.should.equal("Clicked!"); }); it('processes inner content properly', function() { this.server.respondWith("GET", "/test", 'Click Me'); this.server.respondWith("GET", "/test2", "Clicked!"); var div = make('
') div.click(); this.server.respond(); div.innerHTML.should.equal('Click Me'); var a = div.querySelector('a'); a.click(); this.server.respond(); a.innerHTML.should.equal('Clicked!'); }); it('handles swap outerHTML properly', function() { this.server.respondWith("GET", "/test", 'Click Me'); this.server.respondWith("GET", "/test2", "Clicked!"); var div = make('
') div.click(); should.equal(byId("d1"), div); this.server.respond(); should.equal(byId("d1"), null); byId("a1").click(); this.server.respond(); byId("a1").innerHTML.should.equal('Clicked!'); }); it('handles prependBefore properly', function() { var i = 0; this.server.respondWith("GET", "/test", function(xhr){ i++; xhr.respond(200, {}, '' + i + ''); }); this.server.respondWith("GET", "/test2", "*"); var div = make('
*
') var parent = div.parentElement; div.click(); this.server.respond(); div.innerText.should.equal("*"); removeWhiteSpace(parent.innerText).should.equal("1*"); byId("a1").click(); this.server.respond(); removeWhiteSpace(parent.innerText).should.equal("**"); div.click(); this.server.respond(); div.innerText.should.equal("*"); removeWhiteSpace(parent.innerText).should.equal("*2*"); byId("a2").click(); this.server.respond(); removeWhiteSpace(parent.innerText).should.equal("***"); }); it('handles prepend properly', function() { var i = 0; this.server.respondWith("GET", "/test", function(xhr){ i++; xhr.respond(200, {}, '' + i + ''); }); this.server.respondWith("GET", "/test2", "*"); var div = make('
*
') div.click(); this.server.respond(); div.innerText.should.equal("1*"); byId("a1").click(); this.server.respond(); div.innerText.should.equal("**"); div.click(); this.server.respond(); div.innerText.should.equal("2**"); byId("a2").click(); this.server.respond(); div.innerText.should.equal("***"); }); it('handles prepend properly with no initial content', function() { var i = 0; this.server.respondWith("GET", "/test", function(xhr){ i++; xhr.respond(200, {}, '' + i + ''); }); this.server.respondWith("GET", "/test2", "*"); var div = make('
') div.click(); this.server.respond(); div.innerText.should.equal("1"); byId("a1").click(); this.server.respond(); div.innerText.should.equal("*"); div.click(); this.server.respond(); div.innerText.should.equal("2*"); byId("a2").click(); this.server.respond(); div.innerText.should.equal("**"); }); it('handles appendAfter properly', function() { var i = 0; this.server.respondWith("GET", "/test", function(xhr){ i++; xhr.respond(200, {}, '' + i + ''); }); this.server.respondWith("GET", "/test2", "*"); var div = make('
*
') var parent = div.parentElement; div.click(); this.server.respond(); div.innerText.should.equal("*"); removeWhiteSpace(parent.innerText).should.equal("*1"); byId("a1").click(); this.server.respond(); removeWhiteSpace(parent.innerText).should.equal("**"); div.click(); this.server.respond(); div.innerText.should.equal("*"); removeWhiteSpace(parent.innerText).should.equal("*2*"); byId("a2").click(); this.server.respond(); removeWhiteSpace(parent.innerText).should.equal("***"); }); it('handles append properly', function() { var i = 0; this.server.respondWith("GET", "/test", function(xhr){ i++; xhr.respond(200, {}, '' + i + ''); }); this.server.respondWith("GET", "/test2", "*"); var div = make('
*
') div.click(); this.server.respond(); div.innerText.should.equal("*1"); byId("a1").click(); this.server.respond(); div.innerText.should.equal("**"); div.click(); this.server.respond(); div.innerText.should.equal("**2"); byId("a2").click(); this.server.respond(); div.innerText.should.equal("***"); }); it('handles append properly with no initial content', function() { var i = 0; this.server.respondWith("GET", "/test", function(xhr){ i++; xhr.respond(200, {}, '' + i + ''); }); this.server.respondWith("GET", "/test2", "*"); var div = make('
') div.click(); this.server.respond(); div.innerText.should.equal("1"); byId("a1").click(); this.server.respond(); div.innerText.should.equal("*"); div.click(); this.server.respond(); div.innerText.should.equal("*2"); byId("a2").click(); this.server.respond(); div.innerText.should.equal("**"); }); it('handles hx-target properly', function() { this.server.respondWith("GET", "/test", "Clicked!"); var btn = make(''); var target = make('Initial'); btn.click(); target.innerHTML.should.equal("Initial"); this.server.respond(); target.innerHTML.should.equal("Clicked!"); }); it('handles 204 NO CONTENT responses properly', function() { this.server.respondWith("GET", "/test", [204, {}, "No Content!"]); var btn = make(''); btn.click(); btn.innerHTML.should.equal("Click Me!"); this.server.respond(); btn.innerHTML.should.equal("Click Me!"); }); it('handles hx-trigger with non-default value', function() { this.server.respondWith("GET", "/test", "Focused!"); var btn = make(''); btn.focus(); btn.innerHTML.should.equal("Focus Me!"); this.server.respond(); btn.innerHTML.should.equal("Focused!"); }); it('handles hx-trigger with load event', function() { this.server.respondWith("GET", "/test", "Loaded!"); var div = make('
Load Me!
'); div.innerHTML.should.equal("Load Me!"); this.server.respond(); div.innerHTML.should.equal("Loaded!"); }); it('sets the content type of the request properly', function (done) { this.server.respondWith("GET", "/test", function(xhr){ xhr.respond(200, {}, "done"); xhr.overriddenMimeType.should.equal("text/html"); done(); }); var div = make('
Click Me!
'); div.click(); this.server.respond(); }); it('doesnt issue two requests when clicked twice before response', function() { var i = 1; this.server.respondWith("GET", "/test", function (xhr) { xhr.respond(200, {}, "click " + i); i++ }); var div = make('
'); div.click(); div.click(); this.server.respond(); div.innerHTML.should.equal("click 1"); }); })