about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2014-03-08 21:10:23 +0000
committerJames Booth <boothj5@gmail.com>2014-03-08 21:10:23 +0000
commitdd1ee18c72268839de8af64de5eb07c5a2499ff2 (patch)
tree6fab72178d19c201d2b73b5d503291cc2e423988
parente9b5d3294b3ccb8e5fb97e1a6e1d129631a72caa (diff)
downloadprofani-tty-dd1ee18c72268839de8af64de5eb07c5a2499ff2.tar.gz
Added test for /join with nick option
-rw-r--r--src/command/commands.c4
-rw-r--r--src/ui/core.c6
-rw-r--r--src/ui/ui.h2
-rw-r--r--src/xmpp/bookmark.c4
-rw-r--r--src/xmpp/presence.c6
-rw-r--r--src/xmpp/xmpp.h2
-rw-r--r--tests/test_cmd_join.c443
-rw-r--r--tests/test_cmd_join.h1
-rw-r--r--tests/testsuite.c1
-rw-r--r--tests/ui/mock_ui.c13
-rw-r--r--tests/ui/mock_ui.h2
-rw-r--r--tests/xmpp/mock_xmpp.c26
-rw-r--r--tests/xmpp/mock_xmpp.h3
13 files changed, 77 insertions, 436 deletions
diff --git a/src/command/commands.c b/src/command/commands.c
index 7738e7f2..e6d575f5 100644
--- a/src/command/commands.c
+++ b/src/command/commands.c
@@ -1659,9 +1659,9 @@ cmd_join(gchar **args, struct cmd_help_t help)
     Jid *room_jid = jid_create_from_bare_and_resource(room, nick);
 
     if (!muc_room_is_active(room_jid)) {
-        presence_join_room(room_jid, passwd);
+        presence_join_room(room, nick, passwd);
     }
-    ui_room_join(room_jid);
+    ui_room_join(room);
     muc_remove_invite(room);
 
     jid_destroy(room_arg);
diff --git a/src/ui/core.c b/src/ui/core.c
index 740e5f6f..ef8ace73 100644
--- a/src/ui/core.c
+++ b/src/ui/core.c
@@ -1083,14 +1083,14 @@ _ui_outgoing_msg(const char * const from, const char * const to,
 }
 
 static void
-_ui_room_join(Jid *jid)
+_ui_room_join(char *room)
 {
-    ProfWin *window = wins_get_by_recipient(jid->barejid);
+    ProfWin *window = wins_get_by_recipient(room);
     int num = 0;
 
     // create new window
     if (window == NULL) {
-        window = wins_new(jid->barejid, WIN_MUC);
+        window = wins_new(room, WIN_MUC);
     }
 
     num = wins_get_num(window);
diff --git a/src/ui/ui.h b/src/ui/ui.h
index 77d081ab..16657564 100644
--- a/src/ui/ui.h
+++ b/src/ui/ui.h
@@ -103,7 +103,7 @@ void (*ui_disconnected)(void);
 void (*ui_recipient_gone)(const char * const barejid);
 void (*ui_outgoing_msg)(const char * const from, const char * const to,
     const char * const message);
-void (*ui_room_join)(Jid *jid);
+void (*ui_room_join)(char *room);
 void (*ui_room_roster)(const char * const room, GList *roster, const char * const presence);
 void (*ui_room_history)(const char * const room_jid, const char * const nick,
     GTimeVal tv_stamp, const char * const message);
diff --git a/src/xmpp/bookmark.c b/src/xmpp/bookmark.c
index 27a768be..5c27e2cf 100644
--- a/src/xmpp/bookmark.c
+++ b/src/xmpp/bookmark.c
@@ -301,9 +301,9 @@ _bookmark_handle_result(xmpp_conn_t * const conn,
                 log_debug("Autojoin %s with nick=%s", jid, name);
                 room_jid = jid_create_from_bare_and_resource(jid, name);
                 if (!muc_room_is_active(room_jid)) {
-                    presence_join_room(room_jid, NULL);
+                    presence_join_room(jid, name, NULL);
                     /* TODO: this should be removed after fixing #195 */
-                    ui_room_join(room_jid);
+                    ui_room_join(jid);
                 }
                 jid_destroy(room_jid);
             } else {
diff --git a/src/xmpp/presence.c b/src/xmpp/presence.c
index 3098e6e4..74fff27a 100644
--- a/src/xmpp/presence.c
+++ b/src/xmpp/presence.c
@@ -260,10 +260,9 @@ _send_room_presence(xmpp_conn_t *conn, xmpp_stanza_t *presence)
 }
 
 static void
-_presence_join_room(Jid *jid, char * passwd)
+_presence_join_room(char *room, char *nick, char * passwd)
 {
-    assert(jid != NULL);
-    assert(jid->fulljid != NULL);
+    Jid *jid = jid_create_from_bare_and_resource(room, nick);
 
     log_debug("Sending room join presence to: %s", jid->fulljid);
     xmpp_ctx_t *ctx = connection_get_ctx();
@@ -285,6 +284,7 @@ _presence_join_room(Jid *jid, char * passwd)
     xmpp_stanza_release(presence);
 
     muc_join_room(jid->barejid, jid->resourcepart);
+    jid_destroy(jid);
 }
 
 static void
diff --git a/src/xmpp/xmpp.h b/src/xmpp/xmpp.h
index 3ef9c93c..c8feb68e 100644
--- a/src/xmpp/xmpp.h
+++ b/src/xmpp/xmpp.h
@@ -114,7 +114,7 @@ GSList* (*presence_get_subscription_requests)(void);
 gint (*presence_sub_request_count)(void);
 void (*presence_reset_sub_request_search)(void);
 char * (*presence_sub_request_find)(char * search_str);
-void (*presence_join_room)(Jid *jid, char * passwd);
+void (*presence_join_room)(char *room, char *nick, char * passwd);
 void (*presence_change_room_nick)(const char * const room, const char * const nick);
 void (*presence_leave_chat_room)(const char * const room_jid);
 void (*presence_update)(resource_presence_t status, const char * const msg,
diff --git a/tests/test_cmd_join.c b/tests/test_cmd_join.c
index 225aaf5b..f7810401 100644
--- a/tests/test_cmd_join.c
+++ b/tests/test_cmd_join.c
@@ -12,7 +12,11 @@
 #include "ui/ui.h"
 #include "ui/mock_ui.h"
 
+#include "config/accounts.h"
+#include "config/mock_accounts.h"
+
 #include "command/commands.h"
+#include "muc.h"
 
 static void test_with_connection_status(jabber_conn_status_t status)
 {
@@ -84,438 +88,29 @@ void cmd_join_shows_error_message_when_invalid_room_jid(void **state)
     free(help);
 }
 
-/*
-void cmd_connect_shows_usage_when_no_server_value(void **state)
-{
-    stub_ui_ask_password();
-    mock_cons_show();
-    CommandHelp *help = malloc(sizeof(CommandHelp));
-    help->usage = "some usage";
-    gchar *args[] = { "user@server.org", "server", NULL };
-
-    mock_connection_status(JABBER_DISCONNECTED);
-
-    expect_cons_show("Usage: some usage");
-    expect_cons_show("");
-
-    gboolean result = cmd_connect(args, *help);
-    assert_true(result);
-
-    free(help);
-}
-
-void cmd_connect_shows_usage_when_server_no_port_value(void **state)
-{
-    stub_ui_ask_password();
-    mock_cons_show();
-    CommandHelp *help = malloc(sizeof(CommandHelp));
-    help->usage = "some usage";
-    gchar *args[] = { "user@server.org", "server", "aserver", "port", NULL };
-
-    mock_connection_status(JABBER_DISCONNECTED);
-
-    expect_cons_show("Usage: some usage");
-    expect_cons_show("");
-
-    gboolean result = cmd_connect(args, *help);
-    assert_true(result);
-
-    free(help);
-}
-
-void cmd_connect_shows_usage_when_no_port_value(void **state)
-{
-    stub_ui_ask_password();
-    mock_cons_show();
-    CommandHelp *help = malloc(sizeof(CommandHelp));
-    help->usage = "some usage";
-    gchar *args[] = { "user@server.org", "port", NULL };
-
-    mock_connection_status(JABBER_DISCONNECTED);
-
-    expect_cons_show("Usage: some usage");
-    expect_cons_show("");
-
-    gboolean result = cmd_connect(args, *help);
-    assert_true(result);
-
-    free(help);
-}
-
-void cmd_connect_shows_usage_when_port_no_server_value(void **state)
-{
-    stub_ui_ask_password();
-    mock_cons_show();
-    CommandHelp *help = malloc(sizeof(CommandHelp));
-    help->usage = "some usage";
-    gchar *args[] = { "user@server.org", "port", "5678", "server", NULL };
-
-    mock_connection_status(JABBER_DISCONNECTED);
-
-    expect_cons_show("Usage: some usage");
-    expect_cons_show("");
-
-    gboolean result = cmd_connect(args, *help);
-    assert_true(result);
-
-    free(help);
-}
-
-void cmd_connect_shows_message_when_port_0(void **state)
-{
-    stub_ui_ask_password();
-    mock_cons_show();
-    CommandHelp *help = malloc(sizeof(CommandHelp));
-    gchar *args[] = { "user@server.org", "port", "0", NULL };
-
-    mock_connection_status(JABBER_DISCONNECTED);
-
-    expect_cons_show("Value 0 out of range. Must be in 1..65535.");
-    expect_cons_show("");
-
-    gboolean result = cmd_connect(args, *help);
-    assert_true(result);
-
-    free(help);
-}
-
-void cmd_connect_shows_message_when_port_minus1(void **state)
-{
-    stub_ui_ask_password();
-    mock_cons_show();
-    CommandHelp *help = malloc(sizeof(CommandHelp));
-    gchar *args[] = { "user@server.org", "port", "-1", NULL };
-
-    mock_connection_status(JABBER_DISCONNECTED);
-
-    expect_cons_show("Value -1 out of range. Must be in 1..65535.");
-    expect_cons_show("");
-
-    gboolean result = cmd_connect(args, *help);
-    assert_true(result);
-
-    free(help);
-}
-
-void cmd_connect_shows_message_when_port_65536(void **state)
-{
-    stub_ui_ask_password();
-    mock_cons_show();
-    CommandHelp *help = malloc(sizeof(CommandHelp));
-    gchar *args[] = { "user@server.org", "port", "65536", NULL };
-
-    mock_connection_status(JABBER_DISCONNECTED);
-
-    expect_cons_show("Value 65536 out of range. Must be in 1..65535.");
-    expect_cons_show("");
-
-    gboolean result = cmd_connect(args, *help);
-    assert_true(result);
-
-    free(help);
-}
-
-void cmd_connect_shows_message_when_port_contains_chars(void **state)
-{
-    stub_ui_ask_password();
-    mock_cons_show();
-    CommandHelp *help = malloc(sizeof(CommandHelp));
-    gchar *args[] = { "user@server.org", "port", "52f66", NULL };
-
-    mock_connection_status(JABBER_DISCONNECTED);
-
-    expect_cons_show("Could not convert \"52f66\" to a number.");
-    expect_cons_show("");
-
-    gboolean result = cmd_connect(args, *help);
-    assert_true(result);
-
-    free(help);
-}
-
-void cmd_connect_shows_usage_when_server_provided_twice(void **state)
-{
-    stub_ui_ask_password();
-    mock_cons_show();
-    CommandHelp *help = malloc(sizeof(CommandHelp));
-    help->usage = "some usage";
-    gchar *args[] = { "user@server.org", "server", "server1", "server", "server2", NULL };
-
-    mock_connection_status(JABBER_DISCONNECTED);
-
-    expect_cons_show("Usage: some usage");
-    expect_cons_show("");
-
-    gboolean result = cmd_connect(args, *help);
-    assert_true(result);
-
-    free(help);
-}
-
-void cmd_connect_shows_usage_when_port_provided_twice(void **state)
+void cmd_join_uses_supplied_nick(void **state)
 {
-    stub_ui_ask_password();
-    mock_cons_show();
+    char *account_name = "an_account";
+    char *room = "room@conf.server.org";
+    char *nick = "bob";
     CommandHelp *help = malloc(sizeof(CommandHelp));
-    help->usage = "some usage";
-    gchar *args[] = { "user@server.org", "port", "1111", "port", "1111", NULL };
-
-    mock_connection_status(JABBER_DISCONNECTED);
-
-    expect_cons_show("Usage: some usage");
-    expect_cons_show("");
-
-    gboolean result = cmd_connect(args, *help);
-    assert_true(result);
-
-    free(help);
-}
-
-void cmd_connect_shows_usage_when_invalid_first_property(void **state)
-{
-    stub_ui_ask_password();
-    mock_cons_show();
-    CommandHelp *help = malloc(sizeof(CommandHelp));
-    help->usage = "some usage";
-    gchar *args[] = { "user@server.org", "wrong", "server", NULL };
-
-    mock_connection_status(JABBER_DISCONNECTED);
-
-    expect_cons_show("Usage: some usage");
-    expect_cons_show("");
-
-    gboolean result = cmd_connect(args, *help);
-    assert_true(result);
-
-    free(help);
-}
-
-void cmd_connect_shows_usage_when_invalid_second_property(void **state)
-{
-    stub_ui_ask_password();
-    mock_cons_show();
-    CommandHelp *help = malloc(sizeof(CommandHelp));
-    help->usage = "some usage";
-    gchar *args[] = { "user@server.org", "server", "aserver", "wrong", "1234", NULL };
-
-    mock_connection_status(JABBER_DISCONNECTED);
-
-    expect_cons_show("Usage: some usage");
-    expect_cons_show("");
-
-    gboolean result = cmd_connect(args, *help);
-    assert_true(result);
-
-    free(help);
-}
-
-void cmd_connect_when_no_account(void **state)
-{
-    mock_cons_show();
-    mock_accounts_get_account();
-    mock_ui_ask_password();
-    mock_jabber_connect_with_details();
-    CommandHelp *help = malloc(sizeof(CommandHelp));
-    gchar *args[] = { "user@server.org", NULL };
-
-    mock_connection_status(JABBER_DISCONNECTED);
-
-    accounts_get_account_expect_and_return("user@server.org", NULL);
-
-    mock_ui_ask_password_returns("password");
-
-    expect_cons_show("Connecting as user@server.org");
-
-    jabber_connect_with_details_expect_and_return("user@server.org", "password", NULL, 0, JABBER_CONNECTING);
-
-    gboolean result = cmd_connect(args, *help);
-    assert_true(result);
-
-    free(help);
-}
-
-void cmd_connect_with_server_when_provided(void **state)
-{
-    mock_ui_ask_password();
-    stub_cons_show();
-    mock_accounts_get_account();
-    mock_jabber_connect_with_details();
-    CommandHelp *help = malloc(sizeof(CommandHelp));
-    gchar *args[] = { "user@server.org", "server", "aserver", NULL };
-
-    mock_connection_status(JABBER_DISCONNECTED);
-
-    accounts_get_account_return(NULL);
-
-    mock_ui_ask_password_returns("password");
-
-    jabber_connect_with_details_expect_and_return("user@server.org", "password", "aserver", 0, JABBER_CONNECTING);
-
-    gboolean result = cmd_connect(args, *help);
-    assert_true(result);
-
-    free(help);
-}
-
-void cmd_connect_with_port_when_provided(void **state)
-{
-    mock_ui_ask_password();
-    stub_cons_show();
-    mock_accounts_get_account();
-    mock_jabber_connect_with_details();
-    CommandHelp *help = malloc(sizeof(CommandHelp));
-    gchar *args[] = { "user@server.org", "port", "5432", NULL };
-
-    mock_connection_status(JABBER_DISCONNECTED);
-
-    accounts_get_account_return(NULL);
-
-    mock_ui_ask_password_returns("password");
-
-    jabber_connect_with_details_expect_and_return("user@server.org", "password", NULL, 5432, JABBER_CONNECTING);
-
-    gboolean result = cmd_connect(args, *help);
-    assert_true(result);
-
-    free(help);
-}
-
-void cmd_connect_with_server_and_port_when_provided(void **state)
-{
-    mock_ui_ask_password();
-    stub_cons_show();
-    mock_accounts_get_account();
-    mock_jabber_connect_with_details();
-    CommandHelp *help = malloc(sizeof(CommandHelp));
-    gchar *args[] = { "user@server.org", "port", "5432", "server", "aserver", NULL };
-
-    mock_connection_status(JABBER_DISCONNECTED);
-
-    accounts_get_account_return(NULL);
-
-    mock_ui_ask_password_returns("password");
-
-    jabber_connect_with_details_expect_and_return("user@server.org", "password", "aserver", 5432, JABBER_CONNECTING);
-
-    gboolean result = cmd_connect(args, *help);
-    assert_true(result);
-
-    free(help);
-}
-
-void cmd_connect_fail_message(void **state)
-{
-    stub_cons_show();
-    mock_cons_show_error();
-    stub_ui_ask_password();
-    mock_accounts_get_account();
-    mock_jabber_connect_with_details();
-    CommandHelp *help = malloc(sizeof(CommandHelp));
-    gchar *args[] = { "user@server.org", NULL };
-
-    mock_connection_status(JABBER_DISCONNECTED);
-
-    accounts_get_account_return(NULL);
-
-    jabber_connect_with_details_return(JABBER_DISCONNECTED);
-
-    expect_cons_show_error("Connection attempt for user@server.org failed.");
-
-    gboolean result = cmd_connect(args, *help);
-    assert_true(result);
-
-    free(help);
-}
-
-void cmd_connect_lowercases_argument(void **state)
-{
-    stub_cons_show();
-    stub_ui_ask_password();
-    mock_accounts_get_account();
-    mock_jabber_connect_with_details();
-    CommandHelp *help = malloc(sizeof(CommandHelp));
-    gchar *args[] = { "USER@server.ORG", NULL };
-
-    mock_connection_status(JABBER_DISCONNECTED);
-
-    accounts_get_account_expect_and_return("user@server.org", NULL);
-
-    jabber_connect_with_details_return(JABBER_CONNECTING);
-
-    gboolean result = cmd_connect(args, *help);
-    assert_true(result);
-
-    free(help);
-}
-
-void cmd_connect_asks_password_when_not_in_account(void **state)
-{
-    stub_cons_show();
-    mock_ui_ask_password();
-    mock_accounts_get_account();
-    mock_jabber_connect_with_account();
-    CommandHelp *help = malloc(sizeof(CommandHelp));
-    gchar *args[] = { "jabber_org", NULL };
-    ProfAccount *account = account_new("jabber_org", "me@jabber.org", NULL,
-        TRUE, NULL, 0, NULL, NULL, NULL, 0, 0, 0, 0, 0, NULL, NULL);
-
-    mock_connection_status(JABBER_DISCONNECTED);
-
-    accounts_get_account_return(account);
-
-    mock_ui_ask_password_returns("password");
-
-    jabber_connect_with_account_return(JABBER_CONNECTING);
-
-    gboolean result = cmd_connect(args, *help);
-    assert_true(result);
-
-    free(help);
-}
-
-void cmd_connect_shows_message_when_connecting_with_account(void **state)
-{
-    mock_cons_show();
-    mock_accounts_get_account();
-    mock_jabber_connect_with_account();
-    CommandHelp *help = malloc(sizeof(CommandHelp));
-    gchar *args[] = { "jabber_org", NULL };
-    ProfAccount *account = account_new("jabber_org", "user@jabber.org", "password",
+    gchar *args[] = { room, "nick", nick, NULL };
+    ProfAccount *account = account_new(account_name, "user@server.org", NULL,
         TRUE, NULL, 0, "laptop", NULL, NULL, 0, 0, 0, 0, 0, NULL, NULL);
 
-    mock_connection_status(JABBER_DISCONNECTED);
-
-    accounts_get_account_return(account);
-
-    expect_cons_show("Connecting with account jabber_org as user@jabber.org/laptop");
-
-    jabber_connect_with_account_return(JABBER_CONNECTING);
-
-    gboolean result = cmd_connect(args, *help);
-    assert_true(result);
-
-    free(help);
-}
+    muc_init();
 
-void cmd_connect_connects_with_account(void **state)
-{
-    stub_cons_show();
+    mock_connection_status(JABBER_CONNECTED);
+    mock_connection_account_name(account_name);
     mock_accounts_get_account();
-    mock_jabber_connect_with_account();
-    CommandHelp *help = malloc(sizeof(CommandHelp));
-    gchar *args[] = { "jabber_org", NULL };
-    ProfAccount *account = account_new("jabber_org", "me@jabber.org", "password",
-        TRUE, NULL, 0, NULL, NULL, NULL, 0, 0, 0, 0, 0, NULL, NULL);
+    accounts_get_account_expect_and_return(account_name, account);
 
-    mock_connection_status(JABBER_DISCONNECTED);
-
-    accounts_get_account_return(account);
-
-    jabber_connect_with_account_expect_and_return(account, JABBER_CONNECTING);
-
-    gboolean result = cmd_connect(args, *help);
+    mock_presence_join_room();
+    presence_join_room_expect(room, nick, NULL);
+    ui_room_join_expect(room);
+    
+    gboolean result = cmd_join(args, *help);
     assert_true(result);
 
     free(help);
 }
-*/
diff --git a/tests/test_cmd_join.h b/tests/test_cmd_join.h
index f6abdd8c..fa2084fb 100644
--- a/tests/test_cmd_join.h
+++ b/tests/test_cmd_join.h
@@ -4,3 +4,4 @@ void cmd_join_shows_message_when_disconnected(void **state);
 void cmd_join_shows_message_when_undefined(void **state);
 void cmd_join_shows_usage_when_no_args(void **state);
 void cmd_join_shows_error_message_when_invalid_room_jid(void **state);
+void cmd_join_uses_supplied_nick(void **state);
diff --git a/tests/testsuite.c b/tests/testsuite.c
index 0ba32305..841181bc 100644
--- a/tests/testsuite.c
+++ b/tests/testsuite.c
@@ -493,6 +493,7 @@ int main(int argc, char* argv[]) {
         unit_test(cmd_join_shows_message_when_undefined),
         unit_test(cmd_join_shows_usage_when_no_args),
         unit_test(cmd_join_shows_error_message_when_invalid_room_jid),
+        unit_test(cmd_join_uses_supplied_nick),
     };
 
     return run_tests(all_tests);
diff --git a/tests/ui/mock_ui.c b/tests/ui/mock_ui.c
index a79f0521..b325870a 100644
--- a/tests/ui/mock_ui.c
+++ b/tests/ui/mock_ui.c
@@ -187,6 +187,12 @@ gboolean _mock_ui_current_win_is_otr(void)
     return (gboolean)mock();
 }
 
+static
+void _mock_ui_room_join(char *room)
+{
+    check_expected(room);
+}
+
 // bind mocks and stubs
 
 void
@@ -429,3 +435,10 @@ ui_current_win_is_otr_returns(gboolean result)
     ui_current_win_is_otr = _mock_ui_current_win_is_otr;
     will_return(_mock_ui_current_win_is_otr, result);
 }
+
+void
+ui_room_join_expect(char *room)
+{
+    ui_room_join = _mock_ui_room_join;
+    expect_string(_mock_ui_room_join, room, room);
+}
diff --git a/tests/ui/mock_ui.h b/tests/ui/mock_ui.h
index a814f06e..05b271c1 100644
--- a/tests/ui/mock_ui.h
+++ b/tests/ui/mock_ui.h
@@ -59,4 +59,6 @@ void ui_current_print_line_expect(char *message);
 
 void ui_current_win_is_otr_returns(gboolean result);
 
+void ui_room_join_expect(char *room);
+
 #endif
diff --git a/tests/xmpp/mock_xmpp.c b/tests/xmpp/mock_xmpp.c
index c9843ed5..3b824c19 100644
--- a/tests/xmpp/mock_xmpp.c
+++ b/tests/xmpp/mock_xmpp.c
@@ -88,6 +88,14 @@ _mock_message_send(const char * const msg, const char * const recipient)
     check_expected(recipient);
 }
 
+static void
+_mock_presence_join_room(char *room, char*nick, char *passwd)
+{
+    check_expected(room);
+    check_expected(nick);
+    check_expected(passwd);
+}
+
 void
 mock_jabber_connect_with_details(void)
 {
@@ -126,6 +134,12 @@ mock_bookmark_remove(void)
 }
 
 void
+mock_presence_join_room(void)
+{
+    presence_join_room = _mock_presence_join_room;
+}
+
+void
 bookmark_get_list_returns(GList *bookmarks)
 {
     bookmark_get_list = _mock_bookmark_get_list;
@@ -234,3 +248,15 @@ message_send_expect(char *message, char *recipient)
     expect_string(_mock_message_send, msg, message);
     expect_string(_mock_message_send, recipient, recipient);
 }
+
+void
+presence_join_room_expect(char *room, char *nick, char *passwd)
+{
+    expect_string(_mock_presence_join_room, room, room);
+    expect_string(_mock_presence_join_room, nick, nick);
+    if (passwd == NULL) {
+        expect_any(_mock_presence_join_room, passwd);
+    } else {
+        expect_string(_mock_presence_join_room, passwd, passwd);
+    }
+}
diff --git a/tests/xmpp/mock_xmpp.h b/tests/xmpp/mock_xmpp.h
index 7400fe92..2b535761 100644
--- a/tests/xmpp/mock_xmpp.h
+++ b/tests/xmpp/mock_xmpp.h
@@ -33,4 +33,7 @@ void expect_and_return_bookmark_remove(char *expected_jid, gboolean expected_aut
 
 void message_send_expect(char *message, char *recipient);
 
+void mock_presence_join_room(void);
+void presence_join_room_expect(char *room, char *nick, char *passwd);
+
 #endif