require 'helper'

class TestRemoteUser < Test::Unit::TestCase

  def teardown
    # undo any changes the test may have made
    NginxTail::LogLine.reset_authenticated_users
  end

  should "have empty list of authenticated users without configuration" do
    assert NginxTail::LogLine.authenticated_users.empty?
  end
  
  should "correctly identify the default/unknown remote user" do
    unknown_remote_user = NginxTail::RemoteUser::UNKNOWN_REMOTE_USER
    log_line = random_log_line(:remote_user => unknown_remote_user)
    
    assert NginxTail::LogLine.unknown_remote_user?(unknown_remote_user)
    assert !NginxTail::LogLine.remote_user?(unknown_remote_user)
    assert !NginxTail::LogLine.authenticated_user?(unknown_remote_user)
    
    assert log_line.unknown_remote_user?
  end
  
  should "not allow the default/unknown remote user to be added" do
    assert_raise RuntimeError do
      NginxTail::LogLine.add_authenticated_user(NginxTail::RemoteUser::UNKNOWN_REMOTE_USER)
    end
  end

  should "have non-empty list of authenticated users after configuration" do
    NginxTail::LogLine.add_authenticated_user(first_remote_user = "john_doe")
    assert_equal 1, NginxTail::LogLine.authenticated_users.size
    assert NginxTail::LogLine.authenticated_users.include?(first_remote_user)
    
    NginxTail::LogLine.add_authenticated_user(second_referer = "jane_doe")
    assert_equal 2, NginxTail::LogLine.authenticated_users.size
    assert NginxTail::LogLine.authenticated_users.include?(second_referer)
  end

  should "avoid duplicates in list of authenticated users" do
    NginxTail::LogLine.add_authenticated_user(authenticated_user = "john_doe")
    assert_equal 1, NginxTail::LogLine.authenticated_users.size
    
    NginxTail::LogLine.add_authenticated_user(authenticated_user)
    assert_equal 1, NginxTail::LogLine.authenticated_users.size
  end

  should "recognize a remote user after configuration" do
    remote_user = "john_doe"
    log_line = random_log_line(:remote_user => remote_user)

    assert NginxTail::LogLine.remote_user?(remote_user)
    assert !NginxTail::LogLine.authenticated_user?(remote_user)
    assert log_line.remote_user?
    assert !log_line.authenticated_user?
    
    NginxTail::LogLine.add_authenticated_user(remote_user)
    assert NginxTail::LogLine.remote_user?(remote_user)
    assert NginxTail::LogLine.authenticated_user?(remote_user)
    assert log_line.remote_user?
    assert log_line.authenticated_user?
  end

end