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 again

erikg / Revelation

Revelation is a password manager for the GNOME desktop, released under the GNU GPL license. It stores all your accounts and passwords in a single, secure place, and gives you access to it through a user-friendly graphical interface.

Clone this repository (size: 2.1 MB): HTTPS / SSH
hg clone https://bitbucket.org/erikg/revelation
hg clone ssh://hg@bitbucket.org/erikg/revelation

Revelation / 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