#!/usr/bin/env python3
+from __future__ import print_function
+
import unittest
-# failure to import any of the modules below indicates failed tests
-# modules used by diaspy
-import requests
+# failure to import any of the modules below indicates failed tests
+# =================================================================
+# modules used by diaspy
import re
-# actual diaspy code
+import requests
+import warnings
+# actual diaspy code
import diaspy
-#### SETUP STUFF
-#### test suite configuration variables: can be adjusted to your liking
+#### SETUP STUFF
+#### test suite configuration variables: can be adjusted to your liking
import testconf
__pod__ = testconf.__pod__
__username__ = testconf.__username__
# Test counter
try:
- test_count_file = open('TEST_COUNT', 'r')
- test_count = int(test_count_file.read())
- test_count_file.close()
+ test_count_file = open('TEST_COUNT', 'r')
+ test_count = int(test_count_file.read())
+ test_count_file.close()
except (IOError, ValueError):
- test_count = 0
+ test_count = 0
finally:
- test_count += 1
+ test_count += 1
test_count_file = open('TEST_COUNT', 'w')
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.getUserData()['aspects']])
+
+
post_text = '#diaspy test no. {0}'.format(test_count)
#### TEST SUITE CODE ####
#######################################
class ConnectionTest(unittest.TestCase):
- def testLoginWithoutUsername(self):
- connection = diaspy.connection.Connection(pod=__pod__)
- self.assertRaises(diaspy.connection.LoginError, connection.login, password='foo')
-
- def testLoginWithoutPassword(self):
- connection = diaspy.connection.Connection(pod=__pod__)
- self.assertRaises(diaspy.connection.LoginError, connection.login, username='user')
+ def testGettingUserInfo(self):
+ info = test_connection.getUserData()
+ self.assertEqual(dict, type(info))
- 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 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 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]))
+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 testGettingTag(self):
- client = diaspy.client.Client(test_connection)
- tag = client.get_tag('foo')
- self.assertEqual(diaspy.streams.Generic, type(tag))
- if tag: self.assertEqual(diaspy.models.Post, type(tag[0]))
+ def testAspectsRemoveById(self):
+ aspects = diaspy.streams.Aspects(test_connection)
+ for i in test_connection.getUserData()['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.getUserData()['aspects']]
+ print(names)
+ self.assertNotIn(testconf.test_aspect_name, names)
- 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]))
+ 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.getUserData()['aspects']]
+ print(names)
+ self.assertNotIn(testconf.test_aspect_name_fake, names)
class StreamTest(unittest.TestCase):
- def testGetting(self):
- stream = diaspy.streams.Generic(test_connection)
+ def testGetting(self):
+ stream = diaspy.streams.Generic(test_connection)
+
+ def testGettingLength(self):
+ stream = diaspy.streams.Generic(test_connection)
+ len(stream)
+
+ def testClearing(self):
+ stream = diaspy.streams.Stream(test_connection)
+ stream.clear()
+ self.assertEqual(0, len(stream))
- def testGettingLength(self):
- stream = diaspy.streams.Generic(test_connection)
- len(stream)
+ def testPurging(self):
+ stream = diaspy.streams.Stream(test_connection)
+ post = stream.post('#diaspy test')
+ stream.update()
+ post.delete()
+ stream.purge()
+ self.assertNotIn(post.id, [p.id for p in stream])
- def testClearing(self):
- stream = diaspy.streams.Stream(test_connection)
- stream.clear()
- self.assertEqual(0, len(stream))
+ def testPostingText(self):
+ stream = diaspy.streams.Stream(test_connection)
+ post = stream.post(post_text)
+ self.assertEqual(diaspy.models.Post, type(post))
- def testPurging(self):
- stream = diaspy.streams.Stream(test_connection)
- post = stream.post('#diaspy test')
- stream.update()
- post.delete()
- stream.purge()
- self.assertNotIn(post.post_id, [p.post_id for p in stream])
+ def testPostingImage(self):
+ stream = diaspy.streams.Stream(test_connection)
+ try:
+ stream.post(text=post_text, photo='test-image.png')
+ except (diaspy.errors.StreamError) as e:
+ warnings.warn('{0}')
+ finally:
+ pass
- def testPostingText(self):
- stream = diaspy.streams.Stream(test_connection)
- post = stream.post('#diaspy test no. {0}'.format(test_count))
- self.assertEqual(diaspy.models.Post, type(post))
+ def testingAddingTag(self):
+ ft = diaspy.streams.FollowedTags(test_connection)
+ ft.add('test')
- def testPostingImage(self):
- stream = diaspy.streams.Stream(test_connection)
- stream.post_picture('test-image.png')
+ def testActivity(self):
+ activity = diaspy.streams.Activity(test_connection)
- def testingAddingTag(self):
- ft = diaspy.streams.FollowedTags(test_connection)
- ft.add('test')
+ def testMentionsStream(self):
+ mentions = diaspy.streams.Mentions(test_connection)
class UserTests(unittest.TestCase):
- def testHandleSeparatorRaisingExceptions(self):
- user = diaspy.people.User(test_connection)
- 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, user._sephandle, h)
-
- def testGettingUserByHandle(self):
- user = diaspy.people.User(test_connection)
- user.fetchhandle(testconf.diaspora_id)
- self.assertEqual(testconf.guid, user['guid'])
- self.assertEqual(testconf.diaspora_name, user['diaspora_name'])
- self.assertIn('id', user.data)
- self.assertIn('image_urls', user.data)
- self.assertEqual(type(user.stream), diaspy.streams.Outer)
-
- def testGettingUserByGUID(self):
- user = diaspy.people.User(test_connection)
- user.fetchguid(testconf.guid)
- self.assertEqual(testconf.diaspora_id, user['diaspora_id'])
- self.assertEqual(testconf.diaspora_name, user['diaspora_name'])
- self.assertIn('id', user.data)
- self.assertIn('image_urls', user.data)
- self.assertEqual(type(user.stream), diaspy.streams.Outer)
-
-
-if __name__ == '__main__': unittest.main()
+ 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)
+
+ 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['diaspora_id'])
+ 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['diaspora_id'])
+ self.assertEqual(testconf.diaspora_name, user['name'])
+ self.assertIn('id', user.data)
+ self.assertIn('avatar', user.data['profile'])
+ self.assertEqual(type(user.stream), diaspy.streams.Outer)
+
+ def testReprMethod(self):
+ user = diaspy.people.User(test_connection, guid=testconf.guid)
+ repr(user)
+ print(user)
+
+
+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 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 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('Good! All tests passed!')