about summary refs log tree commit diff stats
path: root/tests/functionaltests/test_roster.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/functionaltests/test_roster.c')
-rw-r--r--tests/functionaltests/test_roster.c121
1 files changed, 121 insertions, 0 deletions
diff --git a/tests/functionaltests/test_roster.c b/tests/functionaltests/test_roster.c
new file mode 100644
index 00000000..ba1c851a
--- /dev/null
+++ b/tests/functionaltests/test_roster.c
@@ -0,0 +1,121 @@
+#include <glib.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <stabber.h>
+#include <expect.h>
+
+#include "proftest.h"
+
+void
+sends_new_item(void **state)
+{
+    prof_connect();
+
+    stbbr_for_query("jabber:iq:roster",
+        "<iq type=\"set\" from=\"stabber@localhost\">"
+            "<query xmlns=\"jabber:iq:roster\">"
+                "<item jid=\"bob@localhost\" subscription=\"none\" name=\"\"/>"
+            "</query>"
+        "</iq>"
+    );
+
+    prof_input("/roster add bob@localhost");
+
+    assert_true(stbbr_received(
+        "<iq type=\"set\" id=\"*\">"
+            "<query xmlns=\"jabber:iq:roster\">"
+                "<item jid=\"bob@localhost\" name=\"\"/>"
+            "</query>"
+        "</iq>"
+    ));
+
+    assert_true(prof_output_exact("Roster item added: bob@localhost"));
+}
+
+void
+sends_new_item_nick(void **state)
+{
+    prof_connect();
+
+    stbbr_for_query("jabber:iq:roster",
+        "<iq type=\"set\" from=\"stabber@localhost\">"
+            "<query xmlns=\"jabber:iq:roster\">"
+                "<item jid=\"bob@localhost\" subscription=\"none\" name=\"Bobby\"/>"
+            "</query>"
+        "</iq>"
+    );
+
+    prof_input("/roster add bob@localhost Bobby");
+
+    assert_true(stbbr_received(
+        "<iq type=\"set\" id=\"*\">"
+            "<query xmlns=\"jabber:iq:roster\">"
+                "<item jid=\"bob@localhost\" name=\"Bobby\"/>"
+            "</query>"
+        "</iq>"
+    ));
+
+    assert_true(prof_output_exact("Roster item added: bob@localhost (Bobby)"));
+}
+
+void
+sends_remove_item(void **state)
+{
+    prof_connect_with_roster(
+        "<iq type=\"result\" to=\"stabber@localhost/profanity\">"
+            "<query xmlns=\"jabber:iq:roster\" ver=\"362\">"
+                "<item jid=\"buddy1@localhost\" subscription=\"both\"/>"
+                "<item jid=\"buddy2@localhost\" subscription=\"both\"/>"
+            "</query>"
+        "</iq>"
+    );
+
+    stbbr_for_query("jabber:iq:roster",
+        "<iq id=\"*\" type=\"set\">"
+            "<query xmlns=\"jabber:iq:roster\">"
+                "<item jid=\"buddy1@localhost\" subscription=\"remove\"/>"
+            "</query>"
+        "</iq>"
+    );
+
+    prof_input("/roster remove buddy1@localhost");
+
+    assert_true(stbbr_received(
+        "<iq type=\"set\" id=\"*\">"
+            "<query xmlns=\"jabber:iq:roster\">"
+                "<item jid=\"buddy1@localhost\" subscription=\"remove\"/>"
+            "</query>"
+        "</iq>"
+    ));
+
+    assert_true(prof_output_exact("Roster item removed: buddy1@localhost"));
+}
+
+void
+sends_nick_change(void **state)
+{
+    prof_connect_with_roster(
+        "<iq type=\"result\" to=\"stabber@localhost/profanity\">"
+            "<query xmlns=\"jabber:iq:roster\" ver=\"362\">"
+                "<item jid=\"buddy1@localhost\" subscription=\"both\"/>"
+            "</query>"
+        "</iq>"
+    );
+
+    prof_input("/roster nick buddy1@localhost Buddy1");
+
+    assert_true(prof_output_exact("Nickname for buddy1@localhost set to: Buddy1."));
+
+    assert_true(stbbr_received(
+        "<iq type=\"set\" id=\"*\">"
+            "<query xmlns=\"jabber:iq:roster\">"
+                "<item jid=\"buddy1@localhost\" name=\"Buddy1\"/>"
+            "</query>"
+        "</iq>"
+    ));
+}