Example #1
0
 def test_volunteer_conflict_sends_warning_to_areastaff(self):
     context = VolunteerContext()
     area = StaffAreaFactory(conference=context.conference,
                             staff_lead=context.profile)
     EventLabelFactory(
         event=context.opp_event,
         text=area.slug)
     change_window = context.add_window()
     context.bid.available_windows.add(context.window)
     form = self.get_form(context)
     form['available_windows'] = [change_window.pk]
     url = reverse('volunteer_edit',
                   urlconf='gbe.urls',
                   args=[context.bid.pk])
     login_as(context.profile, self)
     response = self.client.post(
         url,
         form,
         follow=True)
     assert_right_mail_right_addresses(
         1,
         3,
         "URGENT: Volunteer Schedule Conflict Occurred",
         [self.privileged_profile.contact_email,
          context.profile.contact_email])
 def test_parent_event(self):
     vol_context = VolunteerContext(conference=self.context.conference)
     lead = vol_context.set_staff_lead()
     class_context = ClassContext(
         conference=self.context.conference,
         teacher=PersonaFactory(performer_profile=self.profile),
         starttime=vol_context.opp_event.starttime)
     url = reverse(self.view_name,
                   args=[vol_context.opp_event.pk, "on"],
                   urlconf="gbe.scheduling.urls")
     login_as(self.profile, self)
     response = self.client.get(url, follow=True)
     staff_msg = assert_email_template_used("Volunteer Schedule Change",
                                            outbox_size=2,
                                            message_index=1)
     assert (vol_context.opportunity.e_title in staff_msg.body)
     conflict_msg = 'Conflicting booking: %s, Start Time: %s' % (
         class_context.bid.e_title,
         class_context.sched_event.starttime.strftime(GBE_DATETIME_FORMAT))
     assert (class_context.bid.e_title in staff_msg.body)
     assert_email_recipient([lead.user_object.email],
                            outbox_size=2,
                            message_index=1)
     self.assertContains(response, conflict_msg)
     assert (conflict_msg in staff_msg.body)
Example #3
0
 def setUp(self):
     self.context = VolunteerContext()
     self.url = reverse(
         self.view_name,
         args=[self.context.sched_event.pk],
         urlconf='gbe.scheduling.urls')
     self.factory = RequestFactory()
     self.client = Client()
     self.privileged_user = ProfileFactory().user_object
     grant_privilege(self.privileged_user, 'Scheduling Mavens')
Example #4
0
 def test_edit_volunteer_profile_is_owner(self):
     context = VolunteerContext()
     add_window = context.add_window()
     url = reverse('volunteer_edit',
                   urlconf='gbe.urls',
                   args=[context.bid.pk])
     login_as(context.profile, self)
     response = self.client.get(url)
     self.assertEqual(response.status_code, 200)
     self.assertTrue('I am Available....' in response.content)
Example #5
0
 def test_volunteer_edit_get_rank(self):
     context = VolunteerContext()
     add_window = context.add_window()
     url = reverse('volunteer_edit',
                   urlconf='gbe.urls',
                   args=[context.bid.pk])
     login_as(self.privileged_user, self)
     response = self.client.get(url)
     assert_rank_choice_exists(
         response,
         context.interest,
         context.interest.rank)
Example #6
0
    def test_volunteer_edit_get_with_stuff(self):
        clear_conferences()
        context = VolunteerContext()
        add_window = context.add_window()
        url = reverse('volunteer_edit',
                      urlconf='gbe.urls',
                      args=[context.bid.pk])
        login_as(self.privileged_user, self)
        response = self.client.get(url)

        self.assertEqual(response.status_code, 200)
        self.assertTrue('I am Available....' in response.content)
 def setUp(self):
     self.client = Client()
     self.user = ProfileFactory.create().user_object
     self.privileged_profile = ProfileFactory()
     self.privileged_user = self.privileged_profile.user_object
     grant_privilege(self.privileged_user, 'Volunteer Coordinator')
     grant_privilege(self.privileged_user, 'Scheduling Mavens')
     self.context = VolunteerContext()
     self.url = reverse(self.view_name,
                        args=[
                            self.context.conference.conference_slug,
                            self.context.opp_event.pk
                        ],
                        urlconf="gbe.scheduling.urls")
 def setUp(self):
     self.room = RoomFactory()
     self.show_volunteer = VolunteerContext()
     self.current_conference = self.show_volunteer.conference
     self.special_volunteer = VolunteerContext(event=GenericEventFactory(
         e_conference=self.current_conference))
     self.staff_area = StaffAreaContext(conference=self.current_conference)
     self.url = reverse(self.view_name,
                        args=[self.current_conference.conference_slug],
                        urlconf='gbe.scheduling.urls')
     self.factory = RequestFactory()
     self.client = Client()
     self.privileged_user = ProfileFactory().user_object
     grant_privilege(self.privileged_user, 'Scheduling Mavens')
 def test_volunteer_changestate_gives_overbook_warning(self):
     ProfilePreferencesFactory(profile=self.volunteer.profile)
     context = VolunteerContext(
         profile=self.volunteer.profile)
     x, opp = context.add_opportunity()
     url = reverse(self.view_name,
                   args=[self.volunteer.pk],
                   urlconf='gbe.urls')
     login_as(self.privileged_user, self)
     data = {'conference': context.conference,
             'events': [opp.pk],
             'accepted': 3}
     response = self.client.post(url, data=data, follow=True)
     self.assertContains(response, "SCHEDULE_CONFLICT")
Example #10
0
 def test_copy_parent_w_area(self):
     show_context = VolunteerContext()
     staff = StaffAreaContext(conference=show_context.conference)
     EventLabelFactory(event=show_context.sched_event, text=staff.area.slug)
     url = reverse(
         self.view_name,
         args=[show_context.sched_event.pk],
         urlconf='gbe.scheduling.urls')
     data = {
         'copy_mode': 'include_parent',
         'copy_to_day': show_context.conf_day.pk,
         'room': self.context.room.pk,
         'pick_event': "Finish",
     }
     login_as(self.privileged_user, self)
     response = self.client.post(url, data=data, follow=True)
     max_pk = Event.objects.latest('pk').pk
     redirect_url = "%s?%s-day=%d&filter=Filter&new=[%s]" % (
         reverse('manage_event_list',
                 urlconf='gbe.scheduling.urls',
                 args=[show_context.conference.conference_slug]),
         show_context.conference.conference_slug,
         show_context.conf_day.pk,
         str(max_pk),)
     self.assertContains(response, reverse(
         'edit_staff',
         urlconf='gbe.scheduling.urls',
         args=[staff.area.pk]))
Example #11
0
 def test_authorized_user_pick_mode_only_children(self):
     show_context = VolunteerContext()
     target_context = ShowContext()
     url = reverse(
         self.view_name,
         args=[show_context.sched_event.pk],
         urlconf='gbe.scheduling.urls')
     data = {
         'copy_mode': 'copy_children_only',
         'target_event': target_context.sched_event.pk,
         'room': target_context.room.pk,
         'pick_mode': "Next",
     }
     delta = target_context.sched_event.starttime.date(
         ) - show_context.sched_event.starttime.date()
     login_as(self.privileged_user, self)
     response = self.client.post(url, data=data, follow=True)
     self.assertContains(
         response,
         '<input type="radio" name="copy_mode" ' +
         'value="copy_children_only" ' +
         'id="id_copy_mode_0" required checked />',
         html=True)
     self.assertContains(
         response,
         '<option value="%d" selected>' % (
             target_context.sched_event.pk))
     self.assertContains(response, "Choose Sub-Events to be copied")
     self.assertContains(response, "%s - %s" % (
         show_context.opportunity.e_title,
         (show_context.opp_event.start_time + delta).strftime(
                     self.copy_date_format)))
Example #12
0
 def test_vol_opp_present(self):
     vol_context = VolunteerContext()
     vol_context.sched_event.max_volunteer = 7
     vol_context.sched_event.save()
     vol_context.opp_event.set_locations([])
     grant_privilege(self.privileged_user, 'Volunteer Coordinator')
     login_as(self.privileged_user, self)
     self.url = reverse(self.view_name,
                        args=[
                            vol_context.conference.conference_slug,
                            vol_context.sched_event.pk
                        ],
                        urlconf='gbe.scheduling.urls')
     response = self.client.get(self.url, follow=True)
     self.assertContains(
         response, 'name="opp_event_id" type="hidden" value="%d" />' %
         (vol_context.opportunity.pk))
     self.assertContains(
         response, 'name="opp_sched_id" type="hidden" value="%d" />' %
         (vol_context.opp_event.pk))
     self.assertContains(
         response, '<option value="%d" selected="selected">%s</option>' %
         (vol_context.window.day.pk,
          vol_context.window.day.day.strftime("%b. %-d, %Y")), 3)
     self.assertContains(response,
                         'name="max_volunteer" type="number" value="2" />')
     self.assertContains(
         response,
         'name="duration" step="any" type="number" value="1.0" />')
Example #13
0
 def test_vol_opp_present(self):
     vol_context = VolunteerContext()
     vol_context.sched_event.max_volunteer = 7
     vol_context.sched_event.save()
     vol_context.opp_event.set_locations([])
     grant_privilege(self.privileged_user, 'Volunteer Coordinator')
     login_as(self.privileged_user, self)
     self.url = reverse(self.view_name,
                        args=[
                            vol_context.conference.conference_slug,
                            vol_context.sched_event.pk
                        ],
                        urlconf='gbe.scheduling.urls')
     response = self.client.get(self.url, follow=True)
     self.assertContains(
         response, 'type="hidden" name="opp_event_id" value="%d"' %
         (vol_context.opportunity.pk))
     self.assertContains(
         response, 'type="hidden" name="opp_sched_id" value="%d"' %
         (vol_context.opp_event.pk))
     assert_option_state(response, vol_context.conf_day.pk,
                         vol_context.conf_day.day.strftime("%b. %-d, %Y"),
                         True)
     self.assertContains(response, 'name="max_volunteer" value="2"')
     self.assertContains(response, 'name="duration" value="1.0"')
     self.assertContains(response, "Display Staff", 2)
Example #14
0
 def test_update_profile_post_valid_redirect(self):
     context = VolunteerContext()
     context.conference.accepting_bids = True
     context.conference.save()
     redirect = reverse('volunteer_create', urlconf='gbe.urls')
     response = self.post_profile(redirect=redirect)
     self.assertRedirects(response, redirect)
Example #15
0
 def test_pick_drop_in(self):
     special = GenericEventFactory(e_conference=self.context.conference,
                                   type="Drop-In")
     specialstaffcontext = VolunteerContext(event=special, role="Teacher")
     limited_profile = ProfileFactory()
     grant_privilege(limited_profile.user_object, "Registrar")
     login_as(limited_profile, self)
     data = {
         'email-select-conference': [
             self.context.conference.pk,
         ],
         'email-select-roles': [
             'Teacher',
         ],
         'event-select-event_collections': "Drop-In",
         'refine': True,
     }
     response = self.client.post(self.url, data=data, follow=True)
     print response
     self.assertNotContains(response,
                            self.context.teacher.contact.user_object.email)
     self.assertContains(response,
                         specialstaffcontext.profile.user_object.email)
     self.assertNotContains(response, special.e_title)
     assert_checkbox(response,
                     "event_collections",
                     1,
                     "Drop-In",
                     "All Drop-In Classes",
                     prefix="event-select")
 def test_copy_child_event(self):
     show_context = VolunteerContext()
     target_context = ShowContext()
     url = reverse(
         self.view_name,
         args=[show_context.sched_event.pk],
         urlconf='gbe.scheduling.urls')
     data = {
         'copy_mode': 'copy_children_only',
         'target_event': target_context.sched_event.pk,
         'copied_event': show_context.opp_event.pk,
         'pick_event': "Finish",
     }
     login_as(self.privileged_user, self)
     response = self.client.post(url, data=data, follow=True)
     max_pk = Event.objects.latest('pk').pk
     redirect_url = "%s?%s-day=%d&filter=Filter&new=%s" % (
         reverse('manage_event_list',
                 urlconf='gbe.scheduling.urls',
                 args=[target_context.conference.conference_slug]),
         target_context.conference.conference_slug,
         target_context.days[0].pk,
         str([max_pk]),)
     self.assertRedirects(response, redirect_url)
     assert_alert_exists(
         response,
         'success',
         'Success',
         'Occurrence has been updated.<br>%s, Start Time: %s' % (
             show_context.opportunity.e_title,
             datetime.combine(
                 target_context.days[0].day,
                 show_context.opp_event.starttime.time()).strftime(
                 DATETIME_FORMAT)))
 def test_authorized_user_pick_mode_include_parent(self):
     another_day = ConferenceDayFactory(conference=self.context.conference)
     show_context = VolunteerContext()
     url = reverse(
         self.view_name,
         args=[show_context.sched_event.pk],
         urlconf='gbe.scheduling.urls')
     data = {
         'copy_mode': 'include_parent',
         'copy_to_day': another_day.pk,
         'pick_mode': "Next",
     }
     delta = another_day.day - show_context.sched_event.starttime.date()
     login_as(self.privileged_user, self)
     response = self.client.post(url, data=data, follow=True)
     self.assertContains(
         response,
         '<input checked="checked" id="id_copy_mode_1" name="copy_mode" ' +
         'type="radio" value="include_parent" />')
     self.assertContains(
         response,
         '<option value="%d" selected="selected">' % another_day.pk)
     self.assertContains(response, "Choose Sub-Events to be copied")
     self.assertContains(response, "%s - %s" % (
         show_context.opportunity.e_title,
         (show_context.opp_event.start_time + delta).strftime(
                     self.copy_date_format)))
Example #18
0
 def test_copy_only_parent_event(self):
     another_day = ConferenceDayFactory()
     show_context = VolunteerContext()
     url = reverse(
         self.view_name,
         args=[show_context.sched_event.pk],
         urlconf='gbe.scheduling.urls')
     data = {
         'copy_mode': 'include_parent',
         'copy_to_day': another_day.pk,
         'room': self.context.room.pk,
         'pick_event': "Finish",
     }
     login_as(self.privileged_user, self)
     response = self.client.post(url, data=data, follow=True)
     max_pk = Event.objects.latest('pk').pk
     redirect_url = "%s?%s-day=%d&filter=Filter&new=[%s]" % (
         reverse('manage_event_list',
                 urlconf='gbe.scheduling.urls',
                 args=[another_day.conference.conference_slug]),
         another_day.conference.conference_slug,
         another_day.pk,
         str(max_pk),)
     self.assertRedirects(response, redirect_url)
     assert_alert_exists(
         response,
         'success',
         'Success',
         'Occurrence has been updated.<br>%s, Start Time: %s' % (
             show_context.event.e_title,
             datetime.combine(
                 another_day.day,
                 show_context.sched_event.starttime.time()).strftime(
                 GBE_DATETIME_FORMAT)))
     self.assertContains(response, "Occurrence has been updated.<br>", 1)
 def test_get_allocation_resource_type(self):
     context = VolunteerContext()
     response = self.client.get('/admin/scheduler/resourceallocation/',
                                follow=True)
     self.assertContains(response, str("Profile"))
     self.assertContains(response, "Volunteer")
     self.assertContains(response, str(context.conference))
 def test_post_event_change(self):
     VolunteerContext(conference=self.day.conference)
     login_as(self.profile, self)
     response = self.client.post(
         reverse("schedule_conference",
                 urlconf="gbe.scheduling.urls",
                 args=[self.day.pk]),
         data={'%d-day' % self.day.pk: self.day.day+timedelta(days=30)},
         follow=True)
     self.assertEqual(response.status_code, 200)
     self.assertRedirects(
         response,
         ("%s?%s-calendar_type=0&%s-calendar_type=1&%s-calendar_type=2" +
          "&filter=Filter") % (
          reverse('manage_event_list', urlconf='gbe.scheduling.urls'),
          self.day.conference.conference_slug,
          self.day.conference.conference_slug,
          self.day.conference.conference_slug))
     self.assertContains(
         response,
         "Moved Conference %s by %d days, change %d conference days" % (
             self.day.conference.conference_slug,
             30,
             1))
     self.assertContains(
         response,
         "Moved %d scheduled events by %d days" % (
             2,
             30))
Example #21
0
 def edit_volunteer(self, rank=5):
     clear_conferences()
     pref = ProfilePreferencesFactory()
     context = VolunteerContext(profile=pref.profile)
     add_window = context.add_window()
     url = reverse('volunteer_edit',
                   urlconf='gbe.urls',
                   args=[context.bid.pk])
     login_as(self.privileged_user, self)
     form = self.get_form(context, rank=rank)
     form['unavailable_windows'] = add_window.pk
     response = self.client.post(
         url,
         form,
         follow=True)
     return response, context
 def setUp(self):
     Conference.objects.all().delete()
     self.client = Client()
     self.privileged_profile = ProfileFactory()
     self.privileged_user = self.privileged_profile.user_object
     grant_privilege(self.privileged_user, 'Volunteer Coordinator')
     self.context = VolunteerContext()
     self.url = reverse(self.view_name, urlconf='gbe.scheduling.urls')
Example #23
0
 def test_copy_child_not_like_parent(self):
     another_day = ConferenceDayFactory()
     show_context = VolunteerContext()
     opportunity, opp_sched = show_context.add_opportunity(
         start_time=show_context.sched_event.starttime + timedelta(1.3))
     opp_sched.approval_needed = True
     opp_sched.save()
     url = reverse(
         self.view_name,
         args=[show_context.sched_event.pk],
         urlconf='gbe.scheduling.urls')
     data = {
         'copy_mode': 'include_parent',
         'copy_to_day': another_day.pk,
         'copied_event': opp_sched.pk,
         'room': self.context.room.pk,
         'pick_event': "Finish",
     }
     login_as(self.privileged_user, self)
     max_pk = Event.objects.latest('pk').pk
     response = self.client.post(url, data=data, follow=True)
     new_occurrences = []
     for occurrence in Event.objects.filter(pk__gt=max_pk).order_by('pk'):
         new_occurrences += [occurrence.pk]
     redirect_url = "%s?%s-day=%d&filter=Filter&new=%s" % (
         reverse('manage_event_list',
                 urlconf='gbe.scheduling.urls',
                 args=[another_day.conference.conference_slug]),
         another_day.conference.conference_slug,
         another_day.pk,
         str(new_occurrences).replace(" ", "%20"))
     self.assertRedirects(response, redirect_url)
     assert_alert_exists(
         response,
         'success',
         'Success',
         'Occurrence has been updated.<br>%s, Start Time: %s' % (
             opportunity.e_title,
             datetime.combine(
                 another_day.day + timedelta(1),
                 opp_sched.starttime.time()).strftime(
                 GBE_DATETIME_FORMAT)))
     new_vol_opp = Event.objects.get(pk=max_pk)
     self.assertEqual(new_vol_opp.max_volunteer, opp_sched.max_volunteer)
     self.assertEqual(new_vol_opp.location, opp_sched.location)
     self.assertTrue(new_vol_opp.approval_needed)
 def test_delete_w_parent(self):
     vol_context = VolunteerContext()
     self.url = reverse(self.view_name,
                        urlconf="gbe.scheduling.urls",
                        args=[vol_context.sched_event.pk])
     login_as(self.privileged_profile, self)
     response = self.client.get(self.url, follow=True)
     self.assertContains(response, "PARENT_EVENT_DELETION")
Example #25
0
 def test_get_show(self, ):
     context = VolunteerContext()
     grant_privilege(self.profile, 'Act Reviewers')
     login_as(self.profile, self)
     response = self.client.get(
         reverse('staff_area', urlconf="gbe.reporting.urls"),
         data={'conf_slug': context.conference.conference_slug})
     self.assertEqual(response.status_code, 200)
     self.assertContains(response, context.event.e_title)
Example #26
0
 def test_volunteer_edit_get(self):
     context = VolunteerContext()
     add_window = context.add_window()
     context.bid.b_title = "myTitle"
     context.bid.save()
     url = reverse('volunteer_edit',
                   urlconf='gbe.urls',
                   args=[context.bid.pk])
     login_as(self.privileged_user, self)
     response = self.client.get(url, follow=True)
     self.assertEqual(response.status_code, 200)
     self.assertTrue('Volunteer at the Expo' in response.content)
     assert_hidden_value(
         response,
         "id_b_title",
         "b_title",
         context.bid.b_title,
         128)
 def setUp(self):
     self.show_volunteer = VolunteerContext()
     self.current_conference = self.show_volunteer.conference
     self.url = reverse(self.view_name,
                        args=[self.current_conference.conference_slug],
                        urlconf='gbe.scheduling.urls')
     self.client = Client()
     self.privileged_user = ProfileFactory().user_object
     grant_privilege(self.privileged_user, 'Scheduling Mavens')
 def test_authorized_user_get_w_child_events(self):
     target_event = VolunteerContext()
     self.context.add_opportunity()
     login_as(self.privileged_user, self)
     response = self.client.get(self.url)
     self.assert_good_mode_form(
         response,
         target_event.event.e_title,
         target_event.sched_event.start_time)
 def test_show_approval_needed_event(self):
     context = VolunteerContext(event=self.context.show,
                                sched_event=self.context.sched_event)
     context.opp_event.approval_needed = True
     context.opp_event.save()
     login_as(self.profile, self)
     response = self.client.get(self.url)
     self.assertContains(response, context.opportunity.e_title)
     self.assertContains(response, 'class="approval_needed"')
Example #30
0
 def test_show_approval_needed_event(self):
     show = ShowFactory()
     context = VolunteerContext(event=show)
     context.opp_event.approval_needed = True
     context.opp_event.save()
     grant_privilege(self.profile, 'Act Reviewers')
     login_as(self.profile, self)
     response = self.client.get(self.url)
     self.assertContains(response, context.opportunity.e_title)
     self.assertContains(response, 'class="approval_needed"')
 def setUp(self):
     self.context = VolunteerContext()
     self.url = reverse(
         self.view_name,
         args=[self.context.sched_event.pk],
         urlconf='gbe.scheduling.urls')
     self.factory = RequestFactory()
     self.client = Client()
     self.privileged_user = ProfileFactory().user_object
     grant_privilege(self.privileged_user, 'Scheduling Mavens')
 def test_copy_child_not_like_parent(self):
     another_day = ConferenceDayFactory()
     show_context = VolunteerContext()
     opportunity, opp_sched = show_context.add_opportunity(
         start_time=show_context.sched_event.starttime + timedelta(1.3))
     url = reverse(
         self.view_name,
         args=[show_context.sched_event.pk],
         urlconf='gbe.scheduling.urls')
     data = {
         'copy_mode': 'include_parent',
         'copy_to_day': another_day.pk,
         'copied_event': opp_sched.pk,
         'pick_event': "Finish",
     }
     login_as(self.privileged_user, self)
     max_pk = Event.objects.latest('pk').pk
     response = self.client.post(url, data=data, follow=True)
     new_occurrences = []
     for occurrence in Event.objects.filter(pk__gt=max_pk):
         new_occurrences += [occurrence.pk]
     redirect_url = "%s?%s-day=%d&filter=Filter&new=%s" % (
         reverse('manage_event_list',
                 urlconf='gbe.scheduling.urls',
                 args=[another_day.conference.conference_slug]),
         another_day.conference.conference_slug,
         another_day.pk,
         replace(str(new_occurrences), " ", "%20"))
     self.assertRedirects(response, redirect_url)
     assert_alert_exists(
         response,
         'success',
         'Success',
         'Occurrence has been updated.<br>%s, Start Time: %s' % (
             opportunity.e_title,
             datetime.combine(
                 another_day.day + timedelta(1),
                 opp_sched.starttime.time()).strftime(
                 DATETIME_FORMAT)))
     new_vol_opp = Event.objects.get(pk=max_pk)
     self.assertEqual(new_vol_opp.max_volunteer, opp_sched.max_volunteer)
     self.assertEqual(new_vol_opp.location, opp_sched.location)
Example #33
0
 def test_set_uavailable_window_conflict(self):
     context = VolunteerContext()
     change_window = context.add_window()
     context.bid.available_windows.add(change_window.pk)
     form = self.get_form(context)
     form['unavailable_windows'] = [context.window.pk]
     url = reverse('volunteer_edit',
                   urlconf='gbe.urls',
                   args=[context.bid.pk])
     login_as(context.profile, self)
     response = self.client.post(
         url,
         form,
         follow=True)
     assert 'Warning', "<li>%s working for %s - as %s" % (
         context.window.start_time.strftime(DATETIME_FORMAT),
         str(context.opportunity),
         context.opportunity.child(
             ).volunteer_category_description
         ) in response.content
 def setUp(self):
     self.client = Client()
     self.user = ProfileFactory.create().user_object
     self.privileged_profile = ProfileFactory()
     self.privileged_user = self.privileged_profile.user_object
     grant_privilege(self.privileged_user, 'Volunteer Coordinator')
     grant_privilege(self.privileged_user, 'Scheduling Mavens')
     self.context = VolunteerContext()
     self.url = reverse(
         self.view_name,
         args=[self.context.conference.conference_slug,
               self.context.opp_event.pk],
         urlconf="gbe.scheduling.urls")
Example #35
0
 def post_conflict(self, staff=True):
     context = VolunteerContext()
     change_window = context.add_window()
     if staff:
         worker = WorkerFactory(
             _item=context.profile,
             role='Staff Lead'
         )
         ResourceAllocationFactory(
             event=context.sched_event,
             resource=worker)
     context.bid.available_windows.add(context.window)
     form = self.get_form(context)
     form['available_windows'] = [change_window.pk]
     url = reverse('volunteer_edit',
                   urlconf='gbe.urls',
                   args=[context.bid.pk])
     login_as(context.profile, self)
     response = self.client.post(
         url,
         form,
         follow=True)
     return response, context
Example #36
0
 def setUp(self):
     self.context = VolunteerContext(event=GenericEventFactory())
     self.context.sched_event.max_volunteer = 7
     self.context.sched_event.save()
     self.context.event.duration = Duration(hours=1, minutes=30)
     self.context.event.save()
     self.room = self.context.room
     self.staff_lead = self.context.set_staff_lead()
     self.extra_day = ConferenceDayFactory(
         conference=self.context.conference,
         day=self.context.conf_day.day + timedelta(days=1))
     self.url = reverse(
         self.view_name,
         args=[self.context.conference.conference_slug,
               self.context.opp_event.pk],
         urlconf='gbe.scheduling.urls')
     self.client = Client()
     self.privileged_user = ProfileFactory().user_object
     grant_privilege(self.privileged_user, 'Scheduling Mavens')
class TestShowVolunteers(TestCase):
    view_name = 'edit_volunteer'

    def setUp(self):
        self.client = Client()
        self.user = ProfileFactory.create().user_object
        self.privileged_profile = ProfileFactory()
        self.privileged_user = self.privileged_profile.user_object
        grant_privilege(self.privileged_user, 'Volunteer Coordinator')
        grant_privilege(self.privileged_user, 'Scheduling Mavens')
        self.context = VolunteerContext()
        self.url = reverse(
            self.view_name,
            args=[self.context.conference.conference_slug,
                  self.context.opp_event.pk],
            urlconf="gbe.scheduling.urls")

    def test_no_available_volunteers(self):
        context = StaffAreaContext()
        volunteer_opp = context.add_volunteer_opp()
        volunteer, alloc = context.book_volunteer(
            volunteer_opp)
        login_as(self.privileged_profile, self)
        response = self.client.get(
            reverse(
                self.view_name,
                args=[context.conference.conference_slug,
                      volunteer_opp.pk],
                urlconf="gbe.scheduling.urls"),
            follow=True)
        assert ("no available volunteers" in response.content)

    def test_volunteer_has_conflict(self):
        login_as(self.privileged_profile, self)
        response = self.client.get(self.url, follow=True)
        assert("no available volunteers" not in response.content)
        assert_link(response, self.url)

    def test_volunteer_has_class_conflict(self):
        class_context = ClassContext(
            conference=self.context.conference,
            teacher=PersonaFactory(performer_profile=self.context.profile),
            starttime=self.context.opp_event.start_time)
        login_as(self.privileged_profile, self)
        response = self.client.get(self.url, follow=True)
        assert("no available volunteers" not in response.content)
        assert_link(response, reverse(
            self.view_name,
            args=[self.context.conference.conference_slug,
                  class_context.sched_event.pk],
            urlconf="gbe.scheduling.urls"))

    def test_volunteer_has_show_conflict(self):
        show_context = ShowContext(
            conference=self.context.conference,
            performer=PersonaFactory(performer_profile=self.context.profile),
            starttime=self.context.opp_event.start_time)
        login_as(self.privileged_profile, self)
        response = self.client.get(self.url, follow=True)
        assert("no available volunteers" not in response.content)
        assert_link(response, reverse(
            self.view_name,
            args=[self.context.conference.conference_slug,
                  show_context.sched_event.pk],
            urlconf="gbe.scheduling.urls"))

    def test_volunteer_has_earlier_conflict(self):
        opportunity, opp_event = self.context.add_opportunity(
            start_time=self.context.opp_event.start_time-timedelta(minutes=30))
        conflict = ResourceAllocationFactory(resource=self.context.worker,
                                             event=opp_event)
        login_as(self.privileged_profile, self)
        response = self.client.get(self.url, follow=True)
        assert("no available volunteers" not in response.content)
        assert_link(response, reverse(
            self.view_name,
            args=[self.context.conference.conference_slug,
                  opp_event.pk],
            urlconf="gbe.scheduling.urls"))

    def test_volunteer_is_available(self):
        self.context.bid.available_windows.add(self.context.window)
        login_as(self.privileged_profile, self)
        response = self.client.get(self.url, follow=True)
        assert ("no available volunteers" not in response.content)
        assert('<td class="bid-table">Available</td>' in response.content)

    def test_volunteer_is_not_available(self):
        login_as(self.privileged_profile, self)
        response = self.client.get(self.url, follow=True)
        assert ("no available volunteers" not in response.content)
        assert('<td class="bid-table">Not Available</td>' in response.content)

    def test_volunteer_is_really_not_available(self):
        self.context.bid.unavailable_windows.add(self.context.window)
        login_as(self.privileged_profile, self)
        response = self.client.get(self.url, follow=True)
        assert ("no available volunteers" in response.content)

    def test_volunteer_is_interested(self):
        login_as(self.privileged_profile, self)
        response = self.client.get(self.url, follow=True)
        assert('4 - Somewhat interested' in response.content)

    def test_volunteer_is_not(self):
        self.context.interest.rank = 0
        self.context.interest.save()
        login_as(self.privileged_profile, self)
        response = self.client.get(self.url, follow=True)
        assert('4 - Somewhat interested' not in response.content)
        assert("no available volunteers" not in response.content)

    def test_volunteer_has_no_rank(self):
        self.context.interest.delete()
        login_as(self.privileged_profile, self)
        response = self.client.get(self.url, follow=True)
        assert('4 - Somewhat interested' not in response.content)
        assert("no available volunteers" not in response.content)
class TestCopyOccurrence(TestCase):
    view_name = 'copy_event_schedule'
    copy_date_format = "%a, %b %-d, %Y %-I:%M %p"

    def setUp(self):
        self.context = VolunteerContext()
        self.url = reverse(
            self.view_name,
            args=[self.context.sched_event.pk],
            urlconf='gbe.scheduling.urls')
        self.factory = RequestFactory()
        self.client = Client()
        self.privileged_user = ProfileFactory().user_object
        grant_privilege(self.privileged_user, 'Scheduling Mavens')

    def assert_good_mode_form(self, response, title, date):
        self.assertEqual(response.status_code, 200)
        self.assertContains(response,
                            self.context.conf_day.day.strftime(DATE_FORMAT))
        self.assertContains(response, copy_mode_choices[0][1])
        self.assertContains(response, copy_mode_choices[1][1])
        self.assertContains(response, "%s - %s" % (
            title,
            date.strftime(DATETIME_FORMAT)))

    def test_create_event_unauthorized_user(self):
        login_as(ProfileFactory(), self)
        response = self.client.get(self.url)
        self.assertEqual(403, response.status_code)

    def test_authorized_user_can_access(self):
        login_as(self.privileged_user, self)
        response = self.client.get(self.url)
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, "Copying - %s: %s" % (
            self.context.event.e_title,
            self.context.sched_event.starttime.strftime(
                self.copy_date_format)))

    def test_authorized_user_get_no_child_event(self):
        login_as(self.privileged_user, self)
        self.url = reverse(
            self.view_name,
            args=[self.context.opp_event.pk],
            urlconf='gbe.scheduling.urls')
        response = self.client.get(self.url)
        self.assertEqual(response.status_code, 200)
        self.assertContains(response,
                            self.context.conf_day.day.strftime(DATE_FORMAT))
        self.assertNotContains(response, copy_mode_choices[0][1])

    def test_authorized_user_get_w_child_events(self):
        target_event = VolunteerContext()
        self.context.add_opportunity()
        login_as(self.privileged_user, self)
        response = self.client.get(self.url)
        self.assert_good_mode_form(
            response,
            target_event.event.e_title,
            target_event.sched_event.start_time)

    def test_bad_occurrence(self):
        url = reverse(
            self.view_name,
            args=[self.context.sched_event.pk+100],
            urlconf='gbe.scheduling.urls')
        login_as(self.privileged_user, self)
        response = self.client.get(url)
        self.assertEqual(response.status_code, 404)

    def test_authorized_user_get_show(self):
        show_context = VolunteerContext()
        target_context = ShowContext()
        url = reverse(
            self.view_name,
            args=[show_context.sched_event.pk],
            urlconf='gbe.scheduling.urls')
        login_as(self.privileged_user, self)
        response = self.client.get(url)
        self.assert_good_mode_form(
            response,
            target_context.show.e_title,
            target_context.sched_event.start_time)

    def test_authorized_user_get_class(self):
        copy_class = ClassFactory()
        vol_context = VolunteerContext(event=copy_class)
        target_context = ClassContext()
        url = reverse(
            self.view_name,
            args=[vol_context.sched_event.pk],
            urlconf='gbe.scheduling.urls')
        login_as(self.privileged_user, self)
        response = self.client.get(url)
        self.assert_good_mode_form(
            response,
            target_context.bid.e_title,
            target_context.sched_event.start_time)

    def test_copy_single_event(self):
        another_day = ConferenceDayFactory(
            conference=self.context.conference,
            day=self.context.conf_day.day + timedelta(days=1))
        data = {
            'copy_to_day': another_day.pk,
            'pick_mode': "Next",
        }
        login_as(self.privileged_user, self)
        self.url = reverse(
            self.view_name,
            args=[self.context.opp_event.pk],
            urlconf='gbe.scheduling.urls')
        response = self.client.post(self.url, data=data, follow=True)
        max_pk = Event.objects.latest('pk').pk
        redirect_url = "%s?%s-day=%d&filter=Filter&new=%s" % (
            reverse('manage_event_list',
                    urlconf='gbe.scheduling.urls',
                    args=[another_day.conference.conference_slug]),
            another_day.conference.conference_slug,
            another_day.pk,
            str([max_pk]),)
        self.assertRedirects(response, redirect_url)
        assert_alert_exists(
            response,
            'success',
            'Success',
            'Occurrence has been updated.<br>%s, Start Time: %s' % (
                self.context.opportunity.e_title,
                datetime.combine(
                    another_day.day,
                    self.context.opp_event.starttime.time()).strftime(
                    DATETIME_FORMAT)))

    def test_authorized_user_pick_mode_include_parent(self):
        another_day = ConferenceDayFactory(conference=self.context.conference)
        show_context = VolunteerContext()
        url = reverse(
            self.view_name,
            args=[show_context.sched_event.pk],
            urlconf='gbe.scheduling.urls')
        data = {
            'copy_mode': 'include_parent',
            'copy_to_day': another_day.pk,
            'pick_mode': "Next",
        }
        delta = another_day.day - show_context.sched_event.starttime.date()
        login_as(self.privileged_user, self)
        response = self.client.post(url, data=data, follow=True)
        self.assertContains(
            response,
            '<input checked="checked" id="id_copy_mode_1" name="copy_mode" ' +
            'type="radio" value="include_parent" />')
        self.assertContains(
            response,
            '<option value="%d" selected="selected">' % another_day.pk)
        self.assertContains(response, "Choose Sub-Events to be copied")
        self.assertContains(response, "%s - %s" % (
            show_context.opportunity.e_title,
            (show_context.opp_event.start_time + delta).strftime(
                        self.copy_date_format)))

    def test_authorized_user_pick_mode_bad_input(self):
        another_day = ConferenceDayFactory(conference=self.context.conference)
        show_context = VolunteerContext()
        url = reverse(
            self.view_name,
            args=[show_context.sched_event.pk],
            urlconf='gbe.scheduling.urls')
        data = {
            'copy_mode': 'include_parent',
            'copy_to_day': another_day.pk + 100,
            'pick_mode': "Next",
        }
        login_as(self.privileged_user, self)
        response = self.client.post(url, data=data, follow=True)
        self.assertContains(
            response,
            'Select a valid choice.')

    def test_authorized_user_pick_mode_no_day(self):
        show_context = VolunteerContext()
        url = reverse(
            self.view_name,
            args=[show_context.sched_event.pk],
            urlconf='gbe.scheduling.urls')
        data = {
            'copy_mode': 'include_parent',
            'pick_mode': "Next",
        }
        login_as(self.privileged_user, self)
        response = self.client.post(url, data=data, follow=True)
        self.assertContains(
            response,
            'Must choose a day when copying all events.')

    def test_authorized_user_pick_mode_no_event(self):
        show_context = VolunteerContext()
        url = reverse(
            self.view_name,
            args=[show_context.sched_event.pk],
            urlconf='gbe.scheduling.urls')
        data = {
            'copy_mode': 'copy_children_only',
            'pick_mode': "Next",
        }
        login_as(self.privileged_user, self)
        response = self.client.post(url, data=data, follow=True)
        self.assertContains(
            response,
            'Must choose the target event when copying sub-events.')

    def test_authorized_user_pick_mode_only_children(self):
        show_context = VolunteerContext()
        target_context = ShowContext()
        url = reverse(
            self.view_name,
            args=[show_context.sched_event.pk],
            urlconf='gbe.scheduling.urls')
        data = {
            'copy_mode': 'copy_children_only',
            'target_event': target_context.sched_event.pk,
            'pick_mode': "Next",
        }
        delta = target_context.sched_event.starttime.date(
            ) - show_context.sched_event.starttime.date()
        login_as(self.privileged_user, self)
        response = self.client.post(url, data=data, follow=True)
        self.assertContains(
            response,
            '<input checked="checked" id="id_copy_mode_0" name="copy_mode" ' +
            'type="radio" value="copy_children_only" />')
        self.assertContains(
            response,
            '<option value="%d" selected="selected">' % (
                target_context.sched_event.pk))
        self.assertContains(response, "Choose Sub-Events to be copied")
        self.assertContains(response, "%s - %s" % (
            show_context.opportunity.e_title,
            (show_context.opp_event.start_time + delta).strftime(
                        self.copy_date_format)))

    def test_copy_child_event(self):
        show_context = VolunteerContext()
        target_context = ShowContext()
        url = reverse(
            self.view_name,
            args=[show_context.sched_event.pk],
            urlconf='gbe.scheduling.urls')
        data = {
            'copy_mode': 'copy_children_only',
            'target_event': target_context.sched_event.pk,
            'copied_event': show_context.opp_event.pk,
            'pick_event': "Finish",
        }
        login_as(self.privileged_user, self)
        response = self.client.post(url, data=data, follow=True)
        max_pk = Event.objects.latest('pk').pk
        redirect_url = "%s?%s-day=%d&filter=Filter&new=%s" % (
            reverse('manage_event_list',
                    urlconf='gbe.scheduling.urls',
                    args=[target_context.conference.conference_slug]),
            target_context.conference.conference_slug,
            target_context.days[0].pk,
            str([max_pk]),)
        self.assertRedirects(response, redirect_url)
        assert_alert_exists(
            response,
            'success',
            'Success',
            'Occurrence has been updated.<br>%s, Start Time: %s' % (
                show_context.opportunity.e_title,
                datetime.combine(
                    target_context.days[0].day,
                    show_context.opp_event.starttime.time()).strftime(
                    DATETIME_FORMAT)))

    def test_copy_child_parent_events(self):
        another_day = ConferenceDayFactory()
        show_context = VolunteerContext()
        url = reverse(
            self.view_name,
            args=[show_context.sched_event.pk],
            urlconf='gbe.scheduling.urls')
        data = {
            'copy_mode': 'include_parent',
            'copy_to_day': another_day.pk,
            'copied_event': show_context.opp_event.pk,
            'pick_event': "Finish",
        }
        login_as(self.privileged_user, self)
        max_pk = Event.objects.latest('pk').pk
        response = self.client.post(url, data=data, follow=True)
        new_occurrences = []
        for occurrence in Event.objects.filter(pk__gt=max_pk):
            new_occurrences += [occurrence.pk]
        redirect_url = "%s?%s-day=%d&filter=Filter&new=%s" % (
            reverse('manage_event_list',
                    urlconf='gbe.scheduling.urls',
                    args=[another_day.conference.conference_slug]),
            another_day.conference.conference_slug,
            another_day.pk,
            replace(str(new_occurrences), " ", "%20"))
        self.assertRedirects(response, redirect_url)
        assert_alert_exists(
            response,
            'success',
            'Success',
            'Occurrence has been updated.<br>%s, Start Time: %s' % (
                show_context.opportunity.e_title,
                datetime.combine(
                    another_day.day,
                    show_context.opp_event.starttime.time()).strftime(
                    DATETIME_FORMAT)))
        assert_alert_exists(
            response,
            'success',
            'Success',
            'Occurrence has been updated.<br>%s, Start Time: %s' % (
                show_context.event.e_title,
                datetime.combine(
                    another_day.day,
                    show_context.sched_event.starttime.time()).strftime(
                    DATETIME_FORMAT)))

    def test_copy_child_not_like_parent(self):
        another_day = ConferenceDayFactory()
        show_context = VolunteerContext()
        opportunity, opp_sched = show_context.add_opportunity(
            start_time=show_context.sched_event.starttime + timedelta(1.3))
        url = reverse(
            self.view_name,
            args=[show_context.sched_event.pk],
            urlconf='gbe.scheduling.urls')
        data = {
            'copy_mode': 'include_parent',
            'copy_to_day': another_day.pk,
            'copied_event': opp_sched.pk,
            'pick_event': "Finish",
        }
        login_as(self.privileged_user, self)
        max_pk = Event.objects.latest('pk').pk
        response = self.client.post(url, data=data, follow=True)
        new_occurrences = []
        for occurrence in Event.objects.filter(pk__gt=max_pk):
            new_occurrences += [occurrence.pk]
        redirect_url = "%s?%s-day=%d&filter=Filter&new=%s" % (
            reverse('manage_event_list',
                    urlconf='gbe.scheduling.urls',
                    args=[another_day.conference.conference_slug]),
            another_day.conference.conference_slug,
            another_day.pk,
            replace(str(new_occurrences), " ", "%20"))
        self.assertRedirects(response, redirect_url)
        assert_alert_exists(
            response,
            'success',
            'Success',
            'Occurrence has been updated.<br>%s, Start Time: %s' % (
                opportunity.e_title,
                datetime.combine(
                    another_day.day + timedelta(1),
                    opp_sched.starttime.time()).strftime(
                    DATETIME_FORMAT)))
        new_vol_opp = Event.objects.get(pk=max_pk)
        self.assertEqual(new_vol_opp.max_volunteer, opp_sched.max_volunteer)
        self.assertEqual(new_vol_opp.location, opp_sched.location)

    def test_copy_only_parent_event(self):
        another_day = ConferenceDayFactory()
        show_context = VolunteerContext()
        url = reverse(
            self.view_name,
            args=[show_context.sched_event.pk],
            urlconf='gbe.scheduling.urls')
        data = {
            'copy_mode': 'include_parent',
            'copy_to_day': another_day.pk,
            'pick_event': "Finish",
        }
        login_as(self.privileged_user, self)
        response = self.client.post(url, data=data, follow=True)
        max_pk = Event.objects.latest('pk').pk
        redirect_url = "%s?%s-day=%d&filter=Filter&new=[%sL]" % (
            reverse('manage_event_list',
                    urlconf='gbe.scheduling.urls',
                    args=[another_day.conference.conference_slug]),
            another_day.conference.conference_slug,
            another_day.pk,
            str(max_pk),)
        self.assertRedirects(response, redirect_url)
        assert_alert_exists(
            response,
            'success',
            'Success',
            'Occurrence has been updated.<br>%s, Start Time: %s' % (
                show_context.event.e_title,
                datetime.combine(
                    another_day.day,
                    show_context.sched_event.starttime.time()).strftime(
                    DATETIME_FORMAT)))
        self.assertContains(response, "Occurrence has been updated.<br>", 1)

    def test_copy_bad_second_form(self):
        another_day = ConferenceDayFactory()
        show_context = VolunteerContext()
        url = reverse(self.view_name,
                      args=[show_context.sched_event.pk],
                      urlconf='gbe.scheduling.urls')
        data = {
            'copy_mode': 'include_parent',
            'copy_to_day': another_day.pk,
            'copied_event': "bad",
            'pick_event': "Finish",
        }
        login_as(self.privileged_user, self)
        response = self.client.post(url, data=data, follow=True)
        self.assertContains(response,
                            "bad is not one of the available choices.")
Example #39
0
class TestEditVolunteer(TestCase):
    view_name = 'edit_volunteer'

    def setUp(self):
        self.context = VolunteerContext(event=GenericEventFactory())
        self.context.sched_event.max_volunteer = 7
        self.context.sched_event.save()
        self.context.event.duration = Duration(hours=1, minutes=30)
        self.context.event.save()
        self.room = self.context.room
        self.staff_lead = self.context.set_staff_lead()
        self.extra_day = ConferenceDayFactory(
            conference=self.context.conference,
            day=self.context.conf_day.day + timedelta(days=1))
        self.url = reverse(
            self.view_name,
            args=[self.context.conference.conference_slug,
                  self.context.opp_event.pk],
            urlconf='gbe.scheduling.urls')
        self.client = Client()
        self.privileged_user = ProfileFactory().user_object
        grant_privilege(self.privileged_user, 'Scheduling Mavens')

    def edit_event(self):
        data = {
            'type': 'Volunteer',
            'e_title': "Test Event Wizard",
            'e_description': 'Description',
            'max_volunteer': 3,
            'day': self.extra_day.pk,
            'time': '11:00:00',
            'duration': 2.5,
            'location': self.room.pk,
            'set_event': 'Any value',
        }
        return data

    def test_not_volunteer_redirect(self):
        self.url = reverse(
            self.view_name,
            args=[self.context.conference.conference_slug,
                  self.context.sched_event.pk],
            urlconf='gbe.scheduling.urls')
        grant_privilege(self.privileged_user, 'Volunteer Coordinator')
        login_as(self.privileged_user, self)
        response = self.client.get(self.url, follow=True)
        self.assertRedirects(
            response,
            reverse('edit_event',
                    urlconf='gbe.scheduling.urls',
                    args=[self.context.conference.conference_slug,
                          self.context.sched_event.pk]))

    def test_authorized_user_can_access_event(self):
        login_as(self.privileged_user, self)
        response = self.client.get(self.url)
        self.assertEqual(response.status_code, 200)
        self.assertNotContains(response, "Manage Volunteers")
        self.assertContains(response, "Finish")
        self.assertContains(response, self.context.opportunity.e_title)
        self.assertContains(response, self.context.opportunity.e_description)
        self.assertContains(
            response,
            '<option value="%d" selected="selected">%s</option>' % (
                self.context.conf_day.pk,
                self.context.conf_day.day.strftime(DATE_FORMAT)))

    def test_authorized_user_can_also_get_volunteer_mgmt(self):
        grant_privilege(self.privileged_user, 'Volunteer Coordinator')
        login_as(self.privileged_user, self)
        response = self.client.get(self.url, follow=True)
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, "Volunteer Allocation")
        self.assertContains(response, "Save and Continue")
        self.assertContains(
            response,
            '<option value="" selected="selected">---------</option>')
        self.assertContains(
            response,
            'id="id_alloc_id" name="alloc_id" type="hidden" value="-1" />')

    def test_vol_is_booked(self):
        grant_privilege(self.privileged_user, 'Volunteer Coordinator')
        login_as(self.privileged_user, self)
        response = self.client.get(self.url, follow=True)
        self.assertContains(
            response,
            '"id_alloc_id" name="alloc_id" type="hidden" value="%d" />' % (
                self.context.allocation.pk)
        )
        self.assertContains(
            response,
            '<option value="%d" selected="selected">%s</option>' % (
                self.context.profile.pk,
                self.context.profile.display_name))
        self.assertContains(
            response,
            '<option value="Volunteer" selected="selected">Volunteer</option>',
            3)

    def test_bad_occurrence_id(self):
        login_as(self.privileged_user, self)
        self.url = reverse(
            self.view_name,
            args=[self.context.conference.conference_slug,
                  self.context.sched_event.pk+1000],
            urlconf='gbe.scheduling.urls')
        response = self.client.get(self.url, follow=True)
        self.assertRedirects(
            response,
            reverse('manage_event_list',
                    urlconf='gbe.scheduling.urls',
                    args=[self.context.conference.conference_slug]))
        self.assertContains(
            response,
            "Occurrence id %d not found" % (self.context.sched_event.pk+1000))

    def test_edit_event(self):
        login_as(self.privileged_user, self)
        data = self.edit_event()
        response = self.client.post(
            self.url,
            data=data,
            follow=True)
        self.assertRedirects(
            response,
            "%s?%s-day=%d&filter=Filter&new=[%dL]" % (
                reverse('manage_event_list',
                        urlconf='gbe.scheduling.urls',
                        args=[self.context.conference.conference_slug]),
                self.context.conference.conference_slug,
                self.extra_day.pk,
                self.context.opp_event.pk))
        assert_alert_exists(
            response,
            'success',
            'Success',
            'Occurrence has been updated.<br>%s, Start Time: %s 11:00 AM' % (
                data['e_title'],
                self.extra_day.day.strftime(DATE_FORMAT))
            )
        self.assertContains(
            response,
            '<tr class="bid-table success">\n       ' +
            '<td class="bid-table">%s</td>' % data['e_title'])

    def test_edit_event_and_continue(self):
        grant_privilege(self.privileged_user, 'Volunteer Coordinator')
        login_as(self.privileged_user, self)
        data = self.edit_event()
        data['edit_event'] = "Save and Continue"
        response = self.client.post(
            self.url,
            data=data,
            follow=True)
        self.assertRedirects(
            response,
            "%s?worker_open=True" % self.url)
        assert_alert_exists(
            response,
            'success',
            'Success',
            'Occurrence has been updated.<br>%s, Start Time: %s 11:00 AM' % (
                data['e_title'],
                self.extra_day.day.strftime(DATE_FORMAT))
            )
        self.assertContains(response, data['e_title'])
        self.assertContains(response, data['e_description'])
        self.assertContains(
            response,
            '<option value="%d" selected="selected">%s</option>' % (
                self.extra_day.pk,
                self.extra_day.day.strftime(DATE_FORMAT)))
        self.assertContains(response,
                            'name="max_volunteer" type="number" value="3" />')
        self.assertContains(
            response,
            'name="duration" step="any" type="number" value="2.5" />')

    def test_auth_user_bad_schedule_assign(self):
        login_as(self.privileged_user, self)
        data = self.edit_event()
        data['location'] = ""
        response = self.client.post(
            self.url,
            data=data,
            follow=True)
        self.assertContains(response, "This field is required.")

    def test_post_bad_occurrence(self):
        login_as(self.privileged_user, self)
        self.url = reverse(
            self.view_name,
            args=[self.context.conference.conference_slug,
                  self.context.opp_event.pk+1000],
            urlconf='gbe.scheduling.urls')
        response = self.client.post(self.url, follow=True)
        self.assertRedirects(
            response,
            reverse('manage_event_list',
                    urlconf='gbe.scheduling.urls',
                    args=[self.context.conference.conference_slug]))
        self.assertContains(
            response,
            "Occurrence id %d not found" % (self.context.opp_event.pk+1000))

    def test_good_user_get_volunteer_w_teacher_as_persona(self):
        grant_privilege(self.privileged_user, 'Volunteer Coordinator')
        login_as(self.privileged_user, self)
        staff_context = StaffAreaContext()
        volunteer_sched_event = staff_context.add_volunteer_opp()
        teacher = PersonaFactory()
        teacher, alloc = staff_context.book_volunteer(
            volunteer_sched_event=volunteer_sched_event,
            volunteer=teacher,
            role="Teacher")
        url = reverse(self.view_name,
                      urlconf="gbe.scheduling.urls",
                      args=[staff_context.conference.conference_slug,
                            volunteer_sched_event.pk])
        response = self.client.get(url)

    def test_inactive_user_not_listed(self):
        staff_context = StaffAreaContext()
        volunteer_sched_event = staff_context.add_volunteer_opp()
        inactive_persona = PersonaFactory(
            contact__user_object__is_active=False)
        login_as(self.privileged_user, self)
        url = reverse(self.view_name,
                      urlconf="gbe.scheduling.urls",
                      args=[staff_context.conference.conference_slug,
                            volunteer_sched_event.pk])
        response = self.client.get(url)
        self.assertNotIn(str(inactive_persona), response.content)
        self.assertNotIn(str(inactive_persona.contact), response.content)