about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2014-01-23 22:38:12 +0000
committerJames Booth <boothj5@gmail.com>2014-01-23 22:38:12 +0000
commite089ffb15ca3918b456e05c6198fc0cd122d08a2 (patch)
tree2512f23ddabfc8c4ff789bffa74898764101da48
parent8dbe300d72e3bdaba672b4a7027ab0f2fb431862 (diff)
downloadprofani-tty-e089ffb15ca3918b456e05c6198fc0cd122d08a2.tar.gz
Show message when alias already exists in /alias add
-rw-r--r--src/command/commands.c7
-rw-r--r--src/config/preferences.c11
-rw-r--r--src/config/preferences.h2
-rw-r--r--tests/test_cmd_alias.c16
-rw-r--r--tests/test_cmd_alias.h1
-rw-r--r--tests/testsuite.c3
6 files changed, 34 insertions, 6 deletions
diff --git a/src/command/commands.c b/src/command/commands.c
index c4390966..5d30d183 100644
--- a/src/command/commands.c
+++ b/src/command/commands.c
@@ -1834,8 +1834,11 @@ cmd_alias(gchar **args, struct cmd_help_t help)
                 cons_show("Usage: %s", help.usage);
                 return TRUE;
             } else {
-                prefs_add_alias(alias, value);
-                cons_show("Command alias added /%s -> %s", alias, value);
+                if (prefs_add_alias(alias, value) == TRUE) {
+                    cons_show("Command alias added /%s -> %s", alias, value);
+                } else {
+                    cons_show("Command alias /%s already exists.", alias);
+                }
                 return TRUE;
             }
         }
diff --git a/src/config/preferences.c b/src/config/preferences.c
index 88e267f4..3107f303 100644
--- a/src/config/preferences.c
+++ b/src/config/preferences.c
@@ -260,11 +260,16 @@ prefs_set_autoaway_time(gint value)
     _save_prefs();
 }
 
-void
+gboolean
 prefs_add_alias(const char * const name, const char * const value)
 {
-    g_key_file_set_string(prefs, PREF_GROUP_ALIAS, name, value);
-    _save_prefs();
+    if (g_key_file_has_key(prefs, PREF_GROUP_ALIAS, name, NULL)) {
+        return FALSE;
+    } else {
+        g_key_file_set_string(prefs, PREF_GROUP_ALIAS, name, value);
+        _save_prefs();
+        return TRUE;
+    }
 }
 
 char *
diff --git a/src/config/preferences.h b/src/config/preferences.h
index 22a175d4..e79137ed 100644
--- a/src/config/preferences.h
+++ b/src/config/preferences.h
@@ -97,7 +97,7 @@ void prefs_set_autoaway_time(gint value);
 
 void prefs_add_login(const char *jid);
 
-void prefs_add_alias(const char * const name, const char * const value);
+gboolean prefs_add_alias(const char * const name, const char * const value);
 gboolean prefs_remove_alias(const char * const name);
 char* prefs_get_alias(const char * const name);
 GList* prefs_get_aliases(void);
diff --git a/tests/test_cmd_alias.c b/tests/test_cmd_alias.c
index bdb16ede..b337b49a 100644
--- a/tests/test_cmd_alias.c
+++ b/tests/test_cmd_alias.c
@@ -94,6 +94,22 @@ void cmd_alias_add_adds_alias(void **state)
     free(help);
 }
 
+void cmd_alias_add_shows_message_when_exists(void **state)
+{
+    mock_cons_show();
+    CommandHelp *help = malloc(sizeof(CommandHelp));
+    gchar *args[] = { "add", "hc", "/help commands", NULL };
+
+    prefs_add_alias("hc", "/help commands");
+
+    expect_cons_show("Command alias /hc already exists.");
+
+    gboolean result = cmd_alias(args, *help);
+    assert_true(result);
+
+    free(help);
+}
+
 void cmd_alias_remove_removes_alias(void **state)
 {
     mock_cons_show();
diff --git a/tests/test_cmd_alias.h b/tests/test_cmd_alias.h
index 1f2df5cd..bd93ef1a 100644
--- a/tests/test_cmd_alias.h
+++ b/tests/test_cmd_alias.h
@@ -3,6 +3,7 @@ void cmd_alias_add_shows_usage_when_no_value(void **state);
 void cmd_alias_remove_shows_usage_when_no_args(void **state);
 void cmd_alias_show_usage_when_invalid_subcmd(void **state);
 void cmd_alias_add_adds_alias(void **state);
+void cmd_alias_add_shows_message_when_exists(void **state);
 void cmd_alias_remove_removes_alias(void **state);
 void cmd_alias_remove_shows_message_when_no_alias(void **state);
 void cmd_alias_list_shows_all_aliases(void **state);
diff --git a/tests/testsuite.c b/tests/testsuite.c
index af42fe7c..1e847716 100644
--- a/tests/testsuite.c
+++ b/tests/testsuite.c
@@ -399,6 +399,9 @@ int main(int argc, char* argv[]) {
         unit_test_setup_teardown(cmd_alias_add_adds_alias,
             create_config_file,
             delete_config_file),
+        unit_test_setup_teardown(cmd_alias_add_shows_message_when_exists,
+            create_config_file,
+            delete_config_file),
         unit_test_setup_teardown(cmd_alias_remove_removes_alias,
             create_config_file,
             delete_config_file),