Ejemplo n.º 1
0
 def test_authorized_user_get_w_child_events_special(self):
     original_event = GenericEventFactory(type='Special')
     target_event = GenericEventFactory(type='Special')
     target_context = VolunteerContext(event=target_event)
     original_context = VolunteerContext(event=original_event)
     original_context.add_opportunity()
     url = reverse(
         self.view_name,
         args=[original_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.event.e_title,
         target_context.sched_event.start_time)
     assert_option_state(
         response,
         target_context.room.pk,
         target_context.room.name)
     self.assertContains(response, target_event.e_title)
Ejemplo n.º 2
0
 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")
Ejemplo n.º 3
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)
Ejemplo n.º 4
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))
     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)
Ejemplo n.º 5
0
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)
Ejemplo n.º 6
0
class TestCopyOccurrence(TestGBE):
    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(GBE_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(GBE_DATETIME_FORMAT)))

    def get_solo_data(self):
        another_day = ConferenceDayFactory(
            conference=self.context.conference,
            day=self.context.conf_day.day + timedelta(days=1))
        other_room = RoomFactory()
        other_room.conferences.add(another_day.conference)
        data = {
            'copy_to_day': another_day.pk,
            'room': other_room.pk,
            'copy_mode': ['choose_day'],
            'pick_mode': "Next",
        }
        return data, another_day, other_room

    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)
        staff = StaffAreaContext()
        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(GBE_DATE_FORMAT))
        self.assertContains(response, copy_mode_solo_choices[0][1])
        self.assertContains(response, staff.area.title)
        self.assertContains(response, self.context.event.e_title)

    def test_authorized_user_get_set_staff_area(self):
        staff = StaffAreaContext()
        vol_sched_event = staff.add_volunteer_opp()
        login_as(self.privileged_user, self)
        self.url = reverse(
            self.view_name,
            args=[vol_sched_event.pk],
            urlconf='gbe.scheduling.urls')
        response = self.client.get(self.url)
        self.assertContains(
            response,
            '<option value="%d" selected>%s</option>' % (
                staff.area.pk,
                staff.area.title),
            html=True)

    def test_authorized_user_get_right_rooms(self):
        not_this_room = RoomFactory()
        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(GBE_DATE_FORMAT))
        self.assertNotContains(response, not_this_room.name)
        assert_option_state(
            response,
            self.context.room.pk,
            self.context.room.name,
            True)

    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)
        assert_option_state(
            response,
            target_event.room.pk,
            target_event.room.name)

    def test_authorized_user_get_w_child_events_special(self):
        original_event = GenericEventFactory(type='Special')
        target_event = GenericEventFactory(type='Special')
        target_context = VolunteerContext(event=target_event)
        original_context = VolunteerContext(event=original_event)
        original_context.add_opportunity()
        url = reverse(
            self.view_name,
            args=[original_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.event.e_title,
            target_context.sched_event.start_time)
        assert_option_state(
            response,
            target_context.room.pk,
            target_context.room.name)
        self.assertContains(response, target_event.e_title)

    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, follow=True)
        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)
        #  copying ONLY volunteer events is OK, but copying the class is not
        self.assertEqual(403, response.status_code)

    def test_copy_single_event(self):
        login_as(self.privileged_user, self)
        self.url = reverse(
            self.view_name,
            args=[self.context.opp_event.pk],
            urlconf='gbe.scheduling.urls')
        data, another_day, other_room = self.get_solo_data()
        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)
        self.assertContains(response, other_room.name)
        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(
                    GBE_DATETIME_FORMAT)))

    def test_copy_single_event_date_wins(self):
        login_as(self.privileged_user, self)
        self.url = reverse(
            self.view_name,
            args=[self.context.opp_event.pk],
            urlconf='gbe.scheduling.urls')
        data, another_day, other_room = self.get_solo_data()
        data['copy_mode'] = ['copy_to_parent', 'choose_day']
        data['target_event'] = self.context.sched_event.pk
        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(
                    GBE_DATETIME_FORMAT)))

    def test_copy_single_set_area(self):
        data, another_day, other_room = self.get_solo_data()
        staff = StaffAreaContext(conference=another_day.conference)
        data['copy_mode'] = ['copy_to_area', 'choose_day']
        data['area'] = staff.area.pk
        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)
        self.assertContains(response, other_room.name)
        self.assertContains(response, reverse(
            'edit_staff',
            urlconf='gbe.scheduling.urls',
            args=[staff.area.pk]))

    def test_copy_single_set_parent(self):
        data = {
            'target_event': self.context.sched_event.pk,
            'room': self.context.room.pk,
            'copy_mode': ['copy_to_parent'],
            '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=[self.context.conference.conference_slug]),
            self.context.conference.conference_slug,
            self.context.conf_day.pk,
            str([max_pk]),)
        self.assertRedirects(response, redirect_url)
        self.assertContains(response, self.context.room.name, 3)
        self.assertContains(response, self.context.event.e_title, 3)

    def test_copy_single_no_delta(self):
        data, another_day, other_room = self.get_solo_data()
        staff = StaffAreaContext(conference=another_day.conference)
        data['copy_mode'] = ['copy_to_area']
        data['area'] = staff.area.pk
        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)
        self.assertContains(response, copy_errors['no_delta'])

    def test_copy_single_no_area(self):
        data = {
            'target_event': self.context.sched_event.pk,
            'room': self.context.room.pk,
            'copy_mode': ['copy_to_parent', 'copy_to_area'],
            '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)
        self.assertContains(response, copy_errors['no_area'])

    def test_copy_single_no_parent(self):
        data = {
            'room': self.context.room.pk,
            'copy_mode': ['copy_to_parent'],
            '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)
        self.assertContains(response, copy_errors['no_target'])

    def test_copy_single_no_date(self):
        data = {
            'room': self.context.room.pk,
            'copy_mode': ['choose_day'],
            '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)
        self.assertContains(response, copy_errors['no_day'])

    def test_copy_single_no_mode(self):
        data = {
            'room': self.context.room.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)
        self.assertContains(response, copy_solo_mode_errors['required'])

    def test_copy_single_event_room_conf_mismatch(self):
        another_day = ConferenceDayFactory(
            day=self.context.conf_day.day + timedelta(days=1))
        data = {
            'copy_to_day': another_day.pk,
            'room': self.context.room.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)
        self.assertContains(response, copy_errors['room_conf_mismatch'])

    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,
            'room': self.context.room.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 type="radio" name="copy_mode" value="include_parent" ' +
            'id="id_copy_mode_1" required checked />',
            html=True)
        self.assertContains(
            response,
            '<input type="radio" name="copy_mode" value="include_parent" ' +
            'id="id_copy_mode_1" required checked />',
            html=True)
        self.assertContains(
            response,
            '<option value="%d" selected>' % another_day.pk)
        self.assert_hidden_value(
            response,
            "id_room",
            "room",
            self.context.room.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,
            'room': self.context.room.pk,
            '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',
            'room': self.context.room.pk,
            'pick_mode': "Next",
        }
        login_as(self.privileged_user, self)
        response = self.client.post(url, data=data, follow=True)
        self.assertContains(
            response,
            copy_errors['no_day'])

    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',
            'room': self.context.room.pk,
            'pick_mode': "Next",
        }
        login_as(self.privileged_user, self)
        response = self.client.post(url, data=data, follow=True)
        self.assertContains(
            response,
            copy_errors['no_target'])

    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)))

    def test_authorized_user_pick_mode_parent_room_mismatch(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': self.context.room.pk,
            'pick_mode': "Next",
        }
        login_as(self.privileged_user, self)
        response = self.client.post(url, data=data, follow=True)
        self.assertContains(response, copy_errors['room_target_mismatch'])

    def test_copy_child_event_preserve_room(self):
        show_context = VolunteerContext()
        target_context = ShowContext(room=show_context.room)
        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,
            '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=[target_context.conference.conference_slug]),
            target_context.conference.conference_slug,
            target_context.days[0].pk,
            str([max_pk]),)
        self.assertRedirects(response, redirect_url)
        self.assertContains(response, show_context.room.name)
        self.assertNotContains(response, self.context.room.name)
        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(
                    GBE_DATETIME_FORMAT)))

    def test_copy_child_change_room(self):
        show_context = VolunteerContext()
        target_context = ShowContext()
        show_context.conference.status_code = 'completed'
        show_context.conference.save()
        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,
            'room': target_context.room.pk,
            'pick_event': "Finish",
        }
        login_as(self.privileged_user, self)
        response = self.client.post(url, data=data, follow=True)
        self.assertContains(response, target_context.room.name, 2)
        self.assertNotContains(response, show_context.room.name)

    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,
            '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' % (
                show_context.opportunity.e_title,
                datetime.combine(
                    another_day.day,
                    show_context.opp_event.starttime.time()).strftime(
                    GBE_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(
                    GBE_DATETIME_FORMAT)))
        self.assertNotContains(response, "approval_needed")

    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_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_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]))

    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",
            'room': self.context.room.pk,
            '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.")

    def test_copy_class_not_supported(self):
        another_day = ConferenceDayFactory()
        target_context = ClassContext()
        url = reverse(self.view_name,
                      args=[target_context.sched_event.pk],
                      urlconf='gbe.scheduling.urls')
        data = {
            'copy_mode': 'include_parent',
            'copy_to_day': another_day.pk,
            'pick_mode': "Next",
        }
        login_as(self.privileged_user, self)
        response = self.client.post(url, data=data, follow=True)
        self.assertEqual(403, response.status_code)
Ejemplo n.º 7
0
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.")
Ejemplo n.º 8
0
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)