describe('hx-include attribute', function() {
beforeEach(function() {
this.server = makeServer()
clearWorkArea()
})
afterEach(function() {
this.server.restore()
clearWorkArea()
})
it('By default an input includes itself', function() {
this.server.respondWith('POST', '/include', function(xhr) {
var params = getParameters(xhr)
params.i1.should.equal('test')
xhr.respond(200, {}, 'Clicked!')
})
var div = make('
')
var input = byId('i1')
input.click()
this.server.respond()
div.innerHTML.should.equal('Clicked!')
})
it('non-GET includes closest form', function() {
this.server.respondWith('POST', '/include', function(xhr) {
var params = getParameters(xhr)
params.i1.should.equal('test')
xhr.respond(200, {}, 'Clicked!')
})
var div = make('')
var input = byId('d1')
input.click()
this.server.respond()
div.innerHTML.should.equal('Clicked!')
})
it('non-GET includes closest form and overrides values included that exist outside the form', function() {
this.server.respondWith('POST', '/include', function(xhr) {
var params = getParameters(xhr)
params.i1.should.equal('test')
xhr.respond(200, {}, 'Clicked!')
})
var div = make('
' +
'' +
'' +
'')
var input = byId('d1')
input.click()
this.server.respond()
div.innerHTML.should.equal('Clicked!')
})
it('GET does not include closest form by default', function() {
this.server.respondWith('GET', '/include', function(xhr) {
var params = getParameters(xhr)
should.equal(params.i1, undefined)
xhr.respond(200, {}, 'Clicked!')
})
var div = make('')
var input = byId('d1')
input.click()
this.server.respond()
div.innerHTML.should.equal('Clicked!')
})
it('Single input not included twice when in form', function() {
this.server.respondWith('POST', '/include', function(xhr) {
var params = getParameters(xhr)
params.i1.should.equal('test')
xhr.respond(200, {}, 'Clicked!')
})
var div = make('')
var input = byId('i1')
input.click()
this.server.respond()
div.innerHTML.should.equal('Clicked!')
})
it('Two inputs are included twice when they have the same name', function() {
this.server.respondWith('POST', '/include', function(xhr) {
var params = getParameters(xhr)
params.i1.should.deep.equal(['test', 'test2'])
xhr.respond(200, {}, 'Clicked!')
})
var div = make('
' +
'' +
'' +
'
')
var input = byId('i1')
input.click()
this.server.respond()
div.innerHTML.should.equal('Clicked!')
})
it('Two inputs are included twice when in form when they have the same name', function() {
this.server.respondWith('POST', '/include', function(xhr) {
var params = getParameters(xhr)
params.i1.should.deep.equal(['test', 'test2'])
xhr.respond(200, {}, 'Clicked!')
})
var div = make('')
var input = byId('i1')
input.click()
this.server.respond()
div.innerHTML.should.equal('Clicked!')
})
it('Input not included twice when it explicitly refers to parent form', function() {
this.server.respondWith('POST', '/include', function(xhr) {
var params = getParameters(xhr)
params.i1.should.equal('test')
xhr.respond(200, {}, 'Clicked!')
})
var div = make('')
var input = byId('i1')
input.click()
this.server.respond()
div.innerHTML.should.equal('Clicked!')
})
it('Input can be referred to externally', function() {
this.server.respondWith('POST', '/include', function(xhr) {
var params = getParameters(xhr)
params.i1.should.equal('test')
xhr.respond(200, {}, 'Clicked!')
})
make('')
var div = make('')
div.click()
this.server.respond()
div.innerHTML.should.equal('Clicked!')
})
it('Two inputs can be referred to externally', function() {
this.server.respondWith('POST', '/include', function(xhr) {
var params = getParameters(xhr)
params.i1.should.equal('test')
params.i2.should.equal('test')
xhr.respond(200, {}, 'Clicked!')
})
make('')
make('')
var div = make('')
div.click()
this.server.respond()
div.innerHTML.should.equal('Clicked!')
})
it('A form can be referred to externally', function() {
this.server.respondWith('POST', '/include', function(xhr) {
var params = getParameters(xhr)
params.i1.should.equal('test')
params.i2.should.equal('test')
xhr.respond(200, {}, 'Clicked!')
})
make(' ')
var div = make('')
div.click()
this.server.respond()
div.innerHTML.should.equal('Clicked!')
})
it('By default an input includes itself w/ data-* prefix', function() {
this.server.respondWith('POST', '/include', function(xhr) {
var params = getParameters(xhr)
params.i1.should.equal('test')
xhr.respond(200, {}, 'Clicked!')
})
var div = make('')
var input = byId('i1')
input.click()
this.server.respond()
div.innerHTML.should.equal('Clicked!')
})
it('If the element is not includeable, its descendant inputs are included', function() {
this.server.respondWith('POST', '/include', function(xhr) {
var params = getParameters(xhr)
params.i1.should.equal('test')
params.i2.should.equal('test')
xhr.respond(200, {}, 'Clicked!')
})
make('')
var div = make('')
div.click()
this.server.respond()
div.innerHTML.should.equal('Clicked!')
})
it('The `closest` modifier can be used in the hx-include selector', function() {
this.server.respondWith('POST', '/include', function(xhr) {
var params = getParameters(xhr)
params.i1.should.equal('test')
params.i2.should.equal('test')
xhr.respond(200, {}, 'Clicked!')
})
make('
' +
'
')
var btn = byId('btn')
btn.click()
this.server.respond()
btn.innerHTML.should.equal('Clicked!')
})
it('The `this` modifier can be used in the hx-include selector', function() {
this.server.respondWith('POST', '/include', function(xhr) {
var params = getParameters(xhr)
params.i1.should.equal('test')
params.i2.should.equal('test')
xhr.respond(200, {}, 'Clicked!')
})
make('
' +
'
')
var btn = byId('btn')
btn.click()
this.server.respond()
btn.innerHTML.should.equal('Clicked!')
})
})