'use strict'
var helper = require('./test-helper')
var Connection = require('../../../lib/connection')

test('drain', function () {
  var con = new Connection({ stream: 'NO' })
  var client = new Client({ connection: con })
  con.connect = function () {
    con.emit('connect')
  }
  con.query = function () {}
  client.connect()

  var raisedDrain = false
  client.on('drain', function () {
    raisedDrain = true
  })

  client.query('hello')
  client.query('sup')
  client.query('boom')

  test('with pending queries', function () {
    test('does not emit drain', function () {
      assert.equal(raisedDrain, false)
    })
  })

  test('after some queries executed', function () {
    con.emit('readyForQuery')
    test('does not emit drain', function () {
      assert.equal(raisedDrain, false)
    })
  })

  test('when all queries are sent', function () {
    con.emit('readyForQuery')
    con.emit('readyForQuery')
    test('does not emit drain', function () {
      assert.equal(raisedDrain, false)
    })
  })

  test('after last query finishes', function () {
    con.emit('readyForQuery')
    test('emits drain', function () {
      process.nextTick(function () {
        assert.ok(raisedDrain)
      })
    })
  })
})
