Erik Grinaker is sharing code with you
Bitbucket is a code hosting site. Unlimited public and private repositories. Free for small teams.
Don't show this againRevelation / test / entry.py
- commit
- cff0e6f7ef34
- parent
- e0a14b958359
- branch
- default
- tags
- revelation-0.4.0-pre2
bumped version number to 0.4.0-pre2
1 |
116c99733a1d
|
#!/usr/bin/env python |
2 |
116c99733a1d
|
|
3 |
116c99733a1d
|
# |
4 |
b6047522c64d
|
# Revelation 0.2.0 - a password manager for GNOME 2 |
5 |
116c99733a1d
|
# http://oss.codepoet.no/revelation/ |
6 |
b6047522c64d
|
# $Id$ |
7 |
116c99733a1d
|
# |
8 |
116c99733a1d
|
# Unit tests for entry module |
9 |
116c99733a1d
|
# |
10 |
116c99733a1d
|
# |
11 |
07c1fb2b0c27
|
# Copyright (c) 2003-2005 Erik Grinaker |
12 |
116c99733a1d
|
# |
13 |
116c99733a1d
|
# This program is free software; you can redistribute it and/or |
14 |
116c99733a1d
|
# modify it under the terms of the GNU General Public License |
15 |
116c99733a1d
|
# as published by the Free Software Foundation; either version 2 |
16 |
116c99733a1d
|
# of the License, or (at your option) any later version. |
17 |
116c99733a1d
|
# |
18 |
116c99733a1d
|
# This program is distributed in the hope that it will be useful, |
19 |
116c99733a1d
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
20 |
116c99733a1d
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
21 |
116c99733a1d
|
# GNU General Public License for more details. |
22 |
116c99733a1d
|
# |
23 |
116c99733a1d
|
# You should have received a copy of the GNU General Public License |
24 |
116c99733a1d
|
# along with this program; if not, write to the Free Software |
25 |
116c99733a1d
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
26 |
116c99733a1d
|
# |
27 |
116c99733a1d
|
|
28 |
116c99733a1d
|
import time, unittest |
29 |
116c99733a1d
|
|
30 |
116c99733a1d
|
from revelation import entry |
31 |
116c99733a1d
|
|
32 |
116c99733a1d
|
|
33 |
116c99733a1d
|
|
34 |
116c99733a1d
|
class Entry(unittest.TestCase): |
35 |
116c99733a1d
|
"Required entries exists" |
36 |
116c99733a1d
|
|
37 |
116c99733a1d
|
def test_entries(self): |
38 |
116c99733a1d
|
"entries are successfully init'ed" |
39 |
116c99733a1d
|
|
40 |
116c99733a1d
|
for e in entry.ENTRYLIST: |
41 |
116c99733a1d
|
e() |
42 |
116c99733a1d
|
|
43 |
116c99733a1d
|
|
44 |
116c99733a1d
|
def test_entrylist(self): |
45 |
116c99733a1d
|
"entry.ENTRYLIST contains all required entry types" |
46 |
116c99733a1d
|
|
47 |
116c99733a1d
|
entries = [ |
48 |
116c99733a1d
|
entry.FolderEntry, |
49 |
116c99733a1d
|
entry.CreditcardEntry, |
50 |
116c99733a1d
|
entry.CryptoKeyEntry, |
51 |
116c99733a1d
|
entry.DatabaseEntry, |
52 |
116c99733a1d
|
entry.DoorEntry, |
53 |
116c99733a1d
|
entry.EmailEntry, |
54 |
116c99733a1d
|
entry.FTPEntry, |
55 |
116c99733a1d
|
entry.GenericEntry, |
56 |
116c99733a1d
|
entry.PhoneEntry, |
57 |
116c99733a1d
|
entry.ShellEntry, |
58 |
116c99733a1d
|
entry.WebEntry |
59 |
116c99733a1d
|
] |
60 |
116c99733a1d
|
|
61 |
116c99733a1d
|
for e in entries: |
62 |
116c99733a1d
|
self.assertEquals(e in entry.ENTRYLIST, True) |
63 |
116c99733a1d
|
|
64 |
116c99733a1d
|
|
65 |
116c99733a1d
|
|
66 |
116c99733a1d
|
class Entry__init(unittest.TestCase): |
67 |
116c99733a1d
|
"Entry.__init__()" |
68 |
116c99733a1d
|
|
69 |
116c99733a1d
|
def test_updated(self): |
70 |
116c99733a1d
|
"Entry.__init__() sets update-time to now" |
71 |
116c99733a1d
|
|
72 |
116c99733a1d
|
self.assertEquals(entry.GenericEntry().updated, int(time.time())) |
73 |
116c99733a1d
|
|
74 |
116c99733a1d
|
|
75 |
116c99733a1d
|
|
76 |
116c99733a1d
|
class Entry__getitem(unittest.TestCase): |
77 |
116c99733a1d
|
"Entry.__getitem__()" |
78 |
116c99733a1d
|
|
79 |
116c99733a1d
|
def test_inv_field(self): |
80 |
116c99733a1d
|
"Entry.__getitem__() raises EntryFieldError on invalid field" |
81 |
116c99733a1d
|
|
82 |
116c99733a1d
|
e = entry.GenericEntry() |
83 |
116c99733a1d
|
self.assertRaises(entry.EntryFieldError, e.__getitem__, entry.URLField) |
84 |
116c99733a1d
|
|
85 |
116c99733a1d
|
|
86 |
116c99733a1d
|
def test_value(self): |
87 |
116c99733a1d
|
"Entry.__getitem__() returns the field value" |
88 |
116c99733a1d
|
|
89 |
116c99733a1d
|
e = entry.GenericEntry() |
90 |
116c99733a1d
|
e.get_field(entry.HostnameField).value = "test123" |
91 |
116c99733a1d
|
|
92 |
116c99733a1d
|
self.assertEquals(e[entry.HostnameField], "test123") |
93 |
116c99733a1d
|
|
94 |
116c99733a1d
|
|
95 |
116c99733a1d
|
|
96 |
116c99733a1d
|
class Entry__setitem(unittest.TestCase): |
97 |
116c99733a1d
|
"Entry.__setitem__()" |
98 |
116c99733a1d
|
|
99 |
116c99733a1d
|
def test_inv_field(self): |
100 |
116c99733a1d
|
"Entry.__setitem__() raises EntryFieldError in invalid field" |
101 |
116c99733a1d
|
|
102 |
116c99733a1d
|
e = entry.GenericEntry() |
103 |
116c99733a1d
|
self.assertRaises(entry.EntryFieldError, e.__setitem__, entry.URLField, "test123") |
104 |
116c99733a1d
|
|
105 |
116c99733a1d
|
|
106 |
116c99733a1d
|
def test_value(self): |
107 |
116c99733a1d
|
"Entry.__setitem__() sets the field value" |
108 |
116c99733a1d
|
|
109 |
116c99733a1d
|
e = entry.GenericEntry() |
110 |
116c99733a1d
|
e[entry.HostnameField] = "test123" |
111 |
116c99733a1d
|
|
112 |
116c99733a1d
|
self.assertEquals(e[entry.HostnameField], "test123") |
113 |
116c99733a1d
|
|
114 |
116c99733a1d
|
|
115 |
116c99733a1d
|
|
116 |
116c99733a1d
|
class Entry_copy(unittest.TestCase): |
117 |
116c99733a1d
|
"Entry.copy()" |
118 |
116c99733a1d
|
|
119 |
116c99733a1d
|
def test_copy(self): |
120 |
116c99733a1d
|
"Entry.copy() copies all attributes" |
121 |
116c99733a1d
|
|
122 |
116c99733a1d
|
e = entry.GenericEntry() |
123 |
116c99733a1d
|
e.name = "name" |
124 |
116c99733a1d
|
e.description = "description" |
125 |
116c99733a1d
|
|
126 |
116c99733a1d
|
e[entry.HostnameField] = "hostname" |
127 |
116c99733a1d
|
e[entry.UsernameField] = "username" |
128 |
116c99733a1d
|
e[entry.PasswordField] = "password" |
129 |
116c99733a1d
|
|
130 |
116c99733a1d
|
e2 = e.copy() |
131 |
116c99733a1d
|
|
132 |
116c99733a1d
|
self.assertEqual(e.name, e2.name) |
133 |
116c99733a1d
|
self.assertEqual(e.description, e2.description) |
134 |
116c99733a1d
|
self.assertEqual(e.updated, e2.updated) |
135 |
116c99733a1d
|
self.assertEqual(e[entry.HostnameField], e2[entry.HostnameField]) |
136 |
116c99733a1d
|
self.assertEqual(e[entry.UsernameField], e2[entry.UsernameField]) |
137 |
116c99733a1d
|
self.assertEqual(e[entry.PasswordField], e2[entry.PasswordField]) |
138 |
116c99733a1d
|
|
139 |
116c99733a1d
|
e2[entry.HostnameField] = "changetest" |
140 |
116c99733a1d
|
|
141 |
116c99733a1d
|
self.assertNotEqual(e[entry.HostnameField], e2[entry.HostnameField]) |
142 |
116c99733a1d
|
|
143 |
116c99733a1d
|
|
144 |
116c99733a1d
|
|
145 |
116c99733a1d
|
class Entry_get_field(unittest.TestCase): |
146 |
116c99733a1d
|
"Entry.get_field()" |
147 |
116c99733a1d
|
|
148 |
116c99733a1d
|
def test_inv_field(self): |
149 |
116c99733a1d
|
"Entry.get_field() raises EntryFieldError on invalid field" |
150 |
116c99733a1d
|
|
151 |
116c99733a1d
|
e = entry.GenericEntry() |
152 |
116c99733a1d
|
self.assertRaises(entry.EntryFieldError, e.get_field, entry.URLField) |
153 |
116c99733a1d
|
|
154 |
116c99733a1d
|
|
155 |
116c99733a1d
|
def test_valid(self): |
156 |
116c99733a1d
|
"Entry.get_field() returns the field object" |
157 |
116c99733a1d
|
|
158 |
116c99733a1d
|
e = entry.GenericEntry() |
159 |
116c99733a1d
|
field = e.get_field(entry.HostnameField) |
160 |
116c99733a1d
|
field.value = "test123" |
161 |
116c99733a1d
|
|
162 |
116c99733a1d
|
self.assertEqual(type(field), entry.HostnameField) |
163 |
116c99733a1d
|
self.assertEqual(e[entry.HostnameField], "test123") |
164 |
116c99733a1d
|
|
165 |
116c99733a1d
|
|
166 |
116c99733a1d
|
|
167 |
116c99733a1d
|
class Entry_has_field(unittest.TestCase): |
168 |
116c99733a1d
|
"Entry.has_field()" |
169 |
116c99733a1d
|
|
170 |
116c99733a1d
|
def test_invalid(self): |
171 |
116c99733a1d
|
"Entry.has_field() returns False when field doesn't exist" |
172 |
116c99733a1d
|
|
173 |
116c99733a1d
|
e = entry.GenericEntry() |
174 |
116c99733a1d
|
self.assertEqual(e.has_field(entry.URLField), False) |
175 |
116c99733a1d
|
|
176 |
116c99733a1d
|
|
177 |
116c99733a1d
|
def test_valid(self): |
178 |
116c99733a1d
|
"Entry.has_field() returns True when field exists" |
179 |
116c99733a1d
|
|
180 |
116c99733a1d
|
e = entry.GenericEntry() |
181 |
116c99733a1d
|
self.assertEqual(e.has_field(entry.HostnameField), True) |
182 |
116c99733a1d
|
|
183 |
116c99733a1d
|
|
184 |
116c99733a1d
|
|
185 |
116c99733a1d
|
class Entry_mirror(unittest.TestCase): |
186 |
116c99733a1d
|
"Entry.mirror()" |
187 |
116c99733a1d
|
|
188 |
116c99733a1d
|
def test_copy(self): |
189 |
116c99733a1d
|
"Entry.mirror() copies all data" |
190 |
116c99733a1d
|
|
191 |
116c99733a1d
|
e = entry.GenericEntry() |
192 |
116c99733a1d
|
e.name = "name" |
193 |
116c99733a1d
|
e.description = "description" |
194 |
116c99733a1d
|
|
195 |
116c99733a1d
|
e[entry.HostnameField] = "hostname" |
196 |
116c99733a1d
|
e[entry.UsernameField] = "username" |
197 |
116c99733a1d
|
e[entry.PasswordField] = "password" |
198 |
116c99733a1d
|
|
199 |
116c99733a1d
|
e2 = entry.GenericEntry() |
200 |
116c99733a1d
|
e2.mirror(e) |
201 |
116c99733a1d
|
|
202 |
116c99733a1d
|
self.assertEqual(e.name, e2.name) |
203 |
116c99733a1d
|
self.assertEqual(e.description, e2.description) |
204 |
116c99733a1d
|
self.assertEqual(e.updated, e2.updated) |
205 |
116c99733a1d
|
self.assertEqual(e[entry.HostnameField], e2[entry.HostnameField]) |
206 |
116c99733a1d
|
self.assertEqual(e[entry.UsernameField], e2[entry.UsernameField]) |
207 |
116c99733a1d
|
self.assertEqual(e[entry.PasswordField], e2[entry.PasswordField]) |
208 |
116c99733a1d
|
|
209 |
116c99733a1d
|
|
210 |
116c99733a1d
|
def test_inv_type(self): |
211 |
116c99733a1d
|
"Entry.mirror() raises EntryTypeError on other source type" |
212 |
116c99733a1d
|
|
213 |
116c99733a1d
|
e = entry.GenericEntry() |
214 |
116c99733a1d
|
e2 = entry.WebEntry() |
215 |
116c99733a1d
|
|
216 |
116c99733a1d
|
self.assertRaises(entry.EntryTypeError, e.mirror, e2) |
217 |
116c99733a1d
|
|
218 |
116c99733a1d
|
|
219 |
116c99733a1d
|
|
220 |
116c99733a1d
|
class Field(unittest.TestCase): |
221 |
116c99733a1d
|
"field module" |
222 |
116c99733a1d
|
|
223 |
a4f217b71de0
|
def test_entrylist(self): |
224 |
a4f217b71de0
|
"entry.ENTRYLIST contains all required entry types" |
225 |
a4f217b71de0
|
|
226 |
a4f217b71de0
|
fields = [ |
227 |
a4f217b71de0
|
entry.CardnumberField, |
228 |
a4f217b71de0
|
entry.CardtypeField, |
229 |
a4f217b71de0
|
entry.CCVField, |
230 |
a4f217b71de0
|
entry.CertificateField, |
231 |
a4f217b71de0
|
entry.CodeField, |
232 |
a4f217b71de0
|
entry.DatabaseField, |
233 |
a4f217b71de0
|
entry.DomainField, |
234 |
a4f217b71de0
|
entry.EmailField, |
235 |
a4f217b71de0
|
entry.ExpirydateField, |
236 |
a4f217b71de0
|
entry.HostnameField, |
237 |
a4f217b71de0
|
entry.KeyfileField, |
238 |
a4f217b71de0
|
entry.LocationField, |
239 |
a4f217b71de0
|
entry.PasswordField, |
240 |
a4f217b71de0
|
entry.PhonenumberField, |
241 |
a4f217b71de0
|
entry.PINField, |
242 |
a4f217b71de0
|
entry.PortField, |
243 |
a4f217b71de0
|
entry.URLField, |
244 |
a4f217b71de0
|
entry.UsernameField |
245 |
a4f217b71de0
|
] |
246 |
a4f217b71de0
|
|
247 |
a4f217b71de0
|
for f in fields: |
248 |
a4f217b71de0
|
self.assertEquals(f in entry.FIELDLIST, True) |
249 |
a4f217b71de0
|
|
250 |
a4f217b71de0
|
|
251 |
116c99733a1d
|
def test_fieldtypes(self): |
252 |
116c99733a1d
|
"all field types exist" |
253 |
116c99733a1d
|
|
254 |
116c99733a1d
|
fields = [ |
255 |
116c99733a1d
|
entry.CardnumberField, |
256 |
116c99733a1d
|
entry.CardtypeField, |
257 |
116c99733a1d
|
entry.CCVField, |
258 |
116c99733a1d
|
entry.CertificateField, |
259 |
116c99733a1d
|
entry.CodeField, |
260 |
116c99733a1d
|
entry.DatabaseField, |
261 |
116c99733a1d
|
entry.DomainField, |
262 |
116c99733a1d
|
entry.EmailField, |
263 |
116c99733a1d
|
entry.ExpirydateField, |
264 |
116c99733a1d
|
entry.HostnameField, |
265 |
116c99733a1d
|
entry.KeyfileField, |
266 |
116c99733a1d
|
entry.LocationField, |
267 |
116c99733a1d
|
entry.PasswordField, |
268 |
116c99733a1d
|
entry.PhonenumberField, |
269 |
116c99733a1d
|
entry.PINField, |
270 |
116c99733a1d
|
entry.PortField, |
271 |
116c99733a1d
|
entry.URLField, |
272 |
116c99733a1d
|
entry.UsernameField |
273 |
116c99733a1d
|
] |
274 |
116c99733a1d
|
|
275 |
116c99733a1d
|
for f in fields: |
276 |
116c99733a1d
|
f() |
277 |
116c99733a1d
|
|
278 |
116c99733a1d
|
|
279 |
116c99733a1d
|
|
280 |
116c99733a1d
|
class Field__init(unittest.TestCase): |
281 |
116c99733a1d
|
"Field()" |
282 |
116c99733a1d
|
|
283 |
116c99733a1d
|
def test_attrs(self): |
284 |
116c99733a1d
|
"Field.__init__() sets proper attributes" |
285 |
116c99733a1d
|
|
286 |
116c99733a1d
|
f = entry.Field() |
287 |
116c99733a1d
|
|
288 |
116c99733a1d
|
f.id |
289 |
116c99733a1d
|
f.name |
290 |
116c99733a1d
|
f.description |
291 |
116c99733a1d
|
f.symbol |
292 |
116c99733a1d
|
f.datatype |
293 |
116c99733a1d
|
f.value |
294 |
116c99733a1d
|
|
295 |
116c99733a1d
|
|
296 |
116c99733a1d
|
def test_value(self): |
297 |
116c99733a1d
|
"Field.__init__() properly sets a value" |
298 |
116c99733a1d
|
|
299 |
116c99733a1d
|
f = entry.Field("jeje") |
300 |
116c99733a1d
|
self.assertEquals(f.value, "jeje") |
301 |
116c99733a1d
|
|
302 |
116c99733a1d
|
|
303 |
116c99733a1d
|
|
304 |
116c99733a1d
|
class Field__str(unittest.TestCase): |
305 |
116c99733a1d
|
"Field.__str__()" |
306 |
116c99733a1d
|
|
307 |
116c99733a1d
|
|
308 |
116c99733a1d
|
def test_none(self): |
309 |
116c99733a1d
|
"Field.__str__() returns '' instead of None" |
310 |
116c99733a1d
|
|
311 |
116c99733a1d
|
f = entry.Field(None) |
312 |
116c99733a1d
|
self.assertEquals(str(f), "") |
313 |
116c99733a1d
|
|
314 |
116c99733a1d
|
|
315 |
116c99733a1d
|
def test_value(self): |
316 |
116c99733a1d
|
"Field.__str__() returns the value" |
317 |
116c99733a1d
|
|
318 |
116c99733a1d
|
f = entry.Field("test") |
319 |
116c99733a1d
|
self.assertEquals(str(f), "test") |
320 |
116c99733a1d
|
|
321 |
116c99733a1d
|
|
322 |
116c99733a1d
|
|
323 |
97f2c94dd2ff
|
class convert_entry_generic(unittest.TestCase): |
324 |
97f2c94dd2ff
|
"convert_entry_generic()" |
325 |
97f2c94dd2ff
|
|
326 |
97f2c94dd2ff
|
def test_generic(self): |
327 |
97f2c94dd2ff
|
"convert_entry_generic() returns an identical generic entry" |
328 |
97f2c94dd2ff
|
|
329 |
97f2c94dd2ff
|
e = entry.GenericEntry() |
330 |
97f2c94dd2ff
|
e.name = "name" |
331 |
97f2c94dd2ff
|
e.description = "description" |
332 |
97f2c94dd2ff
|
e.updated = 1 |
333 |
97f2c94dd2ff
|
e[entry.HostnameField] = "hostname" |
334 |
97f2c94dd2ff
|
e[entry.UsernameField] = "username" |
335 |
97f2c94dd2ff
|
e[entry.PasswordField] = "password" |
336 |
97f2c94dd2ff
|
|
337 |
97f2c94dd2ff
|
c = entry.convert_entry_generic(e) |
338 |
97f2c94dd2ff
|
|
339 |
97f2c94dd2ff
|
self.assertEquals(c.name, e.name) |
340 |
97f2c94dd2ff
|
self.assertEquals(c.description, e.description) |
341 |
97f2c94dd2ff
|
self.assertEquals(c.updated, e.updated) |
342 |
97f2c94dd2ff
|
self.assertEquals(c[entry.HostnameField], e[entry.HostnameField]) |
343 |
97f2c94dd2ff
|
self.assertEquals(c[entry.UsernameField], e[entry.UsernameField]) |
344 |
97f2c94dd2ff
|
self.assertEquals(c[entry.PasswordField], e[entry.PasswordField]) |
345 |
97f2c94dd2ff
|
|
346 |
97f2c94dd2ff
|
|
347 |
97f2c94dd2ff
|
def test_generic_always(self): |
348 |
97f2c94dd2ff
|
"convert_entry_generic() returns GenericEntry for all entry types" |
349 |
97f2c94dd2ff
|
|
350 |
97f2c94dd2ff
|
for entrytype in entry.ENTRYLIST: |
351 |
97f2c94dd2ff
|
generic = entry.convert_entry_generic(entrytype()) |
352 |
97f2c94dd2ff
|
self.assertEquals(type(generic), entry.GenericEntry) |
353 |
97f2c94dd2ff
|
|
354 |
97f2c94dd2ff
|
|
355 |
97f2c94dd2ff
|
|
356 |
116c99733a1d
|
if __name__ == "__main__": |
357 |
116c99733a1d
|
unittest.main() |
358 |
116c99733a1d
|