[virtualcommons-svn] commit/vcweb: alllee: starting to add tests and fixing some exposed issues wit
Status: Beta
Brought to you by:
alllee
From: Bitbucket <com...@bi...> - 2011-08-08 18:49:12
|
1 new changeset in vcweb: http://bitbucket.org/virtualcommons/vcweb/changeset/158b11d740fd/ changeset: 158b11d740fd user: alllee date: 2011-08-08 20:48:58 summary: starting to add tests and fixing some exposed issues with previous activity availability logic (wasn't including activities that are available all day, etc.) affected #: 4 files (1.8 KB) --- a/vcweb/lighterprints/models.py Sun Aug 07 18:14:28 2011 -0700 +++ b/vcweb/lighterprints/models.py Mon Aug 08 11:48:58 2011 -0700 @@ -1,5 +1,5 @@ from django.db import models -from django.db.models import Sum +from django.db.models import Sum, Q from vcweb.core import signals, simplecache from vcweb.core.models import (Experiment, ExperimentMetadata, Experimenter, GroupRoundDataValue, ParticipantRoundDataValue, Parameter) @@ -62,6 +62,7 @@ experimenter = Experimenter.objects.get(pk=1) parameter, created = Parameter.objects.get_or_create(name='activity_performed', scope=Parameter.PARTICIPANT_SCOPE, type='int', creator=experimenter, experiment_metadata=get_lighterprints_experiment_metadata()) + if created: logger.debug("created activity performed parameter %s", parameter) return parameter @simplecache @@ -72,6 +73,15 @@ return Experiment.objects.filter(experiment_metadata=get_lighterprints_experiment_metadata(), status__in=('ACTIVE', 'ROUND_IN_PROGRESS')) +def available_activities(activity=None): + current_time = datetime.datetime.now().time() + filter_dict = dict(available_start_time__lte=current_time, + available_end_time__gte=current_time) + if activity is not None: + filter_dict['activity'] = activity + logger.debug("filtering with filter dict %s", filter_dict) + return ActivityAvailability.objects.select_related(depth=1).filter(Q(**filter_dict) | Q(activity__available_all_day=True)) + def is_activity_available(activity=None, participant_group_relationship=None, **kwargs): if activity is None: logger.debug("cannot check availability for non activity") @@ -81,7 +91,7 @@ # hasn't already performed this activity during this cycle. now = datetime.datetime.now() current_time = now.time() - availabilities = ActivityAvailability.objects.filter(activity=activity, available_start_time__lte=current_time, available_end_time__gte=current_time) + availabilities = ActivityAvailability.objects.filter(Q(activity=activity, activity__available_all_day=True) | Q(available_start_time__lte=current_time, available_end_time__gte=current_time)) # FIXME: check if this participant has already participated in this activity data_value_set = ParticipantRoundDataValue.objects.filter(parameter=get_activity_performed_parameter(), participant_group_relationship=participant_group_relationship, --- a/vcweb/lighterprints/tests.py Sun Aug 07 18:14:28 2011 -0700 +++ b/vcweb/lighterprints/tests.py Mon Aug 08 11:48:58 2011 -0700 @@ -30,11 +30,33 @@ e.activate() e.start_round() current_round_data = e.current_round_data - parameter = create_activity_performed_parameter() + activity_performed_parameter = create_activity_performed_parameter() + logger.debug("activity performed parameter: %s", activity_performed_parameter) # initialize participant carbon savings for participant_group_relationship in ParticipantGroupRelationship.objects.filter(group__experiment=e): for activity in Activity.objects.all(): - activity_performed, created = participant_group_relationship.participant_data_value_set.get_or_create(round_data=current_round_data, parameter=parameter) - activity_performed.value = activity.pk - logger.debug("activity performed %s (%s)", activity_performed, created) + activity_performed = participant_group_relationship.participant_data_value_set.create(round_data=current_round_data, parameter=activity_performed_parameter, experiment=e) + activity_performed.value = activity.id + activity_performed.save() +class DoActivityTest(BaseTest): + def test_view(self): + logger.debug("testing do activity view") + e = self.experiment + create_activity_performed_parameter() + e.activate() + e.start_round() + for participant_group_relationship in ParticipantGroupRelationship.objects.filter(group__experiment=e): + logger.debug("all available activities: %s", available_activities()) + for activity_availability in available_activities(): + logger.debug("available activity: %s", activity_availability) + activity = activity_availability.activity + logger.debug("participant %s performing activity %s", participant_group_relationship.participant, activity) + response = self.client.post('/lighterprints/api/do-activity', { + 'participant_group_relationship_id': participant_group_relationship.id, + 'activity_id': activity.id + }) + logger.debug("response %s", response) + self.assertEqual(response.status_code, 200) + + --- a/vcweb/lighterprints/urls.py Sun Aug 07 18:14:28 2011 -0700 +++ b/vcweb/lighterprints/urls.py Mon Aug 08 11:48:58 2011 -0700 @@ -1,15 +1,15 @@ from django.conf.urls.defaults import url, patterns from vcweb.lighterprints.views import (ActivityDetailView, ActivityListView, MobileView, - post_chat_message, do_activity, DiscussionBoardView) + post_chat_message, perform_activity, DiscussionBoardView) urlpatterns = patterns('vcweb.lighterprints.views', url(r'^mobile$', MobileView.as_view(), name='mobile'), url(r'^(?P<experiment_id>\d+)/configure$', 'configure', name='configure'), url(r'^activity/list/?$', ActivityListView.as_view()), url(r'^activity/(?P<activity_id>\d+)$', ActivityDetailView.as_view()), - url(r'^activity/(?P<activity_id>\d+)/do$', do_activity), url(r'^discussion/(?P<experiment_id>\d+)/(?P<participant_id>\d+)', DiscussionBoardView.as_view()), url(r'^discussion/(?P<experiment_id>\d+)/', DiscussionBoardView.as_view()), - url(r'^discussion/(?P<experiment_id>\d+)/post', post_chat_message), + url(r'^api/do-activity$', perform_activity), + url(r'^api/post-chat', post_chat_message), ) --- a/vcweb/lighterprints/views.py Sun Aug 07 18:14:28 2011 -0700 +++ b/vcweb/lighterprints/views.py Mon Aug 08 11:48:58 2011 -0700 @@ -74,7 +74,7 @@ pass @csrf_exempt -def perform_activity_view(request, activity_id): +def perform_activity(request): form = ActivityForm(request.POST or None) if form.is_valid(): activity_id = form.cleaned_data['activity_id'] Repository URL: https://bitbucket.org/virtualcommons/vcweb/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |