Tests updated for new lang-fetching
[diaspy.git] / tests.py
index 92b0f61db74e6677fb6dc931e641f927fcea169b..156f405131e24dbb5841a620ddd5f0a9d85f845f 100644 (file)
--- a/tests.py
+++ b/tests.py
@@ -3,11 +3,14 @@
 import unittest
 
 #   failure to import any of the modules below indicates failed tests
+#   =================================================================
 #   modules used by diaspy
-import requests
 import re
+import requests
+import warnings
 #   actual diaspy code
 import diaspy
+from diaspy import client as dclient
 
 
 ####    SETUP STUFF
@@ -32,13 +35,66 @@ test_count_file.write(str(test_count))
 test_count_file.close()
 print('Running test no. {0}'.format(test_count))
 
-print('Running tests on connection to pod: "{0}"\t'.format(__pod__), end='')
+print('Running tests on connection: "{0}:{1}@{2}"\t'.format(testconf.__username__, '*'*len(testconf.__passwd__), __pod__), end='')
 test_connection = diaspy.connection.Connection(pod=__pod__, username=__username__, password=__passwd__)
 test_connection.login()
 print('[ CONNECTED ]\n')
 
+# Setup test aspects
+print('Adding test aspects...\t', end='')
+diaspy.streams.Aspects(test_connection).add(testconf.test_aspect_name_fake)
+testconf.test_aspect_id = diaspy.streams.Aspects(test_connection).add(testconf.test_aspect_name).id
+print('OK')
+
+print([i['name'] for i in test_connection.getUserInfo()['aspects']])
+
+
+post_text = '#diaspy test no. {0}'.format(test_count)
+
+
+#######################################
+####        TEST SUITE CODE        ####
+#######################################
+class ConnectionTest(unittest.TestCase):
+    def testGettingUserInfo(self):
+        info = test_connection.getUserInfo()
+        self.assertEqual(dict, type(info))
+
+
+class MessagesTests(unittest.TestCase):
+    def testGettingMailbox(self):
+        mailbox = diaspy.messages.Mailbox(test_connection)
+        if mailbox: 
+            for i in range(len(mailbox)):
+                self.assertEqual(diaspy.models.Conversation, type(mailbox[i]))
+
+
+class AspectsTests(unittest.TestCase):
+    def testAspectsGettingID(self):
+        aspects = diaspy.streams.Aspects(test_connection)
+        id = aspects.getAspectID(testconf.test_aspect_name)
+        self.assertEqual(testconf.test_aspect_id, id)
+
+    def testAspectsRemoveById(self):
+        aspects = diaspy.streams.Aspects(test_connection)
+        for i in test_connection.getUserInfo()['aspects']:
+            if i['name'] == testconf.test_aspect_name:
+                print(i['id'], end=' ')
+                aspects.remove(id=i['id'])
+                break
+        names = [i['name'] for i in test_connection.getUserInfo()['aspects']]
+        print(names)
+        self.assertNotIn(testconf.test_aspect_name, names)
+
+    def testAspectsRemoveByName(self):
+        aspects = diaspy.streams.Aspects(test_connection)
+        print(testconf.test_aspect_name_fake, end=' ')
+        aspects.remove(name=testconf.test_aspect_name_fake)
+        names = [i['name'] for i in test_connection.getUserInfo()['aspects']]
+        print(names)
+        self.assertNotIn(testconf.test_aspect_name_fake, names)
+
 
-#### Test suite code
 class StreamTest(unittest.TestCase):
     def testGetting(self):
         stream = diaspy.streams.Generic(test_connection)
@@ -58,71 +114,150 @@ class StreamTest(unittest.TestCase):
         stream.update()
         post.delete()
         stream.purge()
-        self.assertNotIn(post.post_id, [p.post_id for p in stream])
+        self.assertNotIn(post.id, [p.id for p in stream])
 
     def testPostingText(self):
         stream = diaspy.streams.Stream(test_connection)
-        post = stream.post('#diaspy test no. {0}'.format(test_count))
+        post = stream.post(post_text)
         self.assertEqual(diaspy.models.Post, type(post))
-
+    
     def testPostingImage(self):
         stream = diaspy.streams.Stream(test_connection)
-        stream.post_picture('./test-image.png')
+        try:
+            stream.post(text=post_text, photo='test-image.png')
+        except (diaspy.errors.StreamError) as e:
+            warnings.warn('{0}')
+        finally:
+            pass
 
     def testingAddingTag(self):
         ft = diaspy.streams.FollowedTags(test_connection)
         ft.add('test')
 
+    def testActivity(self):
+        activity = diaspy.streams.Activity(test_connection)
 
-class ConnectionTest(unittest.TestCase):
-    def testLoginWithoutUsername(self):
-        connection = diaspy.connection.Connection(pod=__pod__)
-        self.assertRaises(diaspy.connection.LoginError, connection.login, password='foo')
+    def testMentionsStream(self):
+        mentions = diaspy.streams.Mentions(test_connection)
 
-    def testLoginWithoutPassword(self):
-        connection = diaspy.connection.Connection(pod=__pod__)
-        self.assertRaises(diaspy.connection.LoginError, connection.login, username='user')
 
-    def testGettingUserInfo(self):
-        info = test_connection.getUserInfo()
-        self.assertEqual(dict, type(info))
+class UserTests(unittest.TestCase):
+    def testHandleSeparatorRaisingExceptions(self):
+        handles = ['user.pod.example.com',
+                   'user@podexamplecom',
+                   '@pod.example.com',
+                   'use r@pod.example.com',
+                   'user0@pod300 example.com',
+                   ]
+        for h in handles:
+            self.assertRaises(Exception, diaspy.people.sephandle, h)
 
+    def testGettingUserByHandleData(self):
+        user = diaspy.people.User(test_connection, handle=testconf.diaspora_id, fetch='data')
+        self.assertEqual(testconf.guid, user['guid'])
+        self.assertEqual(testconf.diaspora_id, user['handle'])
+        self.assertEqual(testconf.diaspora_name, user['name'])
+        self.assertEqual(type(user.stream), list)
+        self.assertEqual(user.stream, [])
+        self.assertIn('id', user.data)
+        self.assertIn('avatar', user.data)
 
-class ClientTests(unittest.TestCase):
-    def testGettingStream(self):
-        client = diaspy.client.Client(test_connection)
-        stream = client.get_stream()
-        if len(stream): self.assertEqual(diaspy.models.Post, type(stream[0]))
+    def testGettingUserByHandlePosts(self):
+        user = diaspy.people.User(test_connection, handle=testconf.diaspora_id)
+        self.assertEqual(testconf.guid, user['guid'])
+        self.assertEqual(testconf.diaspora_id, user['handle'])
+        self.assertEqual(testconf.diaspora_name, user['name'])
+        self.assertIn('id', user.data)
+        self.assertIn('avatar', user.data)
+        self.assertEqual(type(user.stream), diaspy.streams.Outer)
+    def testGettingUserByGUID(self):
+        user = diaspy.people.User(test_connection, guid=testconf.guid)
+        self.assertEqual(testconf.diaspora_id, user['handle'])
+        self.assertEqual(testconf.diaspora_name, user['name'])
+        self.assertIn('id', user.data)
+        self.assertIn('avatar', user.data)
+        self.assertEqual(type(user.stream), diaspy.streams.Outer)
 
-    def testGettingNotifications(self):
-        client = diaspy.client.Client(test_connection)
-        notifications = client.get_notifications()
-        self.assertEqual(list, type(notifications))
-        if notifications: self.assertEqual(dict, type(notifications[0]))
 
-    def testGettingTagAsList(self):
-        client = diaspy.client.Client(test_connection)
-        tag = client.get_tag('foo')
-        self.assertEqual(list, type(tag))
-        if tag: self.assertEqual(diaspy.models.Post, type(tag[0]))
+class ContactsTest(unittest.TestCase):
+    def testGetOnlySharing(self):
+        contacts = diaspy.people.Contacts(test_connection)
+        result = contacts.get(set='only_sharing')
+        for i in result:
+            self.assertEqual(diaspy.people.User, type(i))
 
-    def testGettingTagAsStream(self):
-        client = diaspy.client.Client(test_connection)
-        tag = client.get_tag('foo', stream=True)
-        self.assertEqual(diaspy.streams.Generic, type(tag))
-        if tag: self.assertEqual(diaspy.models.Post, type(tag[0]))
+    def testGetAll(self):
+        contacts = diaspy.people.Contacts(test_connection)
+        result = contacts.get(set='all')
+        for i in result:
+            self.assertEqual(diaspy.people.User, type(i))
 
-    def testGettingMailbox(self):
-        client = diaspy.client.Client(test_connection)
-        mailbox = client.get_mailbox()
-        self.assertEqual(list, type(mailbox))
-        self.assertEqual(diaspy.conversations.Conversation, type(mailbox[0]))
-
-
-if __name__ == '__main__':
-    unittest.main()
-    c = diaspy.connection.Connection(__pod__, __username__, __passwd__)
-    c.login()
-    stream = diaspy.modules.Stream(c)
-    for post in stream:
-        if post['text'] == '#diaspy test': post.delete()
+    def testGet(self):
+        contacts = diaspy.people.Contacts(test_connection)
+        result = contacts.get()
+        for i in result:
+            self.assertEqual(diaspy.people.User, type(i))
+
+
+class PostTests(unittest.TestCase):
+    def testStringConversion(self):
+        s = diaspy.streams.Stream(test_connection)
+
+    def testRepr(self):
+        s = diaspy.streams.Stream(test_connection)
+
+
+class NotificationsTests(unittest.TestCase):
+    def testMarkingRead(self):
+        notifications = diaspy.notifications.Notifications(test_connection)
+        notif = None
+        for n in notifications:
+            if n.unread:
+                notif = n
+                break
+        if notif is not None:
+            n.mark(unread=False)
+        else:
+            warnings.warn('test not sufficient: no unread notifications were found')
+
+
+class SettingsTests(unittest.TestCase):
+    profile = diaspy.settings.Profile(test_connection)
+    account = diaspy.settings.Account(test_connection)
+
+    def testGettingName(self):
+        self.assertEqual(testconf.user_names_tuple, self.profile.getName())
+
+    def testGettingLocation(self):
+        self.assertEqual(testconf.user_location_string, self.profile.getLocation())
+
+    def testGettingGender(self):
+        self.assertEqual(testconf.user_gender_string, self.profile.getGender())
+
+    def testGettingBirthDate(self):
+        self.assertEqual(testconf.user_date_of_birth, self.profile.getBirthDate(named_month=False))
+        self.assertEqual(testconf.user_date_of_birth_named, self.profile.getBirthDate(named_month=True))
+
+    def testGettingInfoIfProfileIsSearchable(self):
+        self.assertEqual(testconf.user_is_searchable, self.profile.isSearchable())
+
+    def testGettingInfoIfProfileIsNSFW(self):
+        self.assertEqual(testconf.user_is_nsfw, self.profile.isNSFW())
+
+    def testGettingTags(self):
+        self.assertEqual(sorted(testconf.user_tags), sorted(self.profile.getTags()))
+
+    def testGettingLanguages(self):
+        self.assertIn(('en', 'English'), self.account.getLanguages())
+
+    def testGettingEmail(self):
+        self.assertEqual(testconf.user_email, self.account.getEmail())
+
+
+if __name__ == '__main__': 
+    print('Hello World!')
+    print('It\'s testing time!')
+    n = unittest.main()
+    print(n)
+    print('It was testing time!')