describe("HTMx AJAX Tests", function(){
beforeEach(function() {
this.server = sinon.fakeServer.create();
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!");
let 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!");
let div = make('
')
div.click();
this.server.respond();
div.innerHTML.should.equal('Click Me');
let 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!");
let 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 prepend properly', function()
{
let i = 0;
this.server.respondWith("GET", "/test", function(xhr){
i++;
xhr.respond(200, {}, '' + i + '');
});
this.server.respondWith("GET", "/test2", "*");
let 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()
{
let i = 0;
this.server.respondWith("GET", "/test", function(xhr){
i++;
xhr.respond(200, {}, '' + i + '');
});
this.server.respondWith("GET", "/test2", "*");
let 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', function()
{
let i = 0;
this.server.respondWith("GET", "/test", function(xhr){
i++;
xhr.respond(200, {}, '' + i + '');
});
this.server.respondWith("GET", "/test2", "*");
let 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()
{
let i = 0;
this.server.respondWith("GET", "/test", function(xhr){
i++;
xhr.respond(200, {}, '' + i + '');
});
this.server.respondWith("GET", "/test2", "*");
let 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!");
let btn = make('');
let 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!"]);
let 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!");
let 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!");
let div = make('Load Me!
');
div.innerHTML.should.equal("Load Me!");
this.server.respond();
div.innerHTML.should.equal("Loaded!");
});
})