From 8aaecf27b6767ccab9010626c415637824114e34 Mon Sep 17 00:00:00 2001 From: robinsonweng Date: Thu, 31 Oct 2024 02:34:36 +0800 Subject: [PATCH] add hard coded reply and test for JOIN command --- src/irc.rs | 8 ++++++++ tests/test_irc.rs | 22 +++++++++++++++------- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/irc.rs b/src/irc.rs index 84deaa2..b5866be 100644 --- a/src/irc.rs +++ b/src/irc.rs @@ -6,6 +6,7 @@ enum CommandFromUser { CAP, USER, NICK, + JOIN, } impl From for CommandFromUser { @@ -14,6 +15,7 @@ impl From for CommandFromUser { "CAP" => Self::CAP, "USER" => Self::USER, "NICK" => Self::NICK, + "JOIN" => Self::JOIN, _=> todo!(), } } @@ -63,6 +65,12 @@ where T: Read + Write CommandFromUser::NICK => { user.set_nickname(&message); }, + CommandFromUser::JOIN => { + // user joins the channel + + let rpl_topic = format!("{} #coolchannel :topic\r\n", user.get_nickname()); + let _ = stream.write(rpl_topic.as_bytes())?; + } }; if user.register_complete() && (command == CommandFromUser::USER || command == CommandFromUser::NICK){ diff --git a/tests/test_irc.rs b/tests/test_irc.rs index a921c73..641d3ee 100644 --- a/tests/test_irc.rs +++ b/tests/test_irc.rs @@ -1,4 +1,4 @@ -use std::fmt::Write as _; +use std::fmt::{format, Write as _}; use irc_server::irc::{execute, welcome_messages}; @@ -99,7 +99,7 @@ fn test_command_user_when_nick_is_set() { #[test] fn test_command_nick_when_username_is_not_set() { let (mut stream, mut user) = setup(); - + let request_message = format!("NICK {}\r\n", NICK_NAME); stream.read_message.push(request_message.as_bytes().to_vec()); @@ -146,18 +146,26 @@ fn test_command_nick_when_username_is_set() { #[test] -fn test_command_join() { +fn test_command_join_with_non_empty_topic() { // if nick is also set, return 001, 002, 003, 004 let (mut stream, mut user) = setup(); user.username = USER_NAME.to_string(); + user.nickname = NICK_NAME.to_string(); - let request_message = format!("JOIN {}\r\n", NICK_NAME); + let channel_name = "#coolchannel"; + let topic_name = "topic"; + + let request_message = format!("JOIN {}\r\n", channel_name); stream.read_message.push(request_message.as_bytes().to_vec()); - // let _ = execute(&mut stream, &mut user); + let _ = execute(&mut stream, &mut user); + + assert_eq!(user.username, USER_NAME); + assert_eq!(user.nickname, NICK_NAME); + - // assert_eq!(user.username, USER_NAME); - // assert_eq!(user.nickname, NICK_NAME); + let current_topic_in_channel = format!("{} {} :{}\r\n", NICK_NAME, channel_name, topic_name); + stream.expect_message(Some(¤t_topic_in_channel)); }