def test_cant_claim_task_beyond_alotted_slots(self): event = Event.objects.all()[0] some_task = Task() some_task.for_event = event some_task.for_committee = Committee.objects.filter( name="Events Committee").all()[0] some_task.task_type = TaskType.objects.filter( short_description="Tabling").all()[0] some_task.start_time = datetime.datetime(2009,4,18,9) some_task.duration_minutes = 60 some_task.num_volunteers = 1 some_task.save() plainuser = User.objects.filter(username='******').all()[0] temp_volunteer = Volunteer() temp_volunteer.user = plainuser temp_volunteer.save() asn = TaskAssignment() asn.task = some_task asn.points = 1 asn.volunteer = temp_volunteer asn.save() # should not be able to save resp = self.client.get('/chirp/tasks/claim/%s.json' % some_task.id) json = simplejson.loads(resp.content) eq_(json['success'], False) eq_(json['error'], "All volunteers needed for this task have been filled " "(Tabling on Sat Apr 18th from 9:00 a.m. - 10:00 a.m.)")
def test_hide_expired_events(self): old_event = Event() old_event.name = "Pitchfork 2008" old_event.duration_days = 3 # make it just expire by a day: old_event.start_date = datetime.datetime.now() - timedelta(days=4) old_event.save() some_task = Task() some_task.for_event = old_event some_task.for_committee = Committee.objects.filter( name="Events Committee").all()[0] some_task.task_type = TaskType.objects.filter( short_description="Tabling").all()[0] some_task.start_time = datetime.datetime.now() - timedelta(days=30) some_task.duration_minutes = 60 some_task.num_volunteers = 1 some_task.save() plainuser = User.objects.filter(username='******').all()[0] temp_volunteer = Volunteer() temp_volunteer.user = plainuser temp_volunteer.save() asn = TaskAssignment() asn.task = some_task asn.points = 1 asn.volunteer = temp_volunteer asn.save() resp = self.client.get('/chirp/tasks/claim/') context = resp.context[0] eq_(sorted(e.name for e in context['events']), ['CHIRP Record Fair & Other Delights'])
def test_manage_tasks_context(self): resp = self.client.get('/chirp/tasks/manage/') context = resp.context[0] vol = Volunteer.objects.all().order_by("user__first_name")[0] eq_(context['form']['volunteer'].field.widget.choices[1][1], "%s %s" % (vol.user.first_name, vol.user.last_name)) eq_(0, len(context['task_assignments']))
def test_no_unassigned_tasks_to_show(self): resp = self.client.get('/chirp/tasks/manage/', { 'event': 1, 'show_unassigned': 'on' }) eq_(resp.status_code, 200) context = resp.context[0] eq_(len(context['task_assignments']), 0)
def test_manage_tasks_context(self): resp = self.client.get('/chirp/tasks/manage/') context = resp.context[0] vol = Volunteer.objects.all().order_by("user__first_name")[0] eq_(context['form']['volunteer'].field.widget.choices[1][1], "%s %s" % (vol.user.first_name, vol.user.last_name)) eq_(0, len(context['task_assignments']))
def test_no_unassigned_tasks_to_show(self): resp = self.client.get('/chirp/tasks/manage/', { 'event': 1, 'show_unassigned': 'on' }) eq_(resp.status_code, 200) context = resp.context[0] eq_(len(context['task_assignments']), 0)
def test_literal_positive(self): tmpl = loader.get_template_from_string(""" {% load volunteers_extras %} {% ifgreaterthan 2 1 %} yes {% endifgreaterthan %} """) val = tmpl.render(Context({})).strip() eq_(val, "yes")
def test_variable_false(self): tmpl = loader.get_template_from_string(""" {% load volunteers_extras %} {% ifgreaterthan foo bar %} yes {% endifgreaterthan %} """) val = tmpl.render(Context({'foo': 1, 'bar': 2})).strip() eq_(val, "")
def test_literal_false(self): tmpl = loader.get_template_from_string(""" {% load volunteers_extras %} {% ifgreaterthan 1 2 %} yes {% endifgreaterthan %} """) val = tmpl.render(Context({})).strip() eq_(val, "")
def test_wrong_email(self): f = ResetPasswordForm() f.cleaned_data= {'email': "*****@*****.**"} try: f.clean_email() except forms.ValidationError, err: eq_(err.messages, ( ["No user exists with that email. Please ask [email protected] " "to add you to the volunteer tracker."]))
def test_variable_positive(self): tmpl = loader.get_template_from_string(""" {% load volunteers_extras %} {% ifgreaterthan foo bar %} yes {% endifgreaterthan %} """) val = tmpl.render(Context({'foo': 2, 'bar': 1})).strip() eq_(val, "yes")
def test_clone_event(self): event = Event.objects.get(name='CHIRP Record Fair') resp = self.client.post('/chirp/tasks/clone-event', { 'existing_event': event.id, 'new_start_date': '2011-03-01', 'new_name': 'My Shiny New Event' }, follow=True) eq_(resp.status_code, 200) new_event = Event.objects.get(name='My Shiny New Event') eq_(new_event.tasks_can_be_claimed, False) assert len(new_event.task_set.all()) > 0, ( 'Unexpected: %r' % new_event.task_set.all())
def test_manage_tasks_for_event(self): resp = self.client.get('/chirp/tasks/manage/?event=%s' % 1) context = resp.context[0] a = context['task_assignments'][0] eq_(str(a['assignment'].task), "Event Load In: load in") eq_(context['event_id'], '1') eq_(context['volunteer_id'], 0) eq_(context['show_completed'], '') eq_(context['show_canceled'], '')
def test_user_must_be_staff(self): user = User.objects.filter(username='******')[0] f = VolunteerAdminForm() f.cleaned_data= {'user': user} try: f.clean_user() except forms.ValidationError, err: eq_(err.messages[0], ( "User plainuser_not_staff cannot be a volunteer because he/she " "has not been marked with Staff status (you can fix this in Home > " "Auth > Users under the Permissions section)"))
def test_user_must_be_volunteer(self): user = User.objects.filter(username='******')[0] f = VolunteerAdminForm() f.cleaned_data= {'user': user} try: f.clean_user() except forms.ValidationError, err: eq_(err.messages[0], ( "User plainuser cannot be a volunteer because he/she is not " "in the Volunteer group (You can fix this in Home > Auth > " "Users under the Groups section)"))
def test_edit_hrefs(self): resp = self.client.get('/chirp/tasks/manage/?volunteer=%s' % 2) context = resp.context[0] a = context['task_assignments'][0] resp = self.client.get(a['edit_task_href']) eq_(resp.context[0]['title'], "Change task") resp = self.client.get(a['edit_assignment_href']) eq_(resp.context[0]['title'], "Change task assignment")
def test_show_unassigned_tasks(self): completed = TaskAssignment.objects.all().delete() resp = self.client.get('/chirp/tasks/manage/', { 'event': 1, 'show_unassigned': 'on' }) eq_(resp.status_code, 200) context = resp.context[0] a = context['task_assignments'][0] eq_(str(a['task']), "Event Load In: load in")
def test_edit_hrefs(self): resp = self.client.get('/chirp/tasks/manage/?volunteer=%s' % 2) context = resp.context[0] a = context['task_assignments'][0] resp = self.client.get(a['edit_task_href']) eq_(resp.context[0]['title'], "Change task") resp = self.client.get(a['edit_assignment_href']) eq_(resp.context[0]['title'], "Change task assignment")
def test_manage_tasks_for_event(self): resp = self.client.get('/chirp/tasks/manage/?event=%s' % 1) context = resp.context[0] a = context['task_assignments'][0] eq_(str(a['assignment'].task), "Event Load In: load in") eq_(context['event_id'], '1') eq_(context['volunteer_id'], 0) eq_(context['show_completed'], '') eq_(context['show_canceled'], '')
def test_show_unassigned_tasks(self): completed = TaskAssignment.objects.all().delete() resp = self.client.get('/chirp/tasks/manage/', { 'event': 1, 'show_unassigned': 'on' }) eq_(resp.status_code, 200) context = resp.context[0] a = context['task_assignments'][0] eq_(str(a['task']), "Event Load In: load in")
def test_user_must_be_staff(self): user = User.objects.filter(username='******')[0] f = VolunteerAdminForm() f.cleaned_data = {'user': user} try: f.clean_user() except forms.ValidationError, err: eq_(err.messages[0], ( "User plainuser_not_staff cannot be a volunteer because he/she " "has not been marked with Staff status (you can fix this in Home > " "Auth > Users under the Permissions section)"))
def test_user_must_be_volunteer(self): user = User.objects.filter(username='******')[0] f = VolunteerAdminForm() f.cleaned_data = {'user': user} try: f.clean_user() except forms.ValidationError, err: eq_(err.messages[0], ("User plainuser cannot be a volunteer because he/she is not " "in the Volunteer group (You can fix this in Home > Auth > " "Users under the Groups section)"))
def test_clone_event(self): event = Event.objects.get(name='CHIRP Record Fair') resp = self.client.post('/chirp/tasks/clone-event', { 'existing_event': event.id, 'new_start_date': '2011-03-01', 'new_name': 'My Shiny New Event' }, follow=True) eq_(resp.status_code, 200) new_event = Event.objects.get(name='My Shiny New Event') eq_(new_event.tasks_can_be_claimed, False) assert len(new_event.task_set.all()) > 0, ('Unexpected: %r' % new_event.task_set.all())
def test_create_volunteer(self): vol_count = 3 v = Volunteer.objects.all() eq_(v.count(), vol_count) user = User.objects.filter(username='******')[0].id committees = [] committees.append( Committee.objects.filter(name='Music Department')[0].id) committees.append( Committee.objects.filter(name='Tech Committee')[0].id) resp = self.client.post('/volunteers/volunteer/add/', { 'user': user, 'committees': committees, }) # print resp self.assertRedirects(resp, '/volunteers/volunteer/') v = Volunteer.objects.all() eq_(v.count(), vol_count + 1) vol = v[0] eq_(vol.user.username, 'volunteertest') eq_(sorted([c.name for c in vol.committees.all()]), [u'Music Department', u'Tech Committee'])
def test_cant_claim_task_twice(self): event = Event.objects.all()[0] tasks = [t for t in event.tasks] task_to_claim = tasks[2] resp = self.client.get('/chirp/tasks/claim/%s.json' % task_to_claim.id) # interface shouldn't allow this but it's possible with two browser windows: resp = self.client.get('/chirp/tasks/claim/%s.json' % task_to_claim.id) json = simplejson.loads(resp.content) eq_(json['success'], False) eq_(json['error'], "You have already claimed this task (Tabling on Sat Apr " "18th from 11:00 a.m. - 12:00 p.m.)")
def test_search_users(self): resp = self.client.get('/chirp/search_users', {'q': 'b'}) eq_(resp.status_code, 200) data = sorted(resp.content.split("\n")) eq_(data, ['Bob Hope|6']) resp = self.client.get('/chirp/search_users', {'q': 'Jenny'}) eq_(resp.status_code, 200) data = sorted(resp.content.split("\n")) eq_(data, ['Jenny Craig|7'])
def test_add_attendee(self): meeting = Meeting.objects.get(meeting_date=datetime.date(2009, 3, 1)) a1 = User.objects.get(username='******') resp = self.client.get('/chirp/meetings/%s/attendee/add/%s.json' % (meeting.id, a1.id)) eq_(resp.status_code, 200) data = simplejson.loads(resp.content) eq_(data['success'], True) a2 = User.objects.get(username='******') resp = self.client.get('/chirp/meetings/%s/attendee/add/%s.json' % (meeting.id, a2.id)) eq_(resp.status_code, 200) data = simplejson.loads(resp.content) eq_(data['success'], True) eq_(sorted([a.first_name for a in meeting.attendees.all()]), ['Bob', 'Jenny'])
def test_update_task_status(self): completed = TaskStatus.objects.get(status="Completed").id resp = self.client.post('/chirp/tasks/manage/save_changes', { 'volunteer': 2, 'event': 0, 'show_completed': 'on', # set two assignments to completed: 'status__1': completed, 'status__2': completed }) redirect = '/chirp/tasks/manage/?volunteer=2&event=0&show_completed=on' self.assertRedirects(resp, redirect) resp = self.client.get(redirect) context = resp.context[0] a = context['task_assignments'][0] eq_(str(a['assignment'].status), "Completed") a = context['task_assignments'][1] eq_(str(a['assignment'].status), "Completed")
def test_new_meeting(self): resp = self.client.get('/chirp/meetings/02/05/2009/track.json') eq_(resp.status_code, 200) data = simplejson.loads(resp.content) eq_(data['attendees'], []) meeting = Meeting.objects.get(id=data['meeting_id']) eq_(meeting.meeting_date.timetuple()[0:3], (2009, 2, 5))
def test_update_task_status(self): completed = TaskStatus.objects.get(status="Completed").id resp = self.client.post( '/chirp/tasks/manage/save_changes', { 'volunteer': 2, 'event': 0, 'show_completed': 'on', # set two assignments to completed: 'status__1': completed, 'status__2': completed }) redirect = '/chirp/tasks/manage/?volunteer=2&event=0&show_completed=on' self.assertRedirects(resp, redirect) resp = self.client.get(redirect) context = resp.context[0] a = context['task_assignments'][0] eq_(str(a['assignment'].status), "Completed") a = context['task_assignments'][1] eq_(str(a['assignment'].status), "Completed")
def test_hide_tasks_for_claiming_when_event_not_ready(self): # make all tasks unready for claiming: for event in Event.objects.all(): event.tasks_can_be_claimed = False event.save() resp = self.client.get('/chirp/tasks/claim/') context = resp.context[0] eq_(len(context['events']), 1) event = context['events'][0] eq_(event.name, "CHIRP Record Fair & Other Delights") eq_([t for t in event.tasks], [])
def test_create_task(self): vol_id = Volunteer.objects.all()[0].id committee_id = Committee.objects.filter(name='Tech Committee')[0].id task_id = Task.objects.filter(description='Ears&Eyes Fest at Hideout')[0].id task_status_id = TaskStatus.objects.filter(status='Assigned')[0].id resp = self.client.post('/volunteers/taskassignment/add/', { 'volunteer': vol_id, 'points': 1, 'task': task_id, 'status': task_status_id }) # print resp.content self.assertRedirects(resp, '/volunteers/taskassignment/') task_asn = TaskAssignment.objects.all()[0] eq_(task_asn.volunteer.id, vol_id) eq_(task_asn.points, 1) eq_(task_asn.task.id, task_id) eq_(task_asn.status.id, task_status_id)
def test_claim_task_with_no_potential_points(self): event = Event.objects.all()[0] task_to_claim = Task() task_to_claim.for_committee = Committee.objects.all()[0] task_to_claim.task_type = TaskType.objects.all()[0] task_to_claim.for_event = event task_to_claim.save() resp = self.client.get('/chirp/tasks/claim/%s.json' % task_to_claim.id) json = simplejson.loads(resp.content) asn = TaskAssignment.objects.filter(task=task_to_claim) first_asn = asn[0] eq_(first_asn.task, task_to_claim) eq_(first_asn.task.for_event, event) eq_(first_asn.points, Decimal('1'))
def test_create_task(self): vol_id = Volunteer.objects.all()[0].id committee_id = Committee.objects.filter(name='Tech Committee')[0].id task_id = Task.objects.filter( description='Ears&Eyes Fest at Hideout')[0].id task_status_id = TaskStatus.objects.filter(status='Assigned')[0].id resp = self.client.post( '/volunteers/taskassignment/add/', { 'volunteer': vol_id, 'points': 1, 'task': task_id, 'status': task_status_id }) # print resp.content self.assertRedirects(resp, '/volunteers/taskassignment/') task_asn = TaskAssignment.objects.all()[0] eq_(task_asn.volunteer.id, vol_id) eq_(task_asn.points, 1) eq_(task_asn.task.id, task_id) eq_(task_asn.status.id, task_status_id)
def test_create_volunteer(self): vol_count = 3 v = Volunteer.objects.all() eq_(v.count(), vol_count) user = User.objects.filter(username='******')[0].id committees = [] committees.append(Committee.objects.filter(name='Music Department')[0].id) committees.append(Committee.objects.filter(name='Tech Committee')[0].id) resp = self.client.post('/volunteers/volunteer/add/', { 'user': user, 'committees': committees, }) # print resp self.assertRedirects(resp, '/volunteers/volunteer/') v = Volunteer.objects.all() eq_(v.count(), vol_count + 1) vol = v[0] eq_(vol.user.username, 'volunteertest') eq_(sorted([c.name for c in vol.committees.all()]), [u'Music Department', u'Tech Committee'])
def test_password_reset(self): user = User.objects.filter(username="******").all()[0] resp = self.client.post('/chirp/password_change/', { 'email': user.email, 'new_password1': "sooperhack", 'new_password2': "sooperhack" }) try: resp.context[0] except KeyError: pass else: eq_(resp.context[0]['form']['email'].errors, []) self.assertRedirects(resp, "/chirp/password_change_done") # get a fresh connection: user = User.objects.filter(username="******").all()[0] assert user.check_password("sooperhack") eq_(len(mail.outbox), 1) msg = mail.outbox[0] eq_(msg.from_email, "*****@*****.**") eq_(msg.subject, "New password for CHIRP Volunteer Tracker") # print msg.body assert "volunteertest" in msg.body assert "sooperhack" in msg.body assert "http://example.com" in msg.body eq_(msg.to, [user.email]) eq_(settings.EMAIL_HOST, 'email_host_when_testing') eq_(settings.EMAIL_PORT, 9999) eq_(settings.EMAIL_HOST_PASSWORD, 'email_passwd_when_testing') eq_(settings.EMAIL_HOST_USER, 'email_user_when_testing') eq_(settings.EMAIL_HOST, 'email_host_when_testing')
def test_manage_tasks_for_volunteer(self): resp = self.client.get('/chirp/tasks/manage/?volunteer=%s&show_canceled=on' % 2) context = resp.context[0] a = context['task_assignments'][0] eq_(str(a['assignment'].task), "Tabling: sell merch") a = context['task_assignments'][1] eq_(str(a['assignment'].task), "Tabling: sell swag") eq_(context['volunteer_id'], '2') eq_(context['event_id'], 0) eq_(context['show_completed'], '') eq_(context['show_canceled'], 'on')
def test_claim_task(self): event = Event.objects.all()[0] tasks = [t for t in event.tasks] task_to_claim = tasks[2] # simulate ajax claim request : resp = self.client.get('/chirp/tasks/claim/%s.json' % task_to_claim.id) json = simplejson.loads(resp.content) # TODO(kumar): hmm, django test environment does not expose current user the same way. # eq_(json, {'user': ''}) asn = TaskAssignment.objects.filter(task=task_to_claim) first_asn = asn[0] eq_(first_asn.task, task_to_claim) eq_(first_asn.task.for_event, event) eq_(first_asn.points, 3) eq_(len(mail.outbox), 1) msg = mail.outbox[0] eq_(msg.from_email, "*****@*****.**") eq_(msg.to, [first_asn.volunteer.user.email]) eq_(msg.subject, "You have volunteered for a CHIRP task.") # print msg.body assert "CHIRP Record Fair & Other Delights" in msg.body assert "Tabling on Sat Apr 18th from 11:00 a.m. - 12:00 p.m." in msg.body
def assertValidJson(self, response): eq_(response['content-type'], 'application/json') data = simplejson.loads(response.content) if 'error' in data: raise JsonResponseException(data['error'])
def test_show_tasks_for_claiming(self): resp = self.client.get('/chirp/tasks/claim/') context = resp.context[0] eq_(len(context['events']), 1) event = context['events'][0] eq_(event.name, "CHIRP Record Fair & Other Delights") tasks = [t for t in event.tasks] eq_(len(tasks), 3) eq_(tasks[0].task_type.short_description, "Tabling") eq_(tasks[0].claim_prompt, "You are about to commit to Tabling on Sat Apr 18th " "from 9:00 a.m. - 10:00 a.m..") eq_(tasks[0].claimed_by, [User.objects.get(username='******')])
def test_manage_tasks_for_volunteer(self): resp = self.client.get( '/chirp/tasks/manage/?volunteer=%s&show_canceled=on' % 2) context = resp.context[0] a = context['task_assignments'][0] eq_(str(a['assignment'].task), "Tabling: sell merch") a = context['task_assignments'][1] eq_(str(a['assignment'].task), "Tabling: sell swag") eq_(context['volunteer_id'], '2') eq_(context['event_id'], 0) eq_(context['show_completed'], '') eq_(context['show_canceled'], 'on')