require 'minitest/autorun'
require 'minitest/pride'
require 'minitest/hell'

class BinTest < Minitest::Test

  def teardown
    run_command "stop"
  end

  def test_bin_loading
    assert_command_runs("version")
  end

  def test_not_running_by_default
    assert_stopped
  end

  def test_start
    run_command "start"
    assert_running
  end

  protected

  def assert_running
    status = run_command "status"
    assert_includes status, "Nickserver running"
  end

  def assert_stopped
    status = run_command "status"
    assert_includes status, "No nickserver processes are running."
  end

  def assert_command_runs(command)
    out = run_command command
    assert ($?.exitstatus == 0),
      "failed to run 'nickserver #{command}':\n #{out}"
  end

  def run_command(command)
    `#{path_to_executable} #{command} 2>&1`
  end

  def path_to_executable
    File.expand_path(File.dirname(__FILE__) + '/../../bin/nickserver')
  end

end