about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rwxr-xr-xconfigure-debug2
-rw-r--r--tests/test_server_events.c41
-rw-r--r--tests/test_server_events.h3
-rw-r--r--tests/testsuite.c11
-rw-r--r--tests/ui/mock_ui.c49
-rw-r--r--tests/ui/mock_ui.h4
6 files changed, 102 insertions, 8 deletions
diff --git a/configure-debug b/configure-debug
index 9819cfeb..b2e19383 100755
--- a/configure-debug
+++ b/configure-debug
@@ -1,3 +1,3 @@
 #!/bin/sh
 
-./configure CFLAGS='-g -O0' CXXFLAGS='-g -O0'
+./configure --enable-otr CFLAGS='-g -O0' CXXFLAGS='-g -O0'
diff --git a/tests/test_server_events.c b/tests/test_server_events.c
index e8a1de33..547e3d70 100644
--- a/tests/test_server_events.c
+++ b/tests/test_server_events.c
@@ -8,6 +8,7 @@
 
 #include "server_events.h"
 #include "roster_list.h"
+#include "chat_session.h"
 #include "config/preferences.h"
 #include "ui/ui.h"
 #include "ui/mock_ui.h"
@@ -108,8 +109,46 @@ void console_shows_dnd_presence_when_set_all(void **state)
 void handle_message_stanza_error_when_no_from(void **state)
 {
     char *err_msg = "Some error.";
-    mock_ui_handle_error();
+
     expect_ui_handle_error(err_msg);
 
     handle_message_error(NULL, "cancel", err_msg);
 }
+
+void handle_message_stanza_error_from_cancel(void **state)
+{
+    char *err_msg = "Some error.";
+    char *from = "bob@server.com";
+    prefs_set_boolean(PREF_STATES, FALSE);
+    chat_sessions_init();
+
+    expect_ui_handle_recipient_not_found(from, err_msg);
+
+    handle_message_error(from, "cancel", err_msg);
+}
+
+void handle_message_stanza_error_from_cancel_disables_chat_session(void **state)
+{
+    char *err_msg = "Some error.";
+    char *from = "bob@server.com";
+    stub_ui_handle_recipient_not_found();
+    prefs_set_boolean(PREF_STATES, TRUE);
+    chat_sessions_init();
+    chat_session_start(from, TRUE);
+
+    handle_message_error(from, "cancel", err_msg);
+    gboolean chat_session_supported = chat_session_get_recipient_supports(from);
+
+    assert_false(chat_session_supported);
+    chat_sessions_clear();
+}
+
+void handle_message_stanza_error_from_no_type(void **state)
+{
+    char *err_msg = "Some error.";
+    char *from = "bob@server.com";
+
+    expect_ui_handle_recipient_error(from, err_msg);
+
+    handle_message_error(from, NULL, err_msg);
+}
diff --git a/tests/test_server_events.h b/tests/test_server_events.h
index c238bc07..c0f5dec4 100644
--- a/tests/test_server_events.h
+++ b/tests/test_server_events.h
@@ -5,3 +5,6 @@ void console_doesnt_show_dnd_presence_when_set_none(void **state);
 void console_doesnt_show_dnd_presence_when_set_online(void **state);
 void console_shows_dnd_presence_when_set_all(void **state);
 void handle_message_stanza_error_when_no_from(void **state);
+void handle_message_stanza_error_from_cancel(void **stanza);
+void handle_message_stanza_error_from_cancel_disables_chat_session(void **stanza);
+void handle_message_stanza_error_from_no_type(void **state);
diff --git a/tests/testsuite.c b/tests/testsuite.c
index 2e4b35cb..ea9a191e 100644
--- a/tests/testsuite.c
+++ b/tests/testsuite.c
@@ -389,7 +389,14 @@ int main(int argc, char* argv[]) {
         unit_test_setup_teardown(console_shows_dnd_presence_when_set_all,
             init_preferences,
             close_preferences),
-        unit_test(handle_message_stanza_error_when_no_from)
+        unit_test(handle_message_stanza_error_when_no_from),
+        unit_test_setup_teardown(handle_message_stanza_error_from_cancel,
+            init_preferences,
+            close_preferences),
+        unit_test_setup_teardown(handle_message_stanza_error_from_cancel_disables_chat_session,
+            init_preferences,
+            close_preferences),
+        unit_test(handle_message_stanza_error_from_no_type),
     };
 
     const UnitTest cmd_alias_tests[] = {
@@ -436,8 +443,8 @@ int main(int argc, char* argv[]) {
     PROF_RUN_TESTS(contact_tests);
     PROF_RUN_TESTS(cmd_statuses_tests);
     PROF_RUN_TESTS(preferences_tests);
-    PROF_RUN_TESTS(server_events_tests);
     PROF_RUN_TESTS(cmd_alias_tests);
+    PROF_RUN_TESTS(server_events_tests);
 
     fflush(stdout);
     dup2(bak, 1);
diff --git a/tests/ui/mock_ui.c b/tests/ui/mock_ui.c
index 5e2be5f6..feeed9db 100644
--- a/tests/ui/mock_ui.c
+++ b/tests/ui/mock_ui.c
@@ -29,6 +29,8 @@
 
 char output[256];
 
+// Mocks and stubs
+
 static
 void _mock_cons_show(const char * const msg, ...)
 {
@@ -99,10 +101,33 @@ void _mock_ui_handle_error(const char * const err_msg)
 }
 
 static
+void _mock_ui_handle_recipient_error(const char * const recipient,
+    const char * const err_msg)
+{
+    check_expected(recipient);
+    check_expected(err_msg);
+}
+
+static
+void _mock_ui_handle_recipient_not_found(const char * const recipient,
+    const char * const err_msg)
+{
+    check_expected(recipient);
+    check_expected(err_msg);
+}
+
+static
 void _stub_ui_chat_win_contact_online(PContact contact, Resource *resource, GDateTime *last_activity)
 {
 }
 
+static
+void _stub_ui_handle_recipient_not_found(const char * const recipient, const char * const err_msg)
+{
+}
+
+// bind mocks and stubs
+
 void
 mock_cons_show(void)
 {
@@ -146,7 +171,6 @@ mock_cons_show_account_list(void)
     cons_show_account_list = _mock_cons_show_account_list;
 }
 
-
 void
 mock_ui_ask_password(void)
 {
@@ -166,11 +190,13 @@ stub_cons_show(void)
 }
 
 void
-mock_ui_handle_error(void)
+stub_ui_handle_recipient_not_found(void)
 {
-    ui_handle_error = _mock_ui_handle_error;
+    ui_handle_recipient_not_found = _stub_ui_handle_recipient_not_found;
 }
 
+// expectations
+
 void
 expect_cons_show(char *output)
 {
@@ -229,5 +255,22 @@ mock_ui_ask_password_returns(char *password)
 void
 expect_ui_handle_error(char *err_msg)
 {
+    ui_handle_error = _mock_ui_handle_error;
     expect_string(_mock_ui_handle_error, err_msg, err_msg);
 }
+
+void
+expect_ui_handle_recipient_error(char *recipient, char *err_msg)
+{
+    ui_handle_recipient_error = _mock_ui_handle_recipient_error;
+    expect_string(_mock_ui_handle_recipient_error, recipient, recipient);
+    expect_string(_mock_ui_handle_recipient_error, err_msg, err_msg);
+}
+
+void
+expect_ui_handle_recipient_not_found(char *recipient, char *err_msg)
+{
+    ui_handle_recipient_not_found = _mock_ui_handle_recipient_not_found;
+    expect_string(_mock_ui_handle_recipient_not_found, recipient, recipient);
+    expect_string(_mock_ui_handle_recipient_not_found, err_msg, err_msg);
+}
diff --git a/tests/ui/mock_ui.h b/tests/ui/mock_ui.h
index a7a53e53..258cb10c 100644
--- a/tests/ui/mock_ui.h
+++ b/tests/ui/mock_ui.h
@@ -18,8 +18,10 @@ void stub_ui_chat_win_contact_online(void);
 void mock_cons_show_error(void);
 void expect_cons_show_error(char *output);
 
-void mock_ui_handle_error(void);
+void stub_ui_handle_recipient_not_found(void);
 void expect_ui_handle_error(char *err_msg);
+void expect_ui_handle_recipient_error(char *recipient, char *err_msg);
+void expect_ui_handle_recipient_not_found(char *recipient, char *err_msg);
 
 void mock_cons_show_account(void);
 void expect_cons_show_account(ProfAccount *account);