def test_no_rehearsal_in_events(self):
        '''no rehearsal data shows up'''
        # horrible setup process. Need to fix
        data = self.set_basic_opportunity()

        rehearsal = GenericEventFactory(
            e_conference=data['context'].conference, type="Rehearsal Slot")

        rehearsal_slot = SchedEventFactory(eventitem=rehearsal,
                                           starttime=datetime(
                                               2016, 2, 6, 13, 0, 0, 0,
                                               pytz.utc),
                                           max_volunteer=10)
        EventLabelFactory(event=rehearsal_slot,
                          text=data['context'].conference.conference_slug)

        volunteer = VolunteerFactory(b_conference=data['context'].conference,
                                     submitted=True)
        url = reverse(self.view_name, args=[volunteer.pk], urlconf="gbe.urls")
        login_as(self.privileged_user, self)
        response = self.client.get(url)

        nt.assert_not_in(str(rehearsal),
                         response.content,
                         msg="Event Title for rehearsal should not show up")

        nt.assert_not_in(date_format(rehearsal_slot.starttime,
                                     "SHORT_DATETIME_FORMAT"),
                         response.content,
                         msg="end time for rehearsal shouldn't show up")
 def test_assign_volunteers_no_profile(self):
     ''' user does not have a profile, permission is denied'''
     volunteer = VolunteerFactory()
     url = reverse(self.view_name, args=[volunteer.pk], urlconf='gbe.urls')
     login_as(UserFactory(), self)
     response = self.client.get(url)
     nt.assert_equal(403, response.status_code)
    def test_review_volunteer_w_conf(self):
        ''' when a specific conf has specific bids, check bid details'''
        volunteer = VolunteerFactory(
            submitted=True)
        interest = VolunteerInterestFactory(
            volunteer=self.volunteer
        )
        volunteer.profile.user_object.email = "*****@*****.**"
        volunteer.profile.user_object.save()
        prefs = ProfilePreferencesFactory(
            profile=volunteer.profile,
            in_hotel="Maybe",
            inform_about=True,
            show_hotel_infobox=True)
        login_as(self.privileged_user, self)
        response = self.client.get(
            self.url,
            {'conf_slug': self.volunteer.b_conference.conference_slug})

        nt.assert_equal(response.status_code, 200)
        nt.assert_true('Bid Information' in response.content)
        nt.assert_true(str(self.volunteer.number_shifts) in response.content)
        nt.assert_true(self.volunteer.background in response.content)
        nt.assert_true(self.volunteer.profile.display_name in response.content)
        nt.assert_true(interest.interest.interest in response.content)
        nt.assert_true(
            self.volunteer.profile.user_object.email in response.content)
        nt.assert_true(self.prefs.in_hotel in response.content)
        nt.assert_true("Needs Review" in response.content)
        nt.assert_true("Review" in response.content)
Exemple #4
0
    def test_post_form_valid_make_new_allocation_volunteer_exists(self):
        context = StaffAreaContext()
        volunteer_opp = context.add_volunteer_opp()
        volunteer = VolunteerFactory(submitted=False,
                                     accepted=2,
                                     b_conference=context.conference)
        VolunteerInterestFactory(
            volunteer=volunteer,
            interest=volunteer_opp.as_subtype.volunteer_type)
        url = reverse(
            self.view_name,
            args=[context.conference.conference_slug, volunteer_opp.pk],
            urlconf="gbe.scheduling.urls")
        data = self.get_create_data()
        data['worker'] = volunteer.profile.pk,

        login_as(self.privileged_profile, self)
        response = self.client.post(url, data=data, follow=True)
        alloc = volunteer_opp.resources_allocated.all().order_by(
            'pk').reverse().first()
        self.assertIsNotNone(alloc)
        self.assert_good_post(response,
                              volunteer_opp,
                              volunteer.profile,
                              alloc,
                              'Do these notes work?',
                              allocations=3)
        assert len(volunteer.profile.volunteering.all().filter(
            b_conference=volunteer_opp.eventitem.get_conference())) == 1
        updated = get_object_or_404(Volunteer, pk=volunteer.pk)
        assert updated.submitted
        assert updated.accepted == 3
Exemple #5
0
 def test_review_volunteer_fetch_by_post(self):
     volunteer = VolunteerFactory()
     url = reverse(self.view_name, args=[0], urlconf='gbe.urls')
     login_as(self.privileged_user, self)
     response = self.client.post(url, data={'volunteer': volunteer.pk})
     self.assertEqual(response.status_code, 200)
     self.assertTrue('Bid Information' in response.content)
     self.assertFalse('Change Bid State:' in response.content)
 def test_deactivate_if_volunteer(self):
     volunteer = VolunteerFactory()
     url = reverse(self.view_name,
                   args=[volunteer.profile.pk],
                   urlconf='gbe.urls')
     login_as(self.privileged_user, self)
     response = self.client.get(url, follow=True)
     self.assert_deactivated(response, volunteer.profile)
 def setUp(self):
     Conference.objects.all().delete()
     self.factory = RequestFactory()
     self.client = Client()
     self.volunteer = VolunteerFactory(submitted=True)
     self.privileged_user = ProfileFactory().user_object
     grant_privilege(self.privileged_user, 'Volunteer Coordinator')
     grant_privilege(self.privileged_user, 'Volunteer Reviewers')
Exemple #8
0
    def test_review_volunteer_clean_how_heard(self):
        profile = ProfileFactory(how_heard=['Word of mouth'])
        volunteer = VolunteerFactory(profile=profile)
        url = reverse(self.view_name, args=[volunteer.pk], urlconf='gbe.urls')

        login_as(self.privileged_user, self)
        response = self.client.get(url)
        self.assertTrue(profile.how_heard[0] in response.content)
        self.assertTrue("Attended Previously" not in response.content)
 def test_edit_volunteer_profile_is_not_coordinator(self):
     user = ProfileFactory().user_object
     volunteer = VolunteerFactory()
     url = reverse('volunteer_edit',
                   urlconf='gbe.urls',
                   args=[volunteer.pk])
     login_as(ProfileFactory(), self)
     response = self.client.get(url)
     self.assertEqual(403, response.status_code)
Exemple #10
0
    def test_review_volunteer_all_well(self):
        volunteer = VolunteerFactory()
        url = reverse(self.view_name, args=[volunteer.pk], urlconf='gbe.urls')

        login_as(self.privileged_user, self)
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
        self.assertTrue('Bid Information' in response.content)
        self.assertFalse('Change Bid State:' in response.content)
 def test_create_second_volunteer_old_conf_all_good(self):
     url = reverse(self.view_name,
                   urlconf='gbe.urls')
     VolunteerFactory(profile=self.profile,
                      b_conference=ConferenceFactory(status='past'))
     login_as(self.profile, self)
     data = self.get_volunteer_form()
     response = self.client.post(url, data=data)
     self.assertEqual(response.status_code, 302)
Exemple #12
0
    def test_review_volunteer_post_invalid(self):
        volunteer = VolunteerFactory()
        url = reverse(self.view_name, args=[volunteer.pk], urlconf='gbe.urls')

        login_as(self.coordinator, self)
        data = self.get_form(volunteer, self.coordinator, invalid=True)
        response = self.client.post(url, data=data)
        self.assertEqual(response.status_code, 200)
        self.assertTrue('Change Bid State:' in response.content)
        self.assertTrue('Bid Information' in response.content)
Exemple #13
0
    def test_view_bid_wrong_profile(self):
        volunteer = VolunteerFactory()
        url = reverse(self.view_name,
                      args=[volunteer.pk],
                      urlconf='gbe.urls')

        login_as(ProfileFactory(), self)
        response = self.client.get(url)
        test_string = 'Submitted proposals cannot be modified'
        nt.assert_equal(response.status_code, 403)
Exemple #14
0
    def test_review_volunteer_clean_state(self):
        volunteer = VolunteerFactory()
        url = reverse(self.view_name, args=[volunteer.pk], urlconf='gbe.urls')

        login_as(self.privileged_user, self)
        response = self.client.get(url)
        state_dict = dict(states_options)
        self.assertTrue(
            state_dict[volunteer.profile.state] in response.content)
        self.assertTrue(state_dict["CA"] not in response.content)
Exemple #15
0
    def test_review_volunteer_with_interest(self):
        volunteer = VolunteerFactory()
        interest = VolunteerInterestFactory(
            volunteer=volunteer,
            interest=AvailableInterestFactory(help_text="help!"))
        url = reverse(self.view_name, args=[volunteer.pk], urlconf='gbe.urls')

        login_as(self.privileged_user, self)
        response = self.client.get(url)
        assert_interest_view(response, interest)
Exemple #16
0
    def test_volunteers_to_review(self):
        staff_profile = ProfileFactory(user_object__is_staff=True)
        grant_privilege(staff_profile, "Volunteer Reviewers")
        login_as(staff_profile, self)
        volunteer = VolunteerFactory(submitted=True,
                                     b_conference=self.current_conf)

        url = reverse('home', urlconf='gbe.urls')
        response = self.client.get(url)
        nt.assert_true(volunteer.b_title in response.content)
Exemple #17
0
    def test_view_bid_all_well(self):
        volunteer = VolunteerFactory()
        url = reverse(self.view_name,
                      args=[volunteer.pk],
                      urlconf='gbe.urls')

        login_as(volunteer.profile, self)
        response = self.client.get(url)
        test_string = 'Submitted proposals cannot be modified'
        nt.assert_equal(response.status_code, 200)
        nt.assert_true(test_string in response.content)
Exemple #18
0
 def test_review_volunteer_past_conference(self):
     conference = ConferenceFactory(status='completed')
     volunteer = VolunteerFactory(b_conference=conference)
     url = reverse(self.view_name, args=[volunteer.pk], urlconf="gbe.urls")
     login_as(self.privileged_user, self)
     response = self.client.get(url, follow=True)
     self.assertRedirects(
         response,
         reverse('volunteer_view', urlconf='gbe.urls', args=[volunteer.pk]))
     self.assertTrue('Bid Information' in response.content)
     self.assertFalse('Review Information' in response.content)
Exemple #19
0
    def test_view_bid_with_interest(self):
        volunteer = VolunteerFactory()
        interest = VolunteerInterestFactory(
            volunteer=volunteer)
        url = reverse(self.view_name,
                      args=[volunteer.pk],
                      urlconf='gbe.urls')

        login_as(volunteer.profile, self)
        response = self.client.get(url)
        assert_interest_view(response, interest)
Exemple #20
0
    def __init__(self,
                 profile=None,
                 bid=None,
                 event=None,
                 opportunity=None,
                 role=None):
        if not event:
            self.window = VolunteerWindowFactory()
            self.conference = self.window.day.conference
        else:
            self.conference = event.e_conference
            if not VolunteerWindow.objects.filter(
                    day__conference=self.conference).exists():
                self.window = VolunteerWindowFactory(
                    day__conference=self.conference)
            else:
                self.window = VolunteerWindow.objects.all().first()
        self.conf_day = self.window.day
        self.profile = profile or ProfileFactory()
        if not hasattr(self.profile, 'preferences'):
            ProfilePreferencesFactory(profile=self.profile)

        if bid is False:
            self.bid = None
        elif bid:
            self.bid = bid
            self.profile = self.bid.profile
        else:
            self.bid = VolunteerFactory(
                b_conference=self.conference,
                profile=self.profile)
        self.interest = VolunteerInterestFactory(
            volunteer=self.bid)
        self.event = event or ShowFactory(
            e_conference=self.conference)
        self.role = role or "Volunteer"
        self.room = RoomFactory()
        self.sched_event = SchedEventFactory(
            eventitem=self.event.eventitem_ptr,
            starttime=datetime.combine(self.window.day.day,
                                       self.window.start))
        ResourceAllocationFactory(
            event=self.sched_event,
            resource=LocationFactory(_item=self.room))
        EventLabelFactory(event=self.sched_event,
                          text="General")
        EventLabelFactory(event=self.sched_event,
                          text=self.conference.conference_slug)
        self.worker = WorkerFactory(_item=self.profile.workeritem,
                                    role=self.role)
        self.opportunity, self.opp_event = self.add_opportunity(opportunity)
        self.allocation = ResourceAllocationFactory(resource=self.worker,
                                                    event=self.opp_event)
Exemple #21
0
    def test_review_volunteer_get_conference(self):
        volunteer = VolunteerFactory()
        url = reverse(self.view_name, args=[volunteer.pk], urlconf='gbe.urls')

        login_as(self.privileged_user, self)
        response = self.client.get(
            url, data={'conf_slug': volunteer.b_conference.id})
        self.assertEqual(response.status_code, 200)
        self.assertTrue('Bid Information' in response.content)
        self.assertTrue('Review Information' in response.content)
        self.assertContains(
            response, '<h3> %s </h3>' % volunteer.b_conference.conference_name)
Exemple #22
0
    def test_review_volunteer_post_valid(self):
        volunteer = VolunteerFactory()
        url = reverse(self.view_name, args=[volunteer.pk], urlconf='gbe.urls')

        login_as(self.coordinator, self)
        data = self.get_form(volunteer, self.coordinator)
        response = self.client.post(url, data=data, follow=True)
        self.assertEqual(response.status_code, 200)
        html_tag = '<h2 class="review-title">%s</h2>'
        title_string = ("Bid Information for %s" %
                        volunteer.b_conference.conference_name)
        html_title = html_tag % title_string
        assert html_title in response.content
    def set_basic_opportunity(self):
        context = StaffAreaContext()

        current_sched = context.add_volunteer_opp()
        current_sched.starttime = datetime(2016, 2, 5, 12, 0, 0, 0, pytz.utc)
        current_sched.max_volunteer = 10
        current_sched.save()

        current_window = VolunteerWindowFactory(
            day__conference=context.conference)

        volunteer = VolunteerFactory(b_conference=context.conference,
                                     submitted=True)
        volunteer.available_windows.add(current_window)
        volunteer.save()

        return {
            'context': context,
            'area': context.area,
            'current_sched': current_sched,
            'current_window': current_window,
            'volunteer': volunteer
        }
    def set_basic_opportunity(self):
        context = StaffAreaContext()

        current_sched = context.add_volunteer_opp()
        current_sched.starttime = datetime(2016, 2, 5, 12, 0, 0, 0, pytz.utc)
        current_sched.max_volunteer = 10
        current_sched.save()

        current_window = VolunteerWindowFactory(
            day__conference=context.conference)

        volunteer = VolunteerFactory(
            b_conference=context.conference,
            submitted=True)
        volunteer.available_windows.add(current_window)
        volunteer.save()

        return {
            'context': context,
            'area': context.area,
            'current_sched': current_sched,
            'current_window': current_window,
            'volunteer': volunteer
        }
    def setUp(self):
        self.client = Client()
        self.performer = PersonaFactory()
        self.privileged_profile = ProfileFactory()
        self.privileged_user = self.privileged_profile.user_object
        grant_privilege(self.privileged_user, 'Volunteer Reviewers')

        self.volunteer = VolunteerFactory(
            submitted=True,
            profile__user_object__email="*****@*****.**")
        self.prefs = ProfilePreferencesFactory(
            profile=self.volunteer.profile,
            in_hotel="Maybe",
            inform_about=True,
            show_hotel_infobox=True)
        self.url = reverse(self.view_name, urlconf='gbe.urls')
 def test_create_second_volunteer_gets_redirect(self):
     url = reverse(self.view_name,
                   urlconf='gbe.urls')
     volunteer = VolunteerFactory(
         profile=self.profile,
         b_conference=self.conference)
     login_as(self.profile, self)
     data = self.get_volunteer_form()
     response = self.client.post(url, data=data, follow=True)
     self.assertRedirects(
         response,
         reverse(
             'volunteer_edit',
             urlconf='gbe.urls',
             args=[volunteer.id]))
     assert_alert_exists(
         response, 'success', 'Success', existing_volunteer_msg)
 def test_review_volunteer_inactive_user(self):
     '''default conference selected, make sure it returns the right page'''
     inactive = VolunteerFactory(
         submitted=True,
         profile__user_object__email="*****@*****.**",
         profile__user_object__is_active=False)
     interest = VolunteerInterestFactory(
         volunteer=inactive
     )
     ProfilePreferencesFactory(
         profile=inactive.profile,
         in_hotel="Maybe",
         inform_about=True,
         show_hotel_infobox=True)
     login_as(self.privileged_user, self)
     response = self.client.get(
         self.url,
         {'conf_slug': inactive.b_conference.conference_slug})
     self.assertIn('bid-table danger', response.content)
Exemple #28
0
    def setUp(self):
        self.client = Client()
        # Conference Setup
        self.factory = RequestFactory()
        self.current_conf = ConferenceFactory(accepting_bids=True,
                                              status='upcoming')
        self.previous_conf = ConferenceFactory(accepting_bids=False,
                                               status='completed')

        # User/Human setup
        self.profile = ProfileFactory()
        self.performer = PersonaFactory(performer_profile=self.profile,
                                        contact=self.profile)
        # Bid types previous and current
        self.current_act = ActFactory(performer=self.performer,
                                      submitted=True,
                                      b_conference=self.current_conf)
        self.previous_act = ActFactory(performer=self.performer,
                                       submitted=True,
                                       b_conference=self.previous_conf)
        self.current_class = ClassFactory(teacher=self.performer,
                                          submitted=True,
                                          accepted=3,
                                          b_conference=self.current_conf,
                                          e_conference=self.current_conf)
        self.previous_class = ClassFactory(teacher=self.performer,
                                           submitted=True,
                                           accepted=3,
                                           b_conference=self.previous_conf,
                                           e_conference=self.previous_conf)

        self.current_vendor = VendorFactory(profile=self.profile,
                                            submitted=True,
                                            b_conference=self.current_conf)
        self.previous_vendor = VendorFactory(profile=self.profile,
                                             submitted=True,
                                             b_conference=self.previous_conf)

        self.current_costume = CostumeFactory(profile=self.profile,
                                              submitted=True,
                                              b_conference=self.current_conf)
        self.previous_costume = CostumeFactory(profile=self.profile,
                                               submitted=True,
                                               b_conference=self.previous_conf)
        self.current_volunteer = VolunteerFactory(
            profile=self.profile,
            submitted=True,
            b_conference=self.current_conf)
        self.previous_volunteer = VolunteerFactory(
            profile=self.profile,
            submitted=True,
            b_conference=self.previous_conf)

        # Event assignments, previous and current
        current_opportunity = GenericEventFactory(
            e_conference=self.current_conf, type='Volunteer')
        previous_opportunity = GenericEventFactory(
            e_conference=self.previous_conf)

        self.current_sched = SchedEventFactory(eventitem=current_opportunity,
                                               starttime=datetime(
                                                   2016, 2, 5, 12, 30, 0, 0,
                                                   pytz.utc),
                                               max_volunteer=10)
        self.previous_sched = SchedEventFactory(eventitem=previous_opportunity,
                                                starttime=datetime(
                                                    2015, 2, 25, 12, 30, 0, 0,
                                                    pytz.utc),
                                                max_volunteer=10)

        self.current_class_sched = SchedEventFactory(
            eventitem=self.current_class,
            starttime=datetime(2016, 2, 5, 2, 30, 0, 0, pytz.utc),
            max_volunteer=10)
        self.previous_class_sched = SchedEventFactory(
            eventitem=self.previous_class,
            starttime=datetime(2015, 2, 25, 2, 30, 0, 0, pytz.utc),
            max_volunteer=10)

        worker = WorkerFactory(_item=self.profile, role='Volunteer')
        for schedule_item in [self.current_sched, self.previous_sched]:
            volunteer_assignment = ResourceAllocationFactory(
                event=schedule_item, resource=worker)
            LabelFactory(text="label %d" % volunteer_assignment.pk,
                         allocation=volunteer_assignment)

        persona_worker = WorkerFactory(_item=self.performer, role='Teacher')
        for schedule_item in [
                self.current_class_sched, self.previous_class_sched
        ]:
            volunteer_assignment = ResourceAllocationFactory(
                event=schedule_item, resource=worker)
    def test_assign_volunteer_show_unavailable_event(self):
        '''test how event shows when volunteer not available'''
        data = self.set_basic_opportunity()

        unavail_sched = SchedEventFactory(
            eventitem=data['current_sched'].eventitem,
            starttime=datetime(2016, 2, 7, 12, 0, 0, 0, pytz.utc),
            max_volunteer=10)
        EventLabelFactory(event=unavail_sched,
                          text=data['context'].conference.conference_slug)
        EventLabelFactory(event=unavail_sched, text="Volunteer")

        unavail_window = VolunteerWindowFactory(
            day__conference=data['context'].conference,
            day__day=date(2016, 2, 7),
            start=time(11),
            end=time(15))

        volunteer = VolunteerFactory(b_conference=data['context'].conference,
                                     submitted=True)
        VolunteerInterestFactory(volunteer=data['volunteer'])
        data['volunteer'].unavailable_windows.add(unavail_window)
        data['volunteer'].save()
        url = reverse(self.view_name,
                      args=[data['volunteer'].pk],
                      urlconf="gbe.urls")

        login_as(self.privileged_user, self)
        response = self.client.get(url)

        nt.assert_equal(response.status_code, 200)
        nt.assert_true('Assign Volunteer to Opportunities' in response.content)

        # event names
        nt.assert_equal(
            response.content.count(str(data['current_sched'].eventitem)),
            2,
            msg="There should be 2 schedule items for current_sched.eventitem")

        nt.assert_in(date_format(unavail_sched.start_time,
                                 "SHORT_DATETIME_FORMAT"),
                     response.content,
                     msg="start time for unavail_sched didn't show up")
        nt.assert_in(date_format(unavail_sched.end_time, "TIME_FORMAT"),
                     response.content,
                     msg="end time for unavail_sched didn't show up")

        nt.assert_is_not_none(
            re.search(
                date_format(unavail_sched.start_time, "SHORT_DATETIME_FORMAT"),
                response.content),
            msg="unavail_window shows with unavail_sched is not found")

        nt.assert_equal(
            response.content.count('''<td class="bid-table">10</td>'''),
            2,
            msg="unavail_sched and current_sched should have 10 volunteers")

        nt.assert_true(
            "Not Free<br>" in response.content,
            msg="The volunteer should be not free for unavail_sched event")
        nt.assert_is_not_none(
            re.search('''<td class="bid-table">\s+N\s+</td>''',
                      response.content),
            msg="The unavailable event should be not yet full")