#!/bin/bash
cd $(dirname "$0")

source util.sh
PATH=".." source irc.sh

# The MOTD is sent to our nick, so we can use it to figure out what nick we've
# got.
reset_vars
IRC_PREFIX="server"
IRC_COMMAND=$RPL_WELCOME
IRC_PARAMS=("botnick" "Welcome to FakeNET!")
irc_cmdparse > /dev/null
assert_equal "$IRC_SENDER" "server"
assert_equal "$IRC_CHANNEL" ""
assert_equal "$IRC_TEXT" "Welcome to FakeNET!"
assert_equal "$IRC_BOTID" ""
assert_equal "$IRC_BOTNICK" "botnick"

# Now that we have a nick, we use WHOIS to find out our full ID.
output=$(irc_cmdparse)
assert_equal "$output" "WHOIS botnick"

# If we get a WHOIS response describing ourselves, we can use it to set
# $IRC_BOTID.
reset_vars
IRC_PREFIX="server"
IRC_COMMAND=$RPL_WHOISUSER
IRC_PARAMS=("botnick" "botnick" "~user" "hostname" "*" "Real Name")
irc_cmdparse
assert_equal "$IRC_SENDER" "server"
assert_equal "$IRC_CHANNEL" ""
assert_equal "$IRC_TEXT" ""
assert_equal "$IRC_BOTID" "botnick!~user@hostname"
assert_equal "$IRC_BOTNICK" "botnick"

# Somebody joined a channel.
reset_vars
IRC_PREFIX="Somebody!~user@host"
IRC_COMMAND="JOIN"
IRC_PARAMS=("#channel")
irc_cmdparse
assert_equal "$IRC_SENDER" "Somebody"
assert_equal "$IRC_CHANNEL" "#channel"
assert_equal "$IRC_TEXT" "#channel"
assert_equal "$IRC_BOTID" ""
assert_equal "$IRC_BOTNICK" ""

# Channel PRIVMSG
reset_vars
IRC_PREFIX="Sender!~user@host"
IRC_COMMAND="PRIVMSG"
IRC_PARAMS=("#channel" "Channel message.")
irc_cmdparse
assert_equal "$IRC_SENDER" "Sender"
assert_equal "$IRC_CHANNEL" "#channel"
assert_equal "$IRC_TEXT" "Channel message."
assert_equal "$IRC_BOTID" ""
assert_equal "$IRC_BOTNICK" ""

# Private PRIVMSG
reset_vars
IRC_PREFIX="Sender!~user@host"
IRC_COMMAND="PRIVMSG"
IRC_PARAMS=("botnick" "Private message.")
irc_cmdparse
assert_equal "$IRC_SENDER" "Sender"
assert_equal "$IRC_CHANNEL" "Sender"
assert_equal "$IRC_TEXT" "Private message."
assert_equal "$IRC_BOTID" ""
assert_equal "$IRC_BOTNICK" ""

# Channel NOTICE
reset_vars
IRC_PREFIX="Sender!~user@host"
IRC_COMMAND="NOTICE"
IRC_PARAMS=("#channel" "Channel notice.")
irc_cmdparse
assert_equal "$IRC_SENDER" "Sender"
assert_equal "$IRC_CHANNEL" "#channel"
assert_equal "$IRC_TEXT" "Channel notice."
assert_equal "$IRC_BOTID" ""
assert_equal "$IRC_BOTNICK" ""

# Private NOTICE
reset_vars
IRC_PREFIX="Sender!~user@host"
IRC_COMMAND="NOTICE"
IRC_PARAMS=("botnick" "Private notice.")
irc_cmdparse
assert_equal "$IRC_SENDER" "Sender"
assert_equal "$IRC_CHANNEL" "Sender"
assert_equal "$IRC_TEXT" "Private notice."
assert_equal "$IRC_BOTID" ""
assert_equal "$IRC_BOTNICK" ""

# Somebody changed their nick.
reset_vars
IRC_PREFIX="OldName!~user@host"
IRC_COMMAND="NICK"
IRC_PARAMS=("NewName")
irc_cmdparse
assert_equal "$IRC_SENDER" "OldName"
assert_equal "$IRC_CHANNEL" ""
assert_equal "$IRC_TEXT" "NewName"
assert_equal "$IRC_BOTID" ""
assert_equal "$IRC_BOTNICK" ""

# Our nick changed. We need to make sure we update $IRC_BOTID to match our new
# ID.
reset_vars
IRC_BOTNICK="botnick"
IRC_BOTID="botnick!~user@host"
IRC_PREFIX="$IRC_BOTID"
IRC_COMMAND="NICK"
IRC_PARAMS=("newnick")
irc_cmdparse
assert_equal "$IRC_SENDER" "botnick"
assert_equal "$IRC_CHANNEL" ""
assert_equal "$IRC_TEXT" "newnick"
assert_equal "$IRC_BOTID" "newnick!~user@host"
assert_equal "$IRC_BOTNICK" "newnick"

# Somebody got op'd.
reset_vars
IRC_PREFIX="ChanServ!user@host"
IRC_COMMAND="MODE"
IRC_PARAMS=("#channel" "+o" "Somebody")
irc_cmdparse
assert_equal "$IRC_SENDER" "ChanServ"
assert_equal "$IRC_CHANNEL" "#channel"
assert_equal "$IRC_TEXT" "+o Somebody"
assert_equal "$IRC_BOTID" ""
assert_equal "$IRC_BOTNICK" ""

# Somebody left the channel.
reset_vars
IRC_PREFIX="Somebody!~user@host"
IRC_COMMAND="PART"
IRC_PARAMS=("#channel")
irc_cmdparse
assert_equal "$IRC_SENDER" "Somebody"
assert_equal "$IRC_CHANNEL" "#channel"
assert_equal "$IRC_TEXT" ""
assert_equal "$IRC_BOTID" ""
assert_equal "$IRC_BOTNICK" ""

# Somebody changed the topic.
reset_vars
IRC_PREFIX="Somebody!~user@host"
IRC_COMMAND="TOPIC"
IRC_PARAMS=("#channel" "New topic")
irc_cmdparse
assert_equal "$IRC_SENDER" "Somebody"
assert_equal "$IRC_CHANNEL" "#channel"
assert_equal "$IRC_TEXT" "New topic"
assert_equal "$IRC_BOTID" ""
assert_equal "$IRC_BOTNICK" ""

