Skip to content

Commit

Permalink
[#1038] Test fixtures for organization hierarchy.
Browse files Browse the repository at this point in the history
  • Loading branch information
David Read committed Jul 22, 2013
1 parent 21cd0ac commit 96f0a3e
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 6 deletions.
4 changes: 3 additions & 1 deletion ckan/lib/cli.py
Expand Up @@ -1273,7 +1273,7 @@ class CreateTestDataCommand(CkanCommand):
translations of terms
create-test-data vocabs - annakerenina, warandpeace, and some test
vocabularies
create-test-data hierarchy - hierarchy of groups
'''
summary = __doc__.split('\n')[0]
usage = __doc__
Expand Down Expand Up @@ -1309,6 +1309,8 @@ def command(self):
CreateTestData.create_translations_test_data()
elif cmd == 'vocabs':
CreateTestData.create_vocabs_test_data()
elif cmd == 'hierarchy':
CreateTestData.create_group_hierarchy_test_data()
else:
print 'Command %s not recognized' % cmd
raise NotImplementedError
Expand Down
81 changes: 76 additions & 5 deletions ckan/lib/create_test_data.py
Expand Up @@ -38,6 +38,12 @@ def create_family_test_data(cls, extra_users=[]):
relationships=family_relationships,
extra_user_names=extra_users)

@classmethod
def create_group_hierarchy_test_data(cls, extra_users=[]):
cls.create_groups(group_hierarchy_groups)
cls.create_arbitrary(group_hierarchy_datasets,
extra_user_names=group_hierarchy_users)

@classmethod
def create_test_user(cls):
tester = model.User.by_name(u'tester')
Expand Down Expand Up @@ -315,10 +321,9 @@ def pkg(pkg_name):
@classmethod
def create_groups(cls, group_dicts, admin_user_name=None, auth_profile=""):
'''A more featured interface for creating groups.
All group fields can be filled, packages added and they can
have an admin user.'''
All group fields can be filled, packages added, can have
an admin user and be a member of other groups.'''
rev = model.repo.new_revision()
# same name as user we create below
rev.author = cls.author
if admin_user_name:
admin_users = [model.User.by_name(admin_user_name)]
Expand All @@ -327,7 +332,7 @@ def create_groups(cls, group_dicts, admin_user_name=None, auth_profile=""):
assert isinstance(group_dicts, (list, tuple))
group_attributes = set(('name', 'title', 'description', 'parent_id'))
for group_dict in group_dicts:
if model.Group.by_name(group_dict['name']):
if model.Group.by_name(unicode(group_dict['name'])):
log.warning('Cannot create group "%s" as it already exists.' % \
(group_dict['name']))
continue
Expand All @@ -346,7 +351,35 @@ def create_groups(cls, group_dicts, admin_user_name=None, auth_profile=""):
member = model.Member(group=group, table_id=pkg.id, table_name='package')
model.Session.add(member)
model.Session.add(group)
model.setup_default_user_roles(group, admin_users)
admins = [model.User.by_name(user_name) \
for user_name in group_dict.get('admins', [])] \
+ admin_users
for admin in admins:
member = model.Member(group=group, table_id=user.id,
table_name='user', capacity='admin')
model.Session.add(member)
editors = [model.User.by_name(user_name) \
for user_name in group_dict.get('editors', [])]
for editor in editors:
member = model.Member(group=group, table_id=user.id,
table_name='user', capacity='editor')
model.Session.add(member)
# Need to commit the current Group for two reasons:
# 1. It might have a parent, and the Member will need the Group.id
# value allocated on commit.
# 2. The next Group created may have this Group as a parent so
# creation of the Member needs to refer to this one.
model.Session.commit()
rev = model.repo.new_revision()
rev.author = cls.author
# add it to a parent's group
if 'parent' in group_dict:
parent = model.Group.by_name(unicode(group_dict['parent']))
assert parent, group_dict['parent']
member = model.Member(group=parent, table_id=group.id,
table_name='group', capacity='parent')
model.Session.add(member)
#model.setup_default_user_roles(group, admin_users)
cls.group_names.add(group_dict['name'])
model.repo.commit_and_remove()

Expand Down Expand Up @@ -825,6 +858,44 @@ def make_some_vocab_tags(cls):
}
]

group_hierarchy_groups = [
{'name': 'department-of-health',
'title': 'Department of Health',
'contact-email': 'contact@doh.gov.uk'},
{'name': 'food-standards-agency',
'title': 'Food Standards Agency',
'contact-email': 'contact@fsa.gov.uk',
'parent': 'department-of-health'},
{'name': 'national-health-service',
'title': 'National Health Service',
'contact-email': 'contact@nhs.gov.uk',
'parent': 'department-of-health'},
{'name': 'nhs-wirral-ccg',
'title': 'NHS Wirral CCG',
'contact-email': 'contact@wirral.nhs.gov.uk',
'parent': 'national-health-service'},
{'name': 'nhs-southwark-ccg',
'title': 'NHS Southwark CCG',
'contact-email': 'contact@southwark.nhs.gov.uk',
'parent': 'national-health-service'},
{'name': 'cabinet-office',
'title': 'Cabinet Office',
'contact-email': 'contact@cabinet-office.gov.uk'},
]

group_hierarchy_datasets = [
{'name': 'doh-spend', 'title': 'Department of Health Spend Data',
'groups': ['department-of-health']},
{'name': 'nhs-spend', 'title': 'NHS Spend Data',
'groups': ['national-health-service']},
{'name': 'wirral-spend', 'title': 'Wirral Spend Data',
'groups': ['nhs-wirral-ccg']},
{'name': 'southwark-spend', 'title': 'Southwark Spend Data',
'groups': ['nhs-southwark-ccg']},
]

group_hierarchy_users = ['nhsadmin', 'nhseditor', 'wirraladmin', 'wirraleditor']

# Some test terms and translations.
terms = ('A Novel By Tolstoy',
'Index of the novel',
Expand Down

0 comments on commit 96f0a3e

Please sign in to comment.