Ejemplo n.º 1
0
class TestSummerAct(TestCase):
    '''Tests for create_act view'''
    create_name = 'summeract_create'
    edit_name = 'summeract_edit'

    def setUp(self):
        self.url = reverse(self.create_name, urlconf='gbe.urls')
        Conference.objects.all().delete()
        self.client = Client()
        self.performer = PersonaFactory()
        self.current_conference = ConferenceFactory(accepting_bids=True,
                                                    act_style='summer')
        UserMessage.objects.all().delete()

    def get_act_form(self, submit=False, valid=True):

        form_dict = {
            'theact-shows_preferences': [4],
            'theact-b_title': 'An act',
            'theact-track_title': 'a track',
            'theact-track_artist': 'an artist',
            'theact-b_description': 'a description',
            'theact-performer': self.performer.resourceitem_id,
            'theact-act_duration': '1:00',
            'theact-b_conference': self.current_conference.pk,
            'theact-is_summer': True,
        }
        if not valid:
            form_dict['theact-shows_preferences'] = [2]
        if not submit:
            form_dict['draft'] = True
        else:
            form_dict['submit'] = True
        return form_dict

    def post_paid_act_submission(self, act_form=None):
        if not act_form:
            act_form = self.get_act_form(submit=True)
        url = reverse(self.create_name, urlconf='gbe.urls')
        login_as(self.performer.performer_profile, self)
        make_act_app_purchase(self.current_conference,
                              self.performer.performer_profile.user_object)
        response = self.client.post(url, data=act_form, follow=True)
        return response, act_form

    def post_edit_paid_act_draft(self):
        act = ActFactory(b_conference=self.current_conference)
        url = reverse(self.edit_name, args=[act.pk], urlconf="gbe.urls")
        login_as(act.performer.contact, self)
        data = self.get_act_form()
        data['theact-performer'] = act.performer.pk
        response = self.client.post(url, data, follow=True)
        return response

    def test_bid_act_get_with_persona(self):
        url = reverse(self.create_name, urlconf='gbe.urls')
        login_as(self.performer.performer_profile, self)
        response = self.client.get(url)
        expected_string = 'Please also consider this act for GBE12'
        self.assertContains(response, expected_string)
        self.assertEqual(response.status_code, 200)

    def test_act_bid_post_form_not_valid(self):
        login_as(self.performer.performer_profile, self)
        url = reverse(self.create_name, urlconf='gbe.urls')
        data = self.get_act_form(submit=True, valid=False)
        response = self.client.post(url, data=data)
        self.assertEqual(response.status_code, 200)
        self.assertContains(
            response,
            'Select a valid choice. 2 is not one of the available choices.')

    def test_act_bid_get_with_redirect(self):
        url = reverse("act_create", urlconf='gbe.urls')
        login_as(self.performer.performer_profile, self)
        response = self.client.get(url)
        self.assertRedirects(response,
                             reverse(self.create_name, urlconf="gbe.urls"))

    def test_act_bid_get_with_redirect_other_way(self):
        url = reverse(self.create_name, urlconf='gbe.urls')
        self.current_conference.act_style = "normal"
        self.current_conference.save()
        login_as(self.performer.performer_profile, self)
        response = self.client.get(url)
        self.assertRedirects(response, reverse("act_create",
                                               urlconf="gbe.urls"))

    def test_act_submit_paid_act(self):
        response, data = self.post_paid_act_submission()
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, "View</a> act")
        self.assertContains(response, data['theact-b_title'])

    def test_edit_bid_not_post(self):
        '''edit_bid, not post, should take us to edit process'''
        act = ActFactory(b_conference=self.current_conference)
        url = reverse(self.edit_name, args=[act.pk], urlconf="gbe.urls")

        login_as(act.performer.contact, self)
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
        self.assertContains(
            response,
            'Thanks for submitting an act for consideration at the Summer')

    def test_edit_bid_w_redirect(self):
        '''edit_bid, not post, should take us to edit process'''
        act = ActFactory(b_conference=self.current_conference)
        url = reverse("act_edit", args=[act.pk], urlconf="gbe.urls")

        login_as(act.performer.contact, self)
        response = self.client.get(url)
        self.assertRedirects(
            response, reverse(self.edit_name,
                              args=[act.pk],
                              urlconf="gbe.urls"))

    def test_edit_bid_w_redirect_other_way(self):
        '''edit_bid, not post, should take us to edit process'''
        act = ActFactory()
        url = reverse(self.edit_name, args=[act.pk], urlconf="gbe.urls")

        login_as(act.performer.contact, self)
        response = self.client.get(url)
        self.assertRedirects(
            response, reverse("act_edit", args=[act.pk], urlconf="gbe.urls"))

    def test_edit_act_draft_make_message(self):
        response = self.post_edit_paid_act_draft()
        self.assertEqual(200, response.status_code)
        assert_alert_exists(response, 'success', 'Success',
                            default_act_draft_msg)
Ejemplo n.º 2
0
class TestCreateVolunteer(TestCase):
    '''Tests for create_volunteer view'''
    view_name = 'volunteer_create'

    def setUp(self):
        self.factory = RequestFactory()
        self.client = Client()
        self.profile = ProfileFactory()
        Conference.objects.all().delete()
        UserMessage.objects.all().delete()
        AvailableInterest.objects.all().delete()
        self.conference = ConferenceFactory(accepting_bids=True)
        days = ConferenceDayFactory.create_batch(3, conference=self.conference)
        [VolunteerWindowFactory(day=day) for day in days]
        self.interest = AvailableInterestFactory()

    def get_volunteer_form(self, submit=False, invalid=False):
        form = {'profile': 1,
                'number_shifts': 2,
                'available_windows': self.conference.windows().values_list(
                    'pk', flat=True)[0:2],
                'unavailable_windows': self.conference.windows().values_list(
                    'pk', flat=True)[2],
                '%d-rank' % self.interest.pk: 4,
                '%d-interest' % self.interest.pk: self.interest.pk,
                'b_title': 'title',
                'background': 'background',
                }
        if submit:
            form['submit'] = True
        if invalid:
            del(form['number_shifts'])
        return form

    def post_volunteer_submission(self, data=None):
        if not data:
            data = self.get_volunteer_form(submit=True)
        url = reverse(self.view_name,
                      urlconf='gbe.urls')
        login_as(self.profile, self)
        num_volunteers_before = Volunteer.objects.count()
        response = self.client.post(url, data=data, follow=True)
        return response, num_volunteers_before

    def test_create_volunteer_no_login(self):
        url = reverse(self.view_name,
                      urlconf='gbe.urls')
        response = self.client.get(url, follow=True)
        self.assertRedirects(
            response,
            "%s?next=%s" % (
                reverse('register', urlconf='gbe.urls'),
                url))

    def test_create_volunteer_bad_profile(self):
        url = reverse(self.view_name,
                      urlconf='gbe.urls')
        cptn_tinypants = ProfileFactory(display_name="", phone="")
        ProfilePreferencesFactory(profile=cptn_tinypants)
        login_as(cptn_tinypants.user_object, self)
        response = self.client.get(url, follow=True)
        self.assertRedirects(
            response,
            "%s?next=%s" % (
                reverse('profile_update', urlconf='gbe.urls'),
                url))
        assert_alert_exists(
            response, 'warning', 'Warning', no_profile_msg)

    def test_create_volunteer_post_valid_form(self):
        url = reverse(self.view_name,
                      urlconf='gbe.urls')
        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_create_volunteer_post_form_invalid(self):
        url = reverse(self.view_name,
                      urlconf='gbe.urls')
        login_as(self.profile, self)
        data = self.get_volunteer_form(invalid=True)
        response = self.client.post(url, data=data)
        self.assertEqual(response.status_code, 200)

    def test_create_volunteer_no_post(self):
        url = reverse(self.view_name,
                      urlconf='gbe.urls')
        login_as(self.profile, self)
        response = self.client.post(url)
        self.assertEqual(response.status_code, 200)

    def test_create_volunteer_post_with_submit_is_true(self):
        response, num_volunteers_before = self.post_volunteer_submission()
        self.assertEqual(response.status_code, 200)
        self.assertIn('Profile View', response.content)
        self.assertEqual(num_volunteers_before + 1, Volunteer.objects.count())

    def test_create_volunteer_check_interest(self):
        response, num_volunteers_before = self.post_volunteer_submission()
        vol_interest = VolunteerInterest.objects.get(interest=self.interest)
        self.assertEqual(vol_interest.volunteer.profile, self.profile)

    def test_create_volunteer_with_get_request(self):
        url = reverse(self.view_name,
                      urlconf='gbe.urls')
        login_as(self.profile, self)
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
        self.assertIn('Volunteer', response.content)
        assert_rank_choice_exists(response, self.interest)
        assert_hidden_value(
            response,
            "id_b_title",
            "b_title",
            'volunteer bid: %s' % self.profile.display_name,
            128)

    def test_volunteer_submit_make_message(self):
        response, data = self.post_volunteer_submission()
        self.assertEqual(response.status_code, 200)
        assert_alert_exists(
            response, 'success', 'Success', default_volunteer_submit_msg)

    def test_volunteer_submit_has_message(self):
        msg = UserMessageFactory(
            view='MakeVolunteerView',
            code='SUBMIT_SUCCESS')
        response, data = self.post_volunteer_submission()
        self.assertEqual(response.status_code, 200)
        assert_alert_exists(
            response, 'success', 'Success', msg.description)

    def test_no_biddable_conference(self):
        self.conference.accepting_bids = False
        self.conference.save()
        url = reverse(self.view_name,
                      urlconf='gbe.urls')
        login_as(self.profile, self)
        response = self.client.get(url, follow=True)
        self.assertRedirects(
            response,
            reverse('home', urlconf='gbe.urls'))
        assert_alert_exists(
            response, 'danger', 'Error', default_volunteer_no_bid_msg)

    def test_no_window_for_conference(self):
        Conference.objects.all().delete()
        ConferenceFactory(accepting_bids=True)
        url = reverse(self.view_name,
                      urlconf='gbe.urls')
        login_as(self.profile, self)
        response = self.client.get(url, follow=True)
        self.assertRedirects(
            response,
            reverse('home', urlconf='gbe.urls'))
        assert_alert_exists(
            response, 'danger', 'Error', default_volunteer_no_bid_msg)

    def test_no_interests(self):
        AvailableInterest.objects.all().delete()
        url = reverse(self.view_name,
                      urlconf='gbe.urls')
        login_as(self.profile, self)
        response = self.client.get(url, follow=True)
        self.assertRedirects(
            response,
            reverse('home', urlconf='gbe.urls'))
        assert_alert_exists(
            response, 'danger', 'Error', default_volunteer_no_bid_msg)

    def test_no_interests_has_message(self):
        msg = UserMessageFactory(
            view='MakeVolunteerView',
            code='NO_BIDDING_ALLOWED')
        AvailableInterest.objects.all().delete()
        url = reverse(self.view_name,
                      urlconf='gbe.urls')
        login_as(self.profile, self)
        response = self.client.get(url, follow=True)
        self.assertRedirects(
            response,
            reverse('home', urlconf='gbe.urls'))
        assert_alert_exists(
            response, 'danger', 'Error', msg.description)

    def test_not_interested_at_all(self):
        data = self.get_volunteer_form(submit=True)
        data['%d-rank' % self.interest.pk] = 1
        response, data = self.post_volunteer_submission(data)
        self.assertEqual(response.status_code, 200)
        assert_alert_exists(
            response, 'danger', 'Error', default_volunteer_no_interest_msg)

    def test_not_interested_at_all_make_message(self):
        data = self.get_volunteer_form(submit=True)
        data['%d-rank' % self.interest.pk] = 1
        msg = UserMessageFactory(
            view='MakeVolunteerView',
            code='NO_INTERESTS_SUBMITTED')
        response, data = self.post_volunteer_submission(data)
        self.assertEqual(response.status_code, 200)
        assert_alert_exists(
            response, 'danger', 'Error', msg.description)

    def test_volunteer_time_conflict_checked(self):
        data = self.get_volunteer_form()
        data['available_windows'] = data['unavailable_windows']
        response, data = self.post_volunteer_submission(data=data)
        assert unavailable_time_conflict in response.content

    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_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_background_required(self):
        data = self.get_volunteer_form(submit=True)
        del data['background']
        response, data = self.post_volunteer_submission(data)
        self.assertEqual(response.status_code, 200)
        self.assertIn("This field is required.", response.content)
Ejemplo n.º 3
0
class TestCreateAct(TestCase):
    '''Tests for create_act view'''
    create_name = 'summer_act_create'
    edit_name = 'summer_act_edit'

    def setUp(self):
        self.url = reverse(self.create_name, urlconf='gbe.urls')
        Conference.objects.all().delete()
        self.client = Client()
        self.performer = PersonaFactory()
        self.current_conference = ConferenceFactory(
            accepting_bids=True,
            act_style='summer')
        UserMessage.objects.all().delete()

    def get_act_form(self, submit=False, valid=True):

        form_dict = {'theact-shows_preferences': [4],
                     'theact-b_title': 'An act',
                     'theact-track_title': 'a track',
                     'theact-track_artist': 'an artist',
                     'theact-b_description': 'a description',
                     'theact-performer': self.performer.resourceitem_id,
                     'theact-act_duration': '1:00',
                     'theact-b_conference': self.current_conference.pk,
                     'theact-is_summer': True,
                     }
        if not valid:
            form_dict['theact-shows_preferences'] = [2]
        return form_dict

    def post_paid_act_submission(self, act_form=None):
        if not act_form:
            act_form = self.get_act_form()
        url = reverse(self.create_name, urlconf='gbe.urls')
        login_as(self.performer.performer_profile, self)
        act_form.update({'submit': ''})
        make_act_app_purchase(self.current_conference,
                              self.performer.performer_profile.user_object)
        response = self.client.post(url, data=act_form, follow=True)
        return response, act_form

    def post_edit_paid_act_draft(self):
        act = ActFactory(b_conference=self.current_conference)
        url = reverse(self.edit_name,
                      args=[act.pk],
                      urlconf="gbe.urls")
        login_as(act.performer.contact, self)
        response = self.client.post(url,
                                    self.get_act_form(act),
                                    follow=True)
        return response

    def test_bid_act_get_with_persona(self):
        url = reverse(self.create_name, urlconf='gbe.urls')
        login_as(self.performer.performer_profile, self)
        response = self.client.get(url)
        expected_string = 'Please also consider this act for GBE12'
        self.assertTrue(expected_string in response.content)
        self.assertEqual(response.status_code, 200)

    def test_act_bid_post_form_not_valid(self):
        login_as(self.performer.performer_profile, self)
        url = reverse(self.create_name, urlconf='gbe.urls')
        data = self.get_act_form(submit=True, valid=False)
        response = self.client.post(url,
                                    data=data)
        self.assertEqual(response.status_code, 200)
        self.assertTrue(
            'Select a valid choice. 2 is not one of the available choices.'
            in response.content)

    def test_act_bid_get_with_redirect(self):
        url = reverse("act_create", urlconf='gbe.urls')
        login_as(self.performer.performer_profile, self)
        response = self.client.get(url)
        self.assertRedirects(
            response,
            reverse(self.create_name, urlconf="gbe.urls"))

    def test_act_bid_get_with_redirect_other_way(self):
        url = reverse(self.create_name, urlconf='gbe.urls')
        self.current_conference.act_style = "normal"
        self.current_conference.save()
        login_as(self.performer.performer_profile, self)
        response = self.client.get(url)
        self.assertRedirects(
            response,
            reverse("act_create", urlconf="gbe.urls"))

    def test_act_submit_paid_act(self):
        response, data = self.post_paid_act_submission()
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, "View</a> act")
        self.assertContains(response, data['theact-b_title'])

    def test_edit_bid_not_post(self):
        '''edit_bid, not post, should take us to edit process'''
        act = ActFactory(b_conference=self.current_conference)
        url = reverse(self.edit_name,
                      args=[act.pk],
                      urlconf="gbe.urls")

        login_as(act.performer.contact, self)
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
        self.assertTrue(
            'Thanks for submitting an act for consideration at the Summer'
            in response.content)

    def test_edit_bid_w_redirect(self):
        '''edit_bid, not post, should take us to edit process'''
        act = ActFactory(b_conference=self.current_conference)
        url = reverse("act_edit",
                      args=[act.pk],
                      urlconf="gbe.urls")

        login_as(act.performer.contact, self)
        response = self.client.get(url)
        self.assertRedirects(
            response,
            reverse(self.edit_name, args=[act.pk], urlconf="gbe.urls"))

    def test_edit_bid_w_redirect_other_way(self):
        '''edit_bid, not post, should take us to edit process'''
        act = ActFactory()
        url = reverse(self.edit_name,
                      args=[act.pk],
                      urlconf="gbe.urls")

        login_as(act.performer.contact, self)
        response = self.client.get(url)
        self.assertRedirects(
            response,
            reverse("act_edit", args=[act.pk], urlconf="gbe.urls"))

    def test_edit_act_draft_make_message(self):
        response = self.post_edit_paid_act_draft()
        self.assertEqual(200, response.status_code)
        assert_alert_exists(
            response, 'success', 'Success', default_act_draft_msg)