From eab66ddd613bb94158ce209cf2cd22ba1d55558b Mon Sep 17 00:00:00 2001
From: Nico Alt <nicoalt@posteo.org>
Date: Sun, 7 Jun 2020 13:00:01 +0000
Subject: [PATCH] Add more tests for contacts

---
 briar_wrapper/models/contacts.py            | 14 +++--
 tests/briar_wrapper/models/test_contacts.py | 65 ++++++++++++++++++---
 2 files changed, 64 insertions(+), 15 deletions(-)

diff --git a/briar_wrapper/models/contacts.py b/briar_wrapper/models/contacts.py
index b256a8c..9619c28 100644
--- a/briar_wrapper/models/contacts.py
+++ b/briar_wrapper/models/contacts.py
@@ -16,21 +16,23 @@ class Contacts(Model):
 
     API_ENDPOINT = "contacts/"
 
-    _on_contact_added_callback = None
-
     def add_pending(self, link, alias):
-        url = urljoin(BASE_HTTP_URL, self.API_ENDPOINT + "add/" + "pending/")
+        url = urljoin(BASE_HTTP_URL, self.API_ENDPOINT + "add/pending/")
         _post(url, headers=self._headers, json={"link": link, "alias": alias})
 
     def get(self):
         url = urljoin(BASE_HTTP_URL, self.API_ENDPOINT)
         request = _get(url, headers=self._headers)
         contacts = request.json()
-        contacts.sort(key=itemgetter("lastChatActivity"),
-                      reverse=True)
+        contacts = Contacts._sort_contact_list(contacts)
         return contacts
 
     def get_link(self):
-        url = urljoin(BASE_HTTP_URL, self.API_ENDPOINT + "add/" + "link/")
+        url = urljoin(BASE_HTTP_URL, self.API_ENDPOINT + "add/link/")
         request = _get(url, headers=self._headers).json()
         return request['link']
+
+    def _sort_contact_list(contacts):
+        contacts.sort(key=itemgetter("lastChatActivity"),
+                      reverse=True)
+        return contacts
diff --git a/tests/briar_wrapper/models/test_contacts.py b/tests/briar_wrapper/models/test_contacts.py
index f20ed4a..1bc9879 100644
--- a/tests/briar_wrapper/models/test_contacts.py
+++ b/tests/briar_wrapper/models/test_contacts.py
@@ -10,14 +10,32 @@ from briar_wrapper.models.contacts import Contacts
 
 BASE_HTTP_URL = "http://localhost:7000/v1/contacts/"
 
-TEST_LINK = "briar://wvui4uvhbfv4tzo6xwngknebsxrafainnhldyfj63x6ipp4q2vigy"
 TEST_ALIAS = "Alice"
 
+TEST_CONTACT_FIRST = {
+    "lastChatActivity": 1
+}
+TEST_CONTACT_SECOND = {
+    "lastChatActivity": 2
+}
+TEST_CONTACT_RESPONSE_SINGLE = [
+    TEST_CONTACT_FIRST
+]
+TEST_CONTACT_RESPONSE_TWO_UNORDERED = [
+    TEST_CONTACT_FIRST,
+    TEST_CONTACT_SECOND
+]
+TEST_CONTACT_RESPONSE_TWO_ORDERED = [
+    TEST_CONTACT_SECOND,
+    TEST_CONTACT_FIRST
+]
+
+TEST_LINK = "briar://wvui4uvhbfv4tzo6xwngknebsxrafainnhldyfj63x6ipp4q2vigy"
+
 
 @requests_mock.Mocker(kw="requests_mock")
 def test_add_pending(api, request_headers, requests_mock):
     contacts = Contacts(api)
-
     requests_mock.register_uri("POST",
                                BASE_HTTP_URL + "add/pending/",
                                request_headers=request_headers,
@@ -25,15 +43,48 @@ def test_add_pending(api, request_headers, requests_mock):
     contacts.add_pending(TEST_LINK, TEST_ALIAS)
 
 
+def match_request_add_pending(request):
+    return {"alias": TEST_ALIAS, "link": TEST_LINK} == request.json()
+
+
+@requests_mock.Mocker(kw='requests_mock')
+def test_get(api, request_headers, requests_mock):
+    contacts = Contacts(api)
+    requests_mock.register_uri("GET", BASE_HTTP_URL,
+                               request_headers=request_headers,
+                               text=json.dumps(TEST_CONTACT_RESPONSE_SINGLE))
+    assert contacts.get() == TEST_CONTACT_RESPONSE_SINGLE
+
+
 @requests_mock.Mocker(kw='requests_mock')
 def test_get_empty(api, request_headers, requests_mock):
     contacts = Contacts(api)
-    response = []
+    requests_mock.register_uri("GET", BASE_HTTP_URL,
+                               request_headers=request_headers,
+                               text=json.dumps([]))
+    assert contacts.get() == []
+
 
+@requests_mock.Mocker(kw='requests_mock')
+def test_get_unordered(api, request_headers, requests_mock):
+    contacts = Contacts(api)
     requests_mock.register_uri("GET", BASE_HTTP_URL,
                                request_headers=request_headers,
-                               text=json.dumps(response))
-    assert contacts.get() == response
+                               text=json.dumps(
+                                   TEST_CONTACT_RESPONSE_TWO_UNORDERED)
+                               )
+    assert contacts.get() == TEST_CONTACT_RESPONSE_TWO_ORDERED
+
+
+@requests_mock.Mocker(kw='requests_mock')
+def test_get_ordered(api, request_headers, requests_mock):
+    contacts = Contacts(api)
+    requests_mock.register_uri("GET", BASE_HTTP_URL,
+                               request_headers=request_headers,
+                               text=json.dumps(
+                                   TEST_CONTACT_RESPONSE_TWO_ORDERED)
+                               )
+    assert contacts.get() == TEST_CONTACT_RESPONSE_TWO_ORDERED
 
 
 @requests_mock.Mocker(kw='requests_mock')
@@ -45,7 +96,3 @@ def test_get_link(api, request_headers, requests_mock):
                                request_headers=request_headers,
                                text=json.dumps(response))
     assert contacts.get_link() == TEST_LINK
-
-
-def match_request_add_pending(request):
-    return {"alias": TEST_ALIAS, "link": TEST_LINK} == request.json()
-- 
GitLab