Skip to content

Commit

Permalink
Add activity_detail_show() method and tests
Browse files Browse the repository at this point in the history
Add activity_detail_show() method to ckan.logic.action.get, use this
method in ckan.tests.models.test_activity whenever we need to get
activity detail items.
  • Loading branch information
Sean Hammond committed Jan 3, 2012
1 parent d24fc78 commit c0abea1
Show file tree
Hide file tree
Showing 3 changed files with 94 additions and 57 deletions.
12 changes: 11 additions & 1 deletion ckan/lib/dictization/model_dictize.py
Expand Up @@ -343,7 +343,6 @@ def package_to_api2(pkg, context):
return dictized

def activity_dictize(activity, context):
# TODO: Include any related activity detail items in the activity dict.
activity_dict = table_dictize(activity, context)
return activity_dict

Expand All @@ -353,3 +352,14 @@ def activity_list_dictize(activity_list, context):
activity_dict = activity_dictize(activity, context)
activity_dicts.append(activity_dict)
return activity_dicts

def activity_detail_dictize(activity_detail, context):
return table_dictize(activity_detail, context)

def activity_detail_list_dictize(activity_detail_list, context):
activity_detail_dicts = []
for activity_detail in activity_detail_list:
activity_detail_dict = activity_detail_dictize(activity_detail,
context)
activity_detail_dicts.append(activity_detail_dict)
return activity_detail_dicts
15 changes: 13 additions & 2 deletions ckan/logic/action/get.py
Expand Up @@ -21,7 +21,8 @@
tag_dictize,
task_status_dictize,
user_dictize,
activity_list_dictize)
activity_list_dictize,
activity_detail_list_dictize)

from ckan.lib.dictization.model_dictize import (package_to_api1,
package_to_api2,
Expand Down Expand Up @@ -868,9 +869,19 @@ def status_show(context, data_dict):
}

def activity_show(context, data_dict):
'''Get a user's public activity stream as a list of dicts.'''
'''Return a user's public activity stream as a list of dicts.'''
model = context['model']
user_id = data_dict['id']
activity_objects = model.Session.query(
model.activity.Activity).filter_by(user_id=user_id).all()
return activity_list_dictize(activity_objects, context)

def activity_detail_show(context, data_dict):
'''Return an activity's list of activity detail items, as a list of dicts.
'''
model = context['model']
activity_id = data_dict['id']
activity_detail_objects = model.Session.query(
model.activity.ActivityDetail).filter_by(activity_id=activity_id).all()
return activity_detail_list_dictize(activity_detail_objects, context)
124 changes: 70 additions & 54 deletions ckan/tests/models/test_activity.py
Expand Up @@ -8,7 +8,7 @@
from ckan.logic.action.update import package_update, resource_update
from ckan.logic.action.delete import package_delete
from ckan.lib.dictization.model_dictize import resource_list_dictize
from ckan.logic.action.get import activity_show
from ckan.logic.action.get import activity_show, activity_detail_show

def datetime_from_string(s):
'''Return a standard datetime.datetime object initialised from a string in
Expand Down Expand Up @@ -66,11 +66,16 @@ def get_user_activity_stream(user_id):
data_dict = {'id':user_id}
return activity_show(context, data_dict)

def get_activity_details(activity):
'''Return the list of activity details for the given activity.'''
context = {'model': model}
data_dict = {'id': activity['id']}
return activity_detail_show(context, data_dict)

def record_details(user_id):
details = {}
details['user activity stream'] = get_user_activity_stream(user_id)
details['time'] = datetime.datetime.now()
details['details'] = model.Session.query(model.activity.ActivityDetail).all()
return details

def find_new_activities(before, after):
Expand Down Expand Up @@ -132,24 +137,25 @@ def _create_package(self, user):
# Test that there are three activity details: one for the package
# itself and one for each of its two resources, and test that each
# contains the right data.
assert len(after['details']) == len(before['details']) + 3
new_details = after['details'][-3:]
for detail in new_details:
assert detail.activity_id == activity['id'], \
str(detail.activity_id)
assert detail.activity_type == "new", str(detail.activity_type)
if detail.object_id == package_created['id']:
assert detail.object_type == "Package", str(detail.object_type)
elif detail.object_id == package_created['resources'][0]['id']:
assert detail.object_type == "Resource", \
str(detail.object_type)
elif detail.object_id == package_created['resources'][1]['id']:
assert detail.object_type == "Resource", \
str(detail.object_type)
details = get_activity_details(activity)
assert len(details) == 3
for detail in details:
assert detail['activity_id'] == activity['id'], \
str(detail['activity_id'])
assert detail['activity_type'] == "new", str(detail['activity_type'])
if detail['object_id'] == package_created['id']:
assert detail['object_type'] == "Package", \
str(detail['object_type'])
elif detail['object_id'] == package_created['resources'][0]['id']:
assert detail['object_type'] == "Resource", \
str(detail['object_type'])
elif detail['object_id'] == package_created['resources'][1]['id']:
assert detail['object_type'] == "Resource", \
str(detail['object_type'])
else:
assert False, ("Activity detail's object_id did not match"
"package or any of its resources: %s" \
% str(detail.object_id))
% str(detail['object_id']))

def test_create_package(self):
"""
Expand Down Expand Up @@ -223,16 +229,18 @@ def _add_resource(self, package, user):
str(activity['timestamp'])

# Test for the presence of a correct activity detail item.
assert len(after['details']) == len(before['details']) + 1
detail = after['details'][-1]
assert detail.activity_id == activity['id'], str(detail.activity_id)
details = get_activity_details(activity)
assert len(details) == 1
detail = details[0]
assert detail['activity_id'] == activity['id'], \
str(detail['activity_id'])
new_resource_ids = [id for id in resource_ids_after if id not in
resource_ids_before]
assert len(new_resource_ids) == 1
new_resource_id = new_resource_ids[0]
assert detail.object_id == new_resource_id, str(detail.object_id)
assert detail.object_type == "Resource", str(detail.object_type)
assert detail.activity_type == "new", str(detail.activity_type)
assert detail['object_id'] == new_resource_id, str(detail['object_id'])
assert detail['object_type'] == "Resource", str(detail['object_type'])
assert detail['activity_type'] == "new", str(detail['activity_type'])

def test_add_resources(self):
"""
Expand Down Expand Up @@ -304,12 +312,15 @@ def _update_package(self, package, user):
str(activity['timestamp'])

# Test for the presence of a correct activity detail item.
assert len(after['details']) == len(before['details']) + 1
detail = after['details'][-1]
assert detail.activity_id == activity['id'], str(detail.activity_id)
assert detail.object_id == package.id, str(detail.object_id)
assert detail.object_type == "Package", str(detail.object_type)
assert detail.activity_type == "changed", str(detail.activity_type)
details = get_activity_details(activity)
assert len(details) == 1
detail = details[0]
assert detail['activity_id'] == activity['id'], \
str(detail['activity_id'])
assert detail['object_id'] == package.id, str(detail['object_id'])
assert detail['object_type'] == "Package", str(detail['object_type'])
assert detail['activity_type'] == "changed", \
str(detail['activity_type'])

def test_update_package(self):
"""
Expand Down Expand Up @@ -382,12 +393,15 @@ def _update_resource(self, package, resource, user):
str(activity['timestamp'])

# Test for the presence of a correct activity detail item.
assert len(after['details']) == len(before['details']) + 1
detail = after['details'][-1]
assert detail.activity_id == activity['id'], str(detail.activity_id)
assert detail.object_id == resource.id, str(detail.object_id)
assert detail.object_type == "Resource", str(detail.object_type)
assert detail.activity_type == "changed", str(detail.activity_type)
details = get_activity_details(activity)
assert len(details) == 1
detail = details[0]
assert detail['activity_id'] == activity['id'], \
str(detail['activity_id'])
assert detail['object_id'] == resource.id, str(detail['object_id'])
assert detail['object_type'] == "Resource", str(detail['object_type'])
assert detail['activity_type'] == "changed", \
str(detail['activity_type'])

def test_update_resource(self):
"""
Expand Down Expand Up @@ -461,14 +475,17 @@ def _delete_package(self, package):
str(activity['timestamp'])

# Test for the presence of a correct activity detail item.
assert len(after['details']) == len(before['details']) + 1
detail = after['details'][-1]
assert detail.activity_id == activity['id'], str(detail.activity_id)
assert detail.object_id == package.id, str(detail.object_id)
assert detail.object_type == "Package", str(detail.object_type)
details = get_activity_details(activity)
assert len(details) == 1
detail = details[0]
assert detail['activity_id'] == activity['id'], \
str(detail['activity_id'])
assert detail['object_id'] == package.id, str(detail['object_id'])
assert detail['object_type'] == "Package", str(detail['object_type'])
# "Deleted" packages actually show up as changed (the package's status
# changes to "deleted" but the package is not expunged).
assert detail.activity_type == "changed", str(detail.activity_type)
assert detail['activity_type'] == "changed", \
str(detail['activity_type'])

def test_delete_package(self):
"""
Expand Down Expand Up @@ -525,19 +542,18 @@ def _delete_resources(self, package):
str(activity['timestamp'])

# Test for the presence of correct activity detail items.
if num_resources == 0:
assert len(after['details']) == len(before['details'])
else:
assert len(after['details']) == len(before['details']) + \
num_resources
new_details = after['details'][-num_resources:]
for detail in new_details:
assert detail.activity_id == activity['id'], \
"activity_id should be %s but is %s" \
% (activity['id'], detail.activity_id)
assert detail.object_id in resource_ids, str(detail.object_id)
assert detail.object_type == "Resource", str(detail.object_type)
assert detail.activity_type == "changed", str(detail.activity_type)
details = get_activity_details(activity)
assert len(details) == num_resources
for detail in details:
assert detail['activity_id'] == activity['id'], \
"activity_id should be %s but is %s" \
% (activity['id'], detail['activity_id'])
assert detail['object_id'] in resource_ids, \
str(detail['object_id'])
assert detail['object_type'] == "Resource", \
str(detail['object_type'])
assert detail['activity_type'] == "changed", \
str(detail['activity_type'])

def test_delete_resources(self):
"""
Expand Down

0 comments on commit c0abea1

Please sign in to comment.