Skip to content

Commit

Permalink
Make test_activity.py faster
Browse files Browse the repository at this point in the history
Only run create_test_data() once in
tests/functional/api/test_activity.py, not before each test case. Fix
the test cases to work under these conditions.
  • Loading branch information
Sean Hammond committed Mar 21, 2012
1 parent abf582f commit 5c26bdf
Showing 1 changed file with 50 additions and 30 deletions.
80 changes: 50 additions & 30 deletions ckan/tests/functional/api/test_activity.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,14 @@ def make_resource():
'name': 'example resource',
}

def make_package():
def make_package(name=None):
'''Return a test package in dictionary form.'''
if name is None:
name = "test_package"

# A package with no resources, tags, extras or groups.
pkg = {
'name' : 'test_package',
'name' : name,
'title' : 'My Test Package',
'author' : 'test author',
'author_email' : 'test_author@test_author.com',
Expand Down Expand Up @@ -88,15 +91,17 @@ def find_new_activities(before, after):

class TestActivity:

def setup(self):
@classmethod
def setup_class(self):
ckan.tests.CreateTestData.create()
self.sysadmin_user = model.User.get('testsysadmin')
self.normal_user = model.User.get('annafan')
self.warandpeace = model.Package.get('warandpeace')
self.annakarenina = model.Package.get('annakarenina')
self.app = paste.fixture.TestApp(pylonsapp)

def teardown(self):
@classmethod
def teardown_class(self):
model.repo.rebuild_db()

def user_activity_stream(self, user_id):
Expand Down Expand Up @@ -143,7 +148,7 @@ def record_details(self, user_id, package_id=None, group_id=None):
details['time'] = datetime.datetime.now()
return details

def _create_package(self, user):
def _create_package(self, user, name=None):
if user:
user_name = user.name
user_id = user.id
Expand All @@ -160,7 +165,7 @@ def _create_package(self, user):
'user': user_name,
'allow_partial_update': True,
}
request_data = make_package()
request_data = make_package(name)
package_created = package_create(context, request_data)

after = self.record_details(user_id, package_created['id'])
Expand Down Expand Up @@ -253,7 +258,7 @@ def test_create_package_not_logged_in(self):
when a new package is created by a user who is not logged in.
"""
self._create_package(user=None)
self._create_package(user=None, name="not_logged_in_test_package")

def _add_resource(self, package, user):
if user:
Expand Down Expand Up @@ -388,7 +393,12 @@ def _update_package(self, package, user):
# Update the package.
context = {'model': model, 'session': model.Session, 'user': user_name,
'allow_partial_update': True}
package_dict = {'id': package.id, 'title': 'edited'}
package_dict = {'id': package.id}
if package.title != 'edited':
package_dict['title'] = 'edited'
else:
assert package.title != 'edited again'
package_dict['title'] = 'edited again'
package_update(context, package_dict)

after = self.record_details(user_id, package.id)
Expand Down Expand Up @@ -441,7 +451,7 @@ def _update_package(self, package, user):
assert detail['activity_type'] == "changed", (
str(detail['activity_type']))

def test_update_package(self):
def test_01_update_package(self):
"""
Test updated package activity stream.
Expand All @@ -452,7 +462,7 @@ def test_update_package(self):
for package in model.Session.query(model.Package).all():
self._update_package(package, user=self.normal_user)

def test_update_package_not_logged_in(self):
def test_01_update_package_not_logged_in(self):
"""
Test updated package activity stream when not logged in.
Expand Down Expand Up @@ -539,7 +549,7 @@ def _update_resource(self, package, resource, user):
assert detail['activity_type'] == "changed", (
str(detail['activity_type']))

def test_update_resource(self):
def test_01_update_resource(self):
"""
Test that a correct activity stream item and detail item are emitted
when a resource is updated.
Expand All @@ -553,7 +563,7 @@ def test_update_resource(self):
for resource in pkg.resources:
self._update_resource(pkg, resource, user=self.normal_user)

def test_update_resource_not_logged_in(self):
def test_01_update_resource_not_logged_in(self):
"""
Test that a correct activity stream item and detail item are emitted
when a resource is updated by a user who is not logged in.
Expand All @@ -573,19 +583,19 @@ def _delete_package(self, package):
item and detail are emitted.
"""
before = self.record_details(self.normal_user.id, package.id)
before = self.record_details(self.sysadmin_user.id, package.id)

# Query for the package object again, as the session that it belongs to
# may have been closed.
package = model.Session.query(model.Package).get(package.id)

# Delete the package.
context = {'model': model, 'session': model.Session,
'user': self.normal_user.name}
'user': self.sysadmin_user.name}
package_dict = {'id':package.id}
package_delete(context, package_dict)

after = self.record_details(self.normal_user.id, package.id)
after = self.record_details(self.sysadmin_user.id, package.id)

# Find the new activity in the user's activity stream.
user_new_activities = (find_new_activities(
Expand All @@ -611,7 +621,7 @@ def _delete_package(self, package):
# Check that the new activity has the right attributes.
assert activity['object_id'] == package.id, (
str(activity['object_id']))
assert activity['user_id'] == self.normal_user.id, (
assert activity['user_id'] == self.sysadmin_user.id, (
str(activity['user_id']))
assert activity['activity_type'] == 'deleted package', (
str(activity['activity_type']))
Expand Down Expand Up @@ -727,7 +737,7 @@ def _delete_resources(self, package):
assert detail['activity_type'] == "deleted", (
str(detail['activity_type']))

def test_delete_resources(self):
def test_01_delete_resources(self):
"""
Test deleted resource activity stream.
Expand Down Expand Up @@ -809,7 +819,9 @@ def _update_user(self, user):
'allow_partial_update': True}
user_dict = {'id': user.id}
user_dict['about'] = 'edited'
if not user.email:
if user.email:
user_dict['email'] = user.email
else:
user_dict['email'] = 'there has to be a value in email or validate fails'
user_update(context, user_dict)

Expand Down Expand Up @@ -926,7 +938,7 @@ def _update_group(self, group, user):
assert timestamp >= before['time'] and timestamp <= after['time'], \
str(activity['timestamp'])

def test_update_group(self):
def test_01_update_group(self):
"""
Test updated group activity stream.
Expand Down Expand Up @@ -1005,6 +1017,7 @@ def test_add_tag(self):
'model': model,
'session': model.Session,
'user': user.name,
'allow_partial_update': True
}
pkg_dict = ckan.logic.action.get.package_show(context,
{'id': pkg_name})
Expand Down Expand Up @@ -1068,7 +1081,7 @@ def test_add_tag(self):
assert detail['activity_type'] == "added", (
str(detail['activity_type']))

def test_remove_tag(self):
def test_01_remove_tag(self):
"""
Test remove tag activity.
Expand Down Expand Up @@ -1520,7 +1533,9 @@ def test_activity_create_activity_type_not_exists(self):
u"Not found: Activity type"], (
response.json['error'][u'activity_type'])

def _add_extra(self, package_dict, user):
def _add_extra(self, package_dict, user, key=None):
if key is None:
key = 'quality'
if user:
user_name = user.name
user_id = user.id
Expand All @@ -1538,10 +1553,10 @@ def _add_extra(self, package_dict, user):
'session': model.Session,
'user': user_name,
'allow_partial_update': True,
'extras_as_string': True
'extras_as_string': True,
}
extras = list(extras_before)
extras.append({'key': 'quality', 'value': '10000'})
extras.append({'key': key, 'value': '10000'})
request_data = {
'id': package_dict['id'],
'extras': extras
Expand Down Expand Up @@ -1642,7 +1657,7 @@ def test_add_extras_not_logged_in(self):
}
for package_name in package_list(context, {}):
package_dict = package_show(context, {'id': package_name})
self._add_extra(package_dict, None)
self._add_extra(package_dict, None, key='not_logged_in_extra_key')

def _update_extra(self, package_dict, user):
if user:
Expand All @@ -1667,7 +1682,11 @@ def _update_extra(self, package_dict, user):
'extras_as_string': True
}
extras = list(extras_before)
extras[0]['value'] = 'edited'
if extras[0]['value'] != 'edited':
extras[0]['value'] = 'edited'
else:
assert extras[0]['value'] != 'edited again'
extras[0]['value'] = 'edited again'
request_data = {
'id': package_dict['id'],
'extras': extras
Expand Down Expand Up @@ -1734,7 +1753,7 @@ def _update_extra(self, package_dict, user):
assert detail['activity_type'] == "changed", (
str(detail['activity_type']))

def test_update_extras(self):
def test_01_update_extras(self):
"""
Test changed package extra activity stream.
Expand All @@ -1758,7 +1777,7 @@ def test_update_extras(self):
for package_dict in packages_with_extras:
self._update_extra(package_dict, user=self.normal_user)

def test_update_extras_not_logged_in(self):
def test_01_update_extras_not_logged_in(self):
"""
Test changed package extra activity stream when no user logged in.
Expand Down Expand Up @@ -1801,14 +1820,15 @@ def _delete_extra(self, package_dict, user):
'model': model,
'session': model.Session,
'user': user_name,
'allow_partial_update': True,
'extras_as_string': True
'extras_as_string': True,
}
extras = list(extras_before)
del extras[0]
request_data = {
'id': package_dict['id'],
'extras': extras
'extras': extras,
'tags': package_dict['tags'],
'resources': package_dict['resources']
}
updated_package = package_update(context, request_data)

Expand Down

0 comments on commit 5c26bdf

Please sign in to comment.