One-to-rule-them-all version of `post()` method (with tests)
[diaspy.git] / tests.py
1 #!/usr/bin/env python3
2
3 import unittest
4
5 # failure to import any of the modules below indicates failed tests
6 # modules used by diaspy
7 import requests
8 import re
9 # actual diaspy code
10 import diaspy
11
12
13 #### SETUP STUFF
14 #### test suite configuration variables: can be adjusted to your liking
15 import testconf
16 __pod__ = testconf.__pod__
17 __username__ = testconf.__username__
18 __passwd__ = testconf.__passwd__
19
20
21 # Test counter
22 try:
23 test_count_file = open('TEST_COUNT', 'r')
24 test_count = int(test_count_file.read())
25 test_count_file.close()
26 except (IOError, ValueError):
27 test_count = 0
28 finally:
29 test_count += 1
30 test_count_file = open('TEST_COUNT', 'w')
31 test_count_file.write(str(test_count))
32 test_count_file.close()
33 print('Running test no. {0}'.format(test_count))
34
35 print('Running tests on connection to pod: "{0}"\t'.format(__pod__), end='')
36 test_connection = diaspy.connection.Connection(pod=__pod__, username=__username__, password=__passwd__)
37 test_connection.login()
38 print('[ CONNECTED ]\n')
39
40 post_text = '#diaspy test no. {0}'.format(test_count)
41
42
43 #######################################
44 #### TEST SUITE CODE ####
45 #######################################
46 class ConnectionTest(unittest.TestCase):
47 def testLoginWithoutUsername(self):
48 connection = diaspy.connection.Connection(pod=__pod__)
49 self.assertRaises(diaspy.connection.LoginError, connection.login, password='foo')
50
51 def testLoginWithoutPassword(self):
52 connection = diaspy.connection.Connection(pod=__pod__)
53 self.assertRaises(diaspy.connection.LoginError, connection.login, username='user')
54
55 def testGettingUserInfo(self):
56 info = test_connection.getUserInfo()
57 self.assertEqual(dict, type(info))
58
59
60 class ClientTests(unittest.TestCase):
61 def testGettingStream(self):
62 client = diaspy.client.Client(test_connection)
63 stream = client.get_stream()
64 if len(stream): self.assertEqual(diaspy.models.Post, type(stream[0]))
65
66 def testGettingNotifications(self):
67 client = diaspy.client.Client(test_connection)
68 notifications = client.get_notifications()
69 self.assertEqual(list, type(notifications))
70 if notifications: self.assertEqual(dict, type(notifications[0]))
71
72 def testGettingTag(self):
73 client = diaspy.client.Client(test_connection)
74 tag = client.get_tag('foo')
75 self.assertEqual(diaspy.streams.Generic, type(tag))
76 if tag: self.assertEqual(diaspy.models.Post, type(tag[0]))
77
78 def testGettingMailbox(self):
79 client = diaspy.client.Client(test_connection)
80 mailbox = client.get_mailbox()
81 self.assertEqual(list, type(mailbox))
82 self.assertEqual(diaspy.conversations.Conversation, type(mailbox[0]))
83
84
85 class StreamTest(unittest.TestCase):
86 def testGetting(self):
87 stream = diaspy.streams.Generic(test_connection)
88
89 def testGettingLength(self):
90 stream = diaspy.streams.Generic(test_connection)
91 len(stream)
92
93 def testClearing(self):
94 stream = diaspy.streams.Stream(test_connection)
95 stream.clear()
96 self.assertEqual(0, len(stream))
97
98 def testPurging(self):
99 stream = diaspy.streams.Stream(test_connection)
100 post = stream.post('#diaspy test')
101 stream.update()
102 post.delete()
103 stream.purge()
104 self.assertNotIn(post.post_id, [p.post_id for p in stream])
105
106 def testPostingText(self):
107 stream = diaspy.streams.Stream(test_connection)
108 post = stream.post(post_text)
109 self.assertEqual(diaspy.models.Post, type(post))
110
111 def testPostingImage(self):
112 stream = diaspy.streams.Stream(test_connection)
113 stream.post(text=post_text, photo='test-image.png')
114
115 def testingAddingTag(self):
116 ft = diaspy.streams.FollowedTags(test_connection)
117 ft.add('test')
118
119
120 class UserTests(unittest.TestCase):
121 def testHandleSeparatorRaisingExceptions(self):
122 user = diaspy.people.User(test_connection)
123 handles = ['user.pod.example.com',
124 'user@podexamplecom',
125 '@pod.example.com',
126 'use r@pod.example.com',
127 'user0@pod300 example.com',
128 ]
129 for h in handles:
130 self.assertRaises(Exception, user._sephandle, h)
131
132 def testGettingUserByHandle(self):
133 user = diaspy.people.User(test_connection)
134 user.fetchhandle(testconf.diaspora_id)
135 self.assertEqual(testconf.guid, user['guid'])
136 self.assertEqual(testconf.diaspora_name, user['diaspora_name'])
137 self.assertIn('id', user.data)
138 self.assertIn('image_urls', user.data)
139 self.assertEqual(type(user.stream), diaspy.streams.Outer)
140
141 def testGettingUserByGUID(self):
142 user = diaspy.people.User(test_connection)
143 user.fetchguid(testconf.guid)
144 self.assertEqual(testconf.diaspora_id, user['diaspora_id'])
145 self.assertEqual(testconf.diaspora_name, user['diaspora_name'])
146 self.assertIn('id', user.data)
147 self.assertIn('image_urls', user.data)
148 self.assertEqual(type(user.stream), diaspy.streams.Outer)
149
150
151 if __name__ == '__main__': unittest.main()