about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2014-01-22 22:22:01 +0000
committerJames Booth <boothj5@gmail.com>2014-01-22 22:22:01 +0000
commit21ab18215164fe791ebda7e6158648f63790ed93 (patch)
tree1c26f12558beeb773ec15d55320020c65ffd2028
parentbbdf2bea58b0c84054ead85aa2a93f86560f1568 (diff)
downloadprofani-tty-21ab18215164fe791ebda7e6158648f63790ed93.tar.gz
Refactored ProfAccount creation
-rw-r--r--Makefile.am2
-rw-r--r--src/command/commands.c11
-rw-r--r--src/config/account.c144
-rw-r--r--src/config/account.h58
-rw-r--r--src/config/accounts.c150
-rw-r--r--src/config/accounts.h23
-rw-r--r--src/server_events.c3
-rw-r--r--tests/config/mock_accounts.c54
-rw-r--r--tests/config/mock_accounts.h7
-rw-r--r--tests/test_cmd_account.c9
-rw-r--r--tests/test_cmd_connect.c59
-rw-r--r--tests/test_cmd_connect.h1
-rw-r--r--tests/testsuite.c1
13 files changed, 251 insertions, 271 deletions
diff --git a/Makefile.am b/Makefile.am
index 5b0bc5d8..933a44f6 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -38,6 +38,7 @@ core_sources = \
 	src/tools/history.c src/tools/history.h \
 	src/tools/tinyurl.c src/tools/tinyurl.h \
 	src/config/accounts.c src/config/accounts.h \
+	src/config/account.c src/config/account.h \
 	src/config/preferences.c src/config/preferences.h \
 	src/config/theme.c src/config/theme.h
 
@@ -58,6 +59,7 @@ test_sources = \
 	src/tools/history.c src/tools/history.h \
 	src/tools/tinyurl.c src/tools/tinyurl.h \
 	src/config/accounts.h \
+	src/config/account.c src/config/account.h \
 	src/config/preferences.c src/config/preferences.h \
 	src/config/theme.c src/config/theme.h \
     src/ui/windows.c src/ui/windows.h \
diff --git a/src/command/commands.c b/src/command/commands.c
index 25442b80..9c16ef81 100644
--- a/src/command/commands.c
+++ b/src/command/commands.c
@@ -29,6 +29,7 @@
 #include "command/commands.h"
 #include "common.h"
 #include "config/accounts.h"
+#include "config/account.h"
 #include "config/preferences.h"
 #include "config/theme.h"
 #include "contact.h"
@@ -149,13 +150,13 @@ cmd_connect(gchar **args, struct cmd_help_t help)
 
         ProfAccount *account = accounts_get_account(lower);
         if (account != NULL) {
-            jid = accounts_create_full_jid(account);
+            jid = account_create_full_jid(account);
             if (account->password == NULL) {
                 account->password = ui_ask_password();
             }
             cons_show("Connecting with account %s as %s", account->name, jid);
             conn_status = jabber_connect_with_account(account);
-            accounts_free_account(account);
+            account_free(account);
         } else {
             char *passwd = ui_ask_password();
             jid = strdup(lower);
@@ -189,7 +190,7 @@ cmd_account(gchar **args, struct cmd_help_t help)
         } else {
             ProfAccount *account = accounts_get_account(jabber_get_account_name());
             cons_show_account(account);
-            accounts_free_account(account);
+            account_free(account);
         }
     } else if (strcmp(command, "list") == 0) {
         gchar **accounts = accounts_get_list();
@@ -206,7 +207,7 @@ cmd_account(gchar **args, struct cmd_help_t help)
                 cons_show("");
             } else {
                 cons_show_account(account);
-                accounts_free_account(account);
+                account_free(account);
             }
         }
     } else if (strcmp(command, "add") == 0) {
@@ -1623,7 +1624,7 @@ cmd_join(gchar **args, struct cmd_help_t help)
     jid_destroy(room_jid);
     jid_destroy(my_jid);
     g_string_free(room_str, TRUE);
-    accounts_free_account(account);
+    account_free(account);
 
     return TRUE;
 }
diff --git a/src/config/account.c b/src/config/account.c
new file mode 100644
index 00000000..b56cf6a4
--- /dev/null
+++ b/src/config/account.c
@@ -0,0 +1,144 @@
+/*
+ * account.c
+ *
+ * Copyright (C) 2012, 2013 James Booth <boothj5@gmail.com>
+ *
+ * This file is part of Profanity.
+ *
+ * Profanity is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Profanity is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Profanity.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <stdlib.h>
+#include <string.h>
+
+#include <glib.h>
+
+#include "jid.h"
+#include "config/account.h"
+
+ProfAccount*
+account_new(const gchar * const name, const gchar * const jid,
+    const gchar * const password, gboolean enabled, const gchar * const server,
+    int port, const gchar * const resource, const gchar * const last_presence,
+    const gchar * const login_presence, int priority_online, int priority_chat,
+    int priority_away, int priority_xa, int priority_dnd,
+    const gchar * const muc_service, const gchar * const muc_nick)
+{
+    ProfAccount *new_account = malloc(sizeof(ProfAccount));
+
+    new_account->name = strdup(name);
+
+    if (jid != NULL) {
+        new_account->jid = strdup(jid);
+    } else {
+        new_account->jid = strdup(name);
+    }
+
+    if (password != NULL) {
+        new_account->password = strdup(password);
+    } else {
+        new_account->password = NULL;
+    }
+
+    new_account->enabled = enabled;
+
+    if (server != NULL) {
+        new_account->server = strdup(server);
+    } else {
+        new_account->server = NULL;
+    }
+
+    if (resource != NULL) {
+        new_account->resource = strdup(resource);
+    } else {
+        new_account->resource = NULL;
+    }
+
+    new_account->port = port;
+
+    if (last_presence == NULL || !valid_resource_presence_string(last_presence)) {
+        new_account->last_presence = strdup("online");
+    } else {
+        new_account->last_presence = strdup(last_presence);
+    }
+
+    if (login_presence == NULL) {
+        new_account->login_presence = strdup("online");
+    } else if (strcmp(login_presence, "last") == 0) {
+        new_account->login_presence = strdup(login_presence);
+    } else if (!valid_resource_presence_string(login_presence)) {
+        new_account->login_presence = strdup("online");
+    } else {
+        new_account->login_presence = strdup(login_presence);
+    }
+
+    new_account->priority_online = priority_online;
+    new_account->priority_chat = priority_chat;
+    new_account->priority_away = priority_away;
+    new_account->priority_xa = priority_xa;
+    new_account->priority_dnd = priority_dnd;
+
+    if (muc_service == NULL) {
+        GString *g_muc_service = g_string_new("conference.");
+        Jid *jidp = jid_create(new_account->jid);
+        g_string_append(g_muc_service, jidp->domainpart);
+
+        new_account->muc_service = g_muc_service->str;
+
+        g_string_free(g_muc_service, FALSE);
+        jid_destroy(jidp);
+    } else {
+        new_account->muc_service = strdup(muc_service);
+    }
+
+    if (muc_nick == NULL) {
+        Jid *jidp = jid_create(new_account->jid);
+        new_account->muc_nick = strdup(jidp->domainpart);
+        jid_destroy(jidp);
+    } else {
+        new_account->muc_nick = strdup(muc_nick);
+    }
+
+    return new_account;
+}
+
+char *
+account_create_full_jid(ProfAccount *account)
+{
+    if (account->resource != NULL) {
+        return create_fulljid(account->jid, account->resource);
+    } else {
+        return strdup(account->jid);
+    }
+}
+
+void
+account_free(ProfAccount *account)
+{
+    if (account != NULL) {
+        free(account->name);
+        free(account->jid);
+        free(account->password);
+        free(account->resource);
+        free(account->server);
+        free(account->last_presence);
+        free(account->login_presence);
+        free(account->muc_service);
+        free(account->muc_nick);
+        free(account);
+        account = NULL;
+    }
+}
+
diff --git a/src/config/account.h b/src/config/account.h
new file mode 100644
index 00000000..c77ce86d
--- /dev/null
+++ b/src/config/account.h
@@ -0,0 +1,58 @@
+/*
+ * account.h
+ *
+ * Copyright (C) 2012, 2013 James Booth <boothj5@gmail.com>
+ *
+ * This file is part of Profanity.
+ *
+ * Profanity is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Profanity is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Profanity.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef ACCOUNT_H
+#define ACCOUNT_H
+
+#include "common.h"
+
+typedef struct prof_account_t {
+    gchar *name;
+    gchar *jid;
+    gchar *password;
+    gchar *resource;
+    gchar *server;
+    int port;
+    gchar *last_presence;
+    gchar *login_presence;
+    gint priority_online;
+    gint priority_chat;
+    gint priority_away;
+    gint priority_xa;
+    gint priority_dnd;
+    gchar *muc_service;
+    gchar *muc_nick;
+    gboolean enabled;
+} ProfAccount;
+
+ProfAccount* account_new(const gchar * const name, const gchar * const jid,
+    const gchar * const passord, gboolean enabled, const gchar * const server,
+    int port, const gchar * const resource, const gchar * const last_presence,
+    const gchar * const login_presence, int priority_online, int priority_chat,
+    int priority_away, int priority_xa, int priority_dnd,
+    const gchar * const muc_service, const gchar * const muc_nick);
+
+char* account_create_full_jid(ProfAccount *account);
+
+void account_free(ProfAccount *account);
+
+#endif
diff --git a/src/config/accounts.c b/src/config/accounts.c
index 6a1ade68..1ae8b215 100644
--- a/src/config/accounts.c
+++ b/src/config/accounts.c
@@ -28,6 +28,7 @@
 #include "accounts.h"
 
 #include "common.h"
+#include "config/account.h"
 #include "jid.h"
 #include "log.h"
 #include "tools/autocomplete.h"
@@ -184,145 +185,48 @@ _accounts_get_account(const char * const name)
     if (!g_key_file_has_group(accounts, name)) {
         return NULL;
     } else {
-        ProfAccount *account = malloc(sizeof(ProfAccount));
-        account->name = strdup(name);
-
         gchar *jid = g_key_file_get_string(accounts, name, "jid", NULL);
-        if (jid != NULL) {
-            account->jid = strdup(jid);
-            g_free(jid);
-        } else {
-            account->jid = strdup(name);
+
+        // fix accounts that have no jid property by setting to name
+        if (jid == NULL) {
             g_key_file_set_string(accounts, name, "jid", name);
             _save_accounts();
         }
 
         gchar *password = g_key_file_get_string(accounts, name, "password", NULL);
-        if (password != NULL) {
-            account->password = strdup(password);
-            g_free(password);
-        } else {
-            account->password = NULL;
-        }
-
-        account->enabled = g_key_file_get_boolean(accounts, name, "enabled", NULL);
+        gboolean enabled = g_key_file_get_boolean(accounts, name, "enabled", NULL);
 
         gchar *server = g_key_file_get_string(accounts, name, "server", NULL);
-        if (server != NULL) {
-            account->server = strdup(server);
-            g_free(server);
-        } else {
-            account->server = NULL;
-        }
-
-        int port = g_key_file_get_integer(accounts, name, "port", NULL);
-        account->port = port;
-
         gchar *resource = g_key_file_get_string(accounts, name, "resource", NULL);
-        if (resource != NULL) {
-            account->resource = strdup(resource);
-            g_free(resource);
-        } else {
-            account->resource = NULL;
-        }
-
-        gchar *presence = g_key_file_get_string(accounts, name, "presence.last", NULL);
-        if (presence == NULL || (!valid_resource_presence_string(presence))) {
-            account->last_presence = strdup("online");
-        } else {
-            account->last_presence = strdup(presence);
-        }
-
-        if (presence != NULL) {
-            g_free(presence);
-        }
-
-        presence = g_key_file_get_string(accounts, name, "presence.login", NULL);
-        if (presence == NULL) {
-            account->login_presence = strdup("online");
-        } else if (strcmp(presence, "last") == 0) {
-            account->login_presence = strdup("last");
-        } else if (!valid_resource_presence_string(presence)) {
-            account->login_presence = strdup("online");
-        } else {
-            account->login_presence = strdup(presence);
-        }
+        int port = g_key_file_get_integer(accounts, name, "port", NULL);
 
-        if (presence != NULL) {
-            g_free(presence);
-        }
+        gchar *last_presence = g_key_file_get_string(accounts, name, "presence.last", NULL);
+        gchar *login_presence = g_key_file_get_string(accounts, name, "presence.login", NULL);
 
-        account->priority_online = g_key_file_get_integer(accounts, name, "priority.online", NULL);
-        account->priority_chat = g_key_file_get_integer(accounts, name, "priority.chat", NULL);
-        account->priority_away = g_key_file_get_integer(accounts, name, "priority.away", NULL);
-        account->priority_xa = g_key_file_get_integer(accounts, name, "priority.xa", NULL);
-        account->priority_dnd = g_key_file_get_integer(accounts, name, "priority.dnd", NULL);
+        int priority_online = g_key_file_get_integer(accounts, name, "priority.online", NULL);
+        int priority_chat = g_key_file_get_integer(accounts, name, "priority.chat", NULL);
+        int priority_away = g_key_file_get_integer(accounts, name, "priority.away", NULL);
+        int priority_xa = g_key_file_get_integer(accounts, name, "priority.xa", NULL);
+        int priority_dnd = g_key_file_get_integer(accounts, name, "priority.dnd", NULL);
 
         gchar *muc_service = g_key_file_get_string(accounts, name, "muc.service", NULL);
-        if (muc_service == NULL) {
-            GString *g_muc_service = g_string_new("conference.");
-            Jid *jidp = jid_create(account->jid);
-            g_string_append(g_muc_service, jidp->domainpart);
-            account->muc_service = strdup(g_muc_service->str);
-            g_string_free(g_muc_service, TRUE);
-            jid_destroy(jidp);
-        } else {
-            account->muc_service = muc_service;
-        }
-
         gchar *muc_nick = g_key_file_get_string(accounts, name, "muc.nick", NULL);
-        if (muc_nick == NULL) {
-            Jid *jidp = jid_create(account->jid);
-            account->muc_nick = strdup(jidp->localpart);
-            jid_destroy(jidp);
-        } else {
-            account->muc_nick = muc_nick;
-        }
-
-        // get room history
-        account->room_history = NULL;
-        gsize history_size = 0;
-        gchar **room_history_values = g_key_file_get_string_list(accounts, name,
-            "rooms.history", &history_size, NULL);
-
-        if (room_history_values != NULL) {
-            int i = 0;
-            for (i = 0; i < history_size; i++) {
-                account->room_history = g_slist_append(account->room_history,
-                    strdup(room_history_values[i]));
-            }
-
-            g_strfreev(room_history_values);
-        }
 
-        return account;
-    }
-}
+        ProfAccount *new_account = account_new(name, jid, password, enabled,
+            server, port, resource, last_presence, login_presence,
+            priority_online, priority_chat, priority_away, priority_xa,
+            priority_dnd, muc_service, muc_nick);
 
-static char *
-_accounts_create_full_jid(ProfAccount *account)
-{
-    if (account->resource != NULL) {
-        return create_fulljid(account->jid, account->resource);
-    } else {
-        return strdup(account->jid);
-    }
-}
+        g_free(jid);
+        g_free(password);
+        g_free(server);
+        g_free(resource);
+        g_free(last_presence);
+        g_free(login_presence);
+        g_free(muc_service);
+        g_free(muc_nick);
 
-static void
-_accounts_free_account(ProfAccount *account)
-{
-    if (account != NULL) {
-        free(account->name);
-        free(account->jid);
-        free(account->password);
-        free(account->resource);
-        free(account->server);
-        free(account->last_presence);
-        free(account->login_presence);
-        free(account->muc_service);
-        free(account->muc_nick);
-        free(account);
+        return new_account;
     }
 }
 
@@ -745,7 +649,6 @@ accounts_init_module(void)
     accounts_add = _accounts_add;
     accounts_get_list = _accounts_get_list;
     accounts_get_account = _accounts_get_account;
-    accounts_free_account = _accounts_free_account;
     accounts_enable = _accounts_enable;
     accounts_disable = _accounts_disable;
     accounts_rename = _accounts_rename;
@@ -769,6 +672,5 @@ accounts_init_module(void)
     accounts_set_priority_all = _accounts_set_priority_all;
     accounts_get_priority_for_presence_type = _accounts_get_priority_for_presence_type;
     accounts_clear_password = _accounts_clear_password;
-    accounts_create_full_jid = _accounts_create_full_jid;
 }
 
diff --git a/src/config/accounts.h b/src/config/accounts.h
index 74345f0c..2010ff78 100644
--- a/src/config/accounts.h
+++ b/src/config/accounts.h
@@ -26,26 +26,7 @@
 #define MAX_PASSWORD_SIZE 64
 
 #include "common.h"
-
-typedef struct prof_account_t {
-    gchar *name;
-    gchar *jid;
-    gchar *password;
-    gchar *resource;
-    gchar *server;
-    int port;
-    gchar *last_presence;
-    gchar *login_presence;
-    gint priority_online;
-    gint priority_chat;
-    gint priority_away;
-    gint priority_xa;
-    gint priority_dnd;
-    gchar *muc_service;
-    gchar *muc_nick;
-    gboolean enabled;
-    GSList *room_history;
-} ProfAccount;
+#include "config/account.h"
 
 void accounts_init_module(void);
 
@@ -59,7 +40,6 @@ void (*accounts_reset_enabled_search)(void);
 void (*accounts_add)(const char *jid, const char *altdomain, const int port);
 gchar** (*accounts_get_list)(void);
 ProfAccount* (*accounts_get_account)(const char * const name);
-void (*accounts_free_account)(ProfAccount *account);
 gboolean (*accounts_enable)(const char * const name);
 gboolean (*accounts_disable)(const char * const name);
 gboolean (*accounts_rename)(const char * const account_name,
@@ -85,6 +65,5 @@ void (*accounts_set_priority_all)(const char * const account_name, const gint va
 gint (*accounts_get_priority_for_presence_type)(const char * const account_name,
     resource_presence_t presence_type);
 void (*accounts_clear_password)(const char * const account_name);
-char * (*accounts_create_full_jid)(ProfAccount *account);
 
 #endif
diff --git a/src/server_events.c b/src/server_events.c
index 3bea8c02..26612816 100644
--- a/src/server_events.c
+++ b/src/server_events.c
@@ -27,6 +27,7 @@
 #include "log.h"
 #include "muc.h"
 #include "config/preferences.h"
+#include "config/account.h"
 #include "roster_list.h"
 #include "ui/ui.h"
 
@@ -67,7 +68,7 @@ handle_login_account_success(char *account_name)
     status_bar_print_message(account->jid);
     status_bar_refresh();
 
-    accounts_free_account(account);
+    account_free(account);
 }
 
 void
diff --git a/tests/config/mock_accounts.c b/tests/config/mock_accounts.c
index 1f145125..38e6f89a 100644
--- a/tests/config/mock_accounts.c
+++ b/tests/config/mock_accounts.c
@@ -36,25 +36,6 @@ _mock_accounts_get_account(const char * const name)
     return (ProfAccount *)mock();
 }
 
-static char *
-_mock_accounts_create_full_jid(ProfAccount *account)
-{
-    check_expected(account);
-    return (char *)mock();
-}
-
-void
-_stub_accounts_free_account(ProfAccount *account)
-{
-    // do nothing
-}
-
-void
-_mock_accounts_free_account(ProfAccount *account)
-{
-    check_expected(account);
-}
-
 gchar **
 _mock_accounts_get_list(void)
 {
@@ -275,24 +256,6 @@ mock_accounts_get_account(void)
 }
 
 void
-mock_accounts_create_full_jid(void)
-{
-    accounts_create_full_jid = _mock_accounts_create_full_jid;
-}
-
-void
-stub_accounts_free_account(void)
-{
-    accounts_free_account = _stub_accounts_free_account;
-}
-
-void
-mock_accounts_free_account(void)
-{
-    accounts_free_account = _mock_accounts_free_account;
-}
-
-void
 mock_accounts_get_list(void)
 {
     accounts_get_list = _mock_accounts_get_list;
@@ -461,23 +424,6 @@ accounts_get_account_return(ProfAccount *account)
 }
 
 void
-accounts_create_full_jid_return(char *fulljid)
-{
-    expect_any(_mock_accounts_create_full_jid, account);
-    if (fulljid != NULL) {
-        will_return(_mock_accounts_create_full_jid, strdup(fulljid));
-    } else {
-        will_return(_mock_accounts_create_full_jid, NULL);
-    }
-}
-
-void
-accounts_free_account_expect(ProfAccount *account)
-{
-    expect_memory(_mock_accounts_free_account, account, account, sizeof(ProfAccount));
-}
-
-void
 accounts_get_list_return(gchar **accounts)
 {
     will_return(_mock_accounts_get_list, accounts);
diff --git a/tests/config/mock_accounts.h b/tests/config/mock_accounts.h
index b914968a..f70be745 100644
--- a/tests/config/mock_accounts.h
+++ b/tests/config/mock_accounts.h
@@ -24,13 +24,6 @@ void mock_accounts_get_account(void);
 void accounts_get_account_expect_and_return(const char * const name, ProfAccount *account);
 void accounts_get_account_return(ProfAccount *account);
 
-void mock_accounts_create_full_jid(void);
-void accounts_create_full_jid_return(char *fulljid);
-
-void mock_accounts_free_account(void);
-void stub_accounts_free_account(void);
-void accounts_free_account_expect(ProfAccount *account);
-
 void mock_accounts_get_list(void);
 void accounts_get_list_return(gchar **accounts);
 
diff --git a/tests/test_cmd_account.c b/tests/test_cmd_account.c
index 4891930c..51bb33f2 100644
--- a/tests/test_cmd_account.c
+++ b/tests/test_cmd_account.c
@@ -38,9 +38,9 @@ void cmd_account_shows_account_when_connected_and_no_args(void **state)
 {
     mock_cons_show_account();
     mock_accounts_get_account();
-    stub_accounts_free_account();
     CommandHelp *help = malloc(sizeof(CommandHelp));
-    ProfAccount *account = malloc(sizeof(ProfAccount));
+    ProfAccount *account = account_new("jabber_org", "me@jabber.org", NULL,
+        TRUE, NULL, 0, NULL, NULL, NULL, 0, 0, 0, 0, 0, NULL, NULL);
     gchar *args[] = { NULL };
 
     mock_connection_status(JABBER_CONNECTED);
@@ -54,7 +54,6 @@ void cmd_account_shows_account_when_connected_and_no_args(void **state)
     assert_true(result);
 
     free(help);
-    free(account);
 }
 
 void cmd_account_list_shows_accounts(void **state)
@@ -117,10 +116,10 @@ void cmd_account_show_shows_account_when_exists(void **state)
 {
     mock_cons_show_account();
     mock_accounts_get_account();
-    stub_accounts_free_account();
     CommandHelp *help = malloc(sizeof(CommandHelp));
     gchar *args[] = { "show", "account_name", NULL };
-    ProfAccount *account = malloc(sizeof(ProfAccount));
+    ProfAccount *account = account_new("jabber_org", "me@jabber.org", NULL,
+        TRUE, NULL, 0, NULL, NULL, NULL, 0, 0, 0, 0, 0, NULL, NULL);
 
     accounts_get_account_return(account);
 
diff --git a/tests/test_cmd_connect.c b/tests/test_cmd_connect.c
index 6b89efb3..33f49164 100644
--- a/tests/test_cmd_connect.c
+++ b/tests/test_cmd_connect.c
@@ -418,21 +418,19 @@ void cmd_connect_lowercases_argument(void **state)
 void cmd_connect_asks_password_when_not_in_account(void **state)
 {
     stub_cons_show();
-    stub_ui_ask_password();
+    mock_ui_ask_password();
     mock_accounts_get_account();
-    mock_accounts_create_full_jid();
     mock_jabber_connect_with_account();
-    stub_accounts_free_account();
     CommandHelp *help = malloc(sizeof(CommandHelp));
     gchar *args[] = { "jabber_org", NULL };
-    ProfAccount *account = malloc(sizeof(ProfAccount));
-    account->password = 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);
 
-    accounts_create_full_jid_return("user@jabber.org");
+    mock_ui_ask_password_returns("password");
 
     jabber_connect_with_account_return(JABBER_CONNECTING);
 
@@ -440,28 +438,22 @@ void cmd_connect_asks_password_when_not_in_account(void **state)
     assert_true(result);
 
     free(help);
-    free(account);
 }
 
 void cmd_connect_shows_message_when_connecting_with_account(void **state)
 {
     mock_cons_show();
     mock_accounts_get_account();
-    mock_accounts_create_full_jid();
     mock_jabber_connect_with_account();
-    stub_accounts_free_account();
     CommandHelp *help = malloc(sizeof(CommandHelp));
     gchar *args[] = { "jabber_org", NULL };
-    ProfAccount *account = malloc(sizeof(ProfAccount));
-    account->password = "password";
-    account->name = "jabber_org";
+    ProfAccount *account = account_new("jabber_org", "user@jabber.org", "password",
+        TRUE, NULL, 0, "laptop", NULL, NULL, 0, 0, 0, 0, 0, NULL, NULL);
 
     mock_connection_status(JABBER_DISCONNECTED);
 
     accounts_get_account_return(account);
 
-    accounts_create_full_jid_return("user@jabber.org/laptop");
-
     expect_cons_show("Connecting with account jabber_org as user@jabber.org/laptop");
 
     jabber_connect_with_account_return(JABBER_CONNECTING);
@@ -470,61 +462,26 @@ void cmd_connect_shows_message_when_connecting_with_account(void **state)
     assert_true(result);
 
     free(help);
-    free(account);
 }
 
 void cmd_connect_connects_with_account(void **state)
 {
     stub_cons_show();
     mock_accounts_get_account();
-    mock_accounts_create_full_jid();
     mock_jabber_connect_with_account();
-    stub_accounts_free_account();
     CommandHelp *help = malloc(sizeof(CommandHelp));
     gchar *args[] = { "jabber_org", NULL };
-    ProfAccount *account = malloc(sizeof(ProfAccount));
-    account->password = "password";
-    account->name = "jabber_org";
+    ProfAccount *account = account_new("jabber_org", "me@jabber.org", "password",
+        TRUE, NULL, 0, NULL, NULL, NULL, 0, 0, 0, 0, 0, NULL, NULL);
 
     mock_connection_status(JABBER_DISCONNECTED);
 
     accounts_get_account_return(account);
 
-    accounts_create_full_jid_return("user@jabber.org/laptop");
-
     jabber_connect_with_account_expect_and_return(account, JABBER_CONNECTING);
 
     gboolean result = cmd_connect(args, *help);
     assert_true(result);
 
     free(help);
-    free(account);
-}
-
-void cmd_connect_frees_account_after_connecting(void **state)
-{
-    stub_cons_show();
-    mock_accounts_get_account();
-    mock_accounts_create_full_jid();
-    mock_jabber_connect_with_account();
-    mock_accounts_free_account();
-    CommandHelp *help = malloc(sizeof(CommandHelp));
-    gchar *args[] = { "jabber_org", NULL };
-    ProfAccount *account = malloc(sizeof(ProfAccount));
-
-    mock_connection_status(JABBER_DISCONNECTED);
-
-    accounts_get_account_return(account);
-
-    accounts_create_full_jid_return("user@jabber.org/laptop");
-
-    jabber_connect_with_account_return(JABBER_CONNECTING);
-
-    accounts_free_account_expect(account);
-
-    gboolean result = cmd_connect(args, *help);
-    assert_true(result);
-
-    free(help);
-    free(account);
 }
diff --git a/tests/test_cmd_connect.h b/tests/test_cmd_connect.h
index c9859b72..ad27a0a5 100644
--- a/tests/test_cmd_connect.h
+++ b/tests/test_cmd_connect.h
@@ -9,7 +9,6 @@ void cmd_connect_lowercases_argument(void **state);
 void cmd_connect_asks_password_when_not_in_account(void **state);
 void cmd_connect_shows_message_when_connecting_with_account(void **state);
 void cmd_connect_connects_with_account(void **state);
-void cmd_connect_frees_account_after_connecting(void **state);
 void cmd_connect_shows_usage_when_no_server_value(void **state);
 void cmd_connect_shows_usage_when_server_no_port_value(void **state);
 void cmd_connect_shows_usage_when_no_port_value(void **state);
diff --git a/tests/testsuite.c b/tests/testsuite.c
index 3a61e9f5..94a06a87 100644
--- a/tests/testsuite.c
+++ b/tests/testsuite.c
@@ -201,7 +201,6 @@ int main(int argc, char* argv[]) {
         unit_test(cmd_connect_asks_password_when_not_in_account),
         unit_test(cmd_connect_shows_message_when_connecting_with_account),
         unit_test(cmd_connect_connects_with_account),
-        unit_test(cmd_connect_frees_account_after_connecting),
         unit_test(cmd_connect_shows_usage_when_no_server_value),
         unit_test(cmd_connect_shows_usage_when_server_no_port_value),
         unit_test(cmd_connect_shows_usage_when_no_port_value),