Exemple #1
0
    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.)")
Exemple #2
0
    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)
Exemple #5
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']))
Exemple #6
0
 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, "")
Exemple #9
0
 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, "")
Exemple #10
0
 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."]))
Exemple #11
0
 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())
Exemple #13
0
    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)"))
Exemple #16
0
    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'], '')
Exemple #20
0
    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")
Exemple #21
0
    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)"))
Exemple #22
0
    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)"))
Exemple #23
0
 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())
Exemple #24
0
    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'])
Exemple #25
0
    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.)")
Exemple #26
0
    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'])
Exemple #27
0
    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")
Exemple #29
0
    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))
Exemple #30
0
    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")
Exemple #31
0
    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)
Exemple #33
0
    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'))
Exemple #34
0
    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'])
Exemple #36
0
    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')
Exemple #38
0
    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
Exemple #39
0
 def assertValidJson(self, response):
     eq_(response['content-type'], 'application/json')
     data = simplejson.loads(response.content)
     if 'error' in data:
         raise JsonResponseException(data['error'])
Exemple #40
0
    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='******')])
Exemple #41
0
    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')