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