describe('hx-target attribute', function() {
  beforeEach(function() {
    this.server = sinon.fakeServer.create()
    clearWorkArea()
  })
  afterEach(function() {
    this.server.restore()
    clearWorkArea()
  })
  it('targets an adjacent element properly', function() {
    this.server.respondWith('GET', '/test', 'Clicked!')
    var btn = make('')
    var div1 = make('
')
    btn.click()
    this.server.respond()
    div1.innerHTML.should.equal('Clicked!')
  })
  it('targets a parent element properly', function() {
    this.server.respondWith('GET', '/test', 'Clicked!')
    var div1 = make('')
    var btn = byId('b1')
    btn.click()
    this.server.respond()
    div1.innerHTML.should.equal('Clicked!')
  })
  it('targets a `this` element properly', function() {
    this.server.respondWith('GET', '/test', 'Clicked!')
    var div1 = make('')
    var btn = byId('b1')
    btn.click()
    this.server.respond()
    div1.innerHTML.should.equal('Clicked!')
  })
  it('targets a `closest` element properly', function() {
    this.server.respondWith('GET', '/test', 'Clicked!')
    var div1 = make('')
    var btn = byId('b1')
    btn.click()
    this.server.respond()
    div1.innerHTML.should.equal('Clicked!')
  })
  it('targets a `closest` element properly w/ hyperscript syntax', function() {
    this.server.respondWith('GET', '/test', 'Clicked!')
    var div1 = make('')
    var btn = byId('b1')
    btn.click()
    this.server.respond()
    div1.innerHTML.should.equal('Clicked!')
  })
  it('targets a `find` element properly', function() {
    this.server.respondWith('GET', '/test', 'Clicked!')
    var div1 = make('')
    div1.click()
    this.server.respond()
    var span1 = byId('s1')
    var span2 = byId('s2')
    span1.innerHTML.should.equal('Clicked!')
    span2.innerHTML.should.equal('')
  })
  it('targets a `find` element properly w/ hyperscript syntax', function() {
    this.server.respondWith('GET', '/test', 'Clicked!')
    var div1 = make('')
    div1.click()
    this.server.respond()
    var span1 = byId('s1')
    var span2 = byId('s2')
    span1.innerHTML.should.equal('Clicked!')
    span2.innerHTML.should.equal('')
  })
  it('targets an inner element properly', function() {
    this.server.respondWith('GET', '/test', 'Clicked!')
    var btn = make('')
    var div1 = byId('d1')
    btn.click()
    this.server.respond()
    div1.innerHTML.should.equal('Clicked!')
  })
  it('targets an inner element properly w/ hyperscript syntax', function() {
    this.server.respondWith('GET', '/test', 'Clicked!')
    var btn = make('')
    var div1 = byId('d1')
    btn.click()
    this.server.respond()
    div1.innerHTML.should.equal('Clicked!')
  })
  it('handles bad target gracefully', function() {
    this.server.respondWith('GET', '/test', 'Clicked!')
    var btn = make('')
    btn.click()
    this.server.respond()
    btn.innerHTML.should.equal('Click Me!')
  })
  it('targets an adjacent element properly w/ data-* prefix', function() {
    this.server.respondWith('GET', '/test', 'Clicked!')
    var btn = make('')
    var div1 = make('')
    btn.click()
    this.server.respond()
    div1.innerHTML.should.equal('Clicked!')
  })
  it('targets a `next` element properly', function() {
    this.server.respondWith('GET', '/test', 'Clicked!')
    make('' +
            '  
' +
            '  
' +
            '  
' +
            '  
' +
            '
 ')
    var btn = byId('b1')
    var div1 = byId('d1')
    var div2 = byId('d2')
    var div3 = byId('d3')
    btn.click()
    this.server.respond()
    div1.innerHTML.should.equal('Clicked!')
    div2.innerHTML.should.equal('')
    div3.innerHTML.should.equal('')
  })
  it('targets a `next` element properly w/ hyperscript syntax', function() {
    this.server.respondWith('GET', '/test', 'Clicked!')
    make('' +
            '  
' +
            '  
' +
            '  
' +
            '  
' +
            '
 ')
    var btn = byId('b1')
    var div1 = byId('d1')
    var div2 = byId('d2')
    var div3 = byId('d3')
    btn.click()
    this.server.respond()
    div1.innerHTML.should.equal('Clicked!')
    div2.innerHTML.should.equal('')
    div3.innerHTML.should.equal('')
  })
  it('targets a `previous` element properly', function() {
    this.server.respondWith('GET', '/test', 'Clicked!')
    make('' +
            '  
' +
            '  
' +
            '  
' +
            '  
' +
            '
 ')
    var btn = byId('b1')
    var div1 = byId('d1')
    var div2 = byId('d2')
    var div3 = byId('d3')
    btn.click()
    this.server.respond()
    div1.innerHTML.should.equal('')
    div2.innerHTML.should.equal('')
    div3.innerHTML.should.equal('Clicked!')
  })
  it('targets a `previous` element properly w/ hyperscript syntax', function() {
    this.server.respondWith('GET', '/test', 'Clicked!')
    make('' +
            '  
' +
            '  
' +
            '  
' +
            '  
' +
            '
 ')
    var btn = byId('b1')
    var div1 = byId('d1')
    var div2 = byId('d2')
    var div3 = byId('d3')
    btn.click()
    this.server.respond()
    div1.innerHTML.should.equal('')
    div2.innerHTML.should.equal('')
    div3.innerHTML.should.equal('Clicked!')
  })
  it('targets a `next` element properly without selector', function() {
    this.server.respondWith('GET', '/test', 'Clicked!')
    make('' +
            '  
' +
            '  
' +
            '  
' +
            '  
' +
            '
 ')
    var btn = byId('b1')
    var div1 = byId('d1')
    var div2 = byId('d2')
    var div3 = byId('d3')
    btn.click()
    this.server.respond()
    div1.innerHTML.should.equal('Clicked!')
    div2.innerHTML.should.equal('')
    div3.innerHTML.should.equal('')
  })
  it('targets a `previous` element properly without selector', function() {
    this.server.respondWith('GET', '/test', 'Clicked!')
    make('' +
            '  
' +
            '  
' +
            '  
' +
            '  
' +
            '
 ')
    var btn = byId('b1')
    var div1 = byId('d1')
    var div2 = byId('d2')
    var div3 = byId('d3')
    btn.click()
    this.server.respond()
    div1.innerHTML.should.equal('')
    div2.innerHTML.should.equal('')
    div3.innerHTML.should.equal('Clicked!')
  })
})