0001-misc-add-slug-to-roles-7180.patch
tests/test_role.py | ||
---|---|---|
1 |
import cPickle |
|
2 | ||
3 |
from utilities import create_temporary_pub, clean_temporary_pub |
|
4 | ||
5 |
from qommon.storage import StorableObject |
|
6 |
from wcs.roles import Role |
|
7 | ||
8 |
def setup_module(module): |
|
9 |
pub = create_temporary_pub() |
|
10 |
pub.cfg['language'] = {'language': 'en'} |
|
11 | ||
12 |
def teardown_module(module): |
|
13 |
clean_temporary_pub() |
|
14 | ||
15 |
def test_slug(): |
|
16 |
Role.wipe() |
|
17 |
role = Role(name='Hello world') |
|
18 |
role.store() |
|
19 |
assert role.slug == 'hello-world' |
|
20 | ||
21 |
def test_duplicated_name(): |
|
22 |
Role.wipe() |
|
23 |
role = Role(name='Hello world') |
|
24 |
role.store() |
|
25 |
assert role.slug == 'hello-world' |
|
26 |
role = Role(name='Hello world') |
|
27 |
role.store() |
|
28 |
assert role.slug == 'hello-world-1' |
|
29 | ||
30 |
def test_migrate(): |
|
31 |
Role.wipe() |
|
32 |
role = Role(name='Hello world') |
|
33 |
role.store() |
|
34 |
obj = cPickle.load(open(role.get_object_filename())) |
|
35 |
del obj.slug |
|
36 |
cPickle.dump(obj, open(role.get_object_filename(), 'w')) |
|
37 |
assert cPickle.load(open(role.get_object_filename())).slug is None |
|
38 |
assert Role.get(role.id).slug == 'hello-world' |
wcs/roles.py | ||
---|---|---|
21 | 21 | |
22 | 22 |
class Role(StorableObject): |
23 | 23 |
_names = 'roles' |
24 |
_indexes = ['slug'] |
|
25 | ||
24 | 26 |
name = None |
27 |
slug = None |
|
25 | 28 |
details = None |
26 | 29 |
emails = None |
27 | 30 |
emails_to_members = False |
... | ... | |
31 | 34 |
StorableObject.__init__(self) |
32 | 35 |
self.name = name |
33 | 36 | |
37 |
def migrate(self): |
|
38 |
changed = False |
|
39 |
if not self.slug: |
|
40 |
# .store() will take care of setting the slug |
|
41 |
changed = True |
|
42 |
if changed: |
|
43 |
self.store() |
|
44 | ||
45 |
def store(self): |
|
46 |
if self.slug is None: |
|
47 |
# set slug if it's not yet there |
|
48 |
self.slug = self.get_new_slug() |
|
49 |
super(Role, self).store() |
|
50 | ||
51 |
def get_new_slug(self): |
|
52 |
new_slug = qommon.misc.simplify(self.name) |
|
53 |
base_new_slug = new_slug |
|
54 |
suffix_no = 0 |
|
55 |
while True: |
|
56 |
try: |
|
57 |
role = self.get_on_index(new_slug, 'slug', ignore_migration=True) |
|
58 |
except KeyError: |
|
59 |
break |
|
60 |
if role.id == self.id: |
|
61 |
break |
|
62 |
suffix_no += 1 |
|
63 |
new_slug = '%s-%s' % (base_new_slug, suffix_no) |
|
64 |
return new_slug |
|
65 | ||
34 | 66 |
def get_emails(self): |
35 | 67 |
emails = self.emails or [] |
36 | 68 |
if not self.emails_to_members: |
37 |
- |