Пример #1
0
    def setUp(self):
        self.owner = Person.objects.create_user(email="*****@*****.**",
                                                password="******")
        self.non_owner = Person.objects.create_user(
            email="*****@*****.**", password="******")
        self.event = EventFactory(collect_housing_data=False)
        OrganizationMember.objects.create(
            person=self.owner,
            organization=self.event.organization,
            role=OrganizationMember.OWNER,
        )
        self.order = OrderFactory(event=self.event, code='aaaaaaaa')
        self.transaction = TransactionFactory(event=self.event,
                                              order=self.order)
        item = ItemFactory(event=self.event)
        item_option = ItemOptionFactory(price=100, item=item)

        self.order.add_to_cart(item_option)
        self.order.add_to_cart(item_option)
        self.order.mark_cart_paid(self.transaction)

        self.attendee = AttendeeFactory(
            order=self.order, bought_items=self.order.bought_items.all())
        self.url = reverse('brambling_event_order_detail',
                           kwargs={
                               'event_slug': self.event.slug,
                               'organization_slug':
                               self.event.organization.slug,
                               'code': self.order.code,
                           })
class OrderDetailViewTest(TestCase):
    def setUp(self):
        self.owner = Person.objects.create_user(email="*****@*****.**", password="******")
        self.non_owner = Person.objects.create_user(email="*****@*****.**", password="******")
        self.event = EventFactory(collect_housing_data=False)
        OrganizationMember.objects.create(
            person=self.owner,
            organization=self.event.organization,
            role=OrganizationMember.OWNER,
        )
        self.order = OrderFactory(event=self.event, code='aaaaaaaa')
        self.transaction = TransactionFactory(event=self.event, order=self.order)
        item = ItemFactory(event=self.event)
        item_option = ItemOptionFactory(price=100, item=item)

        self.order.add_to_cart(item_option)
        self.order.add_to_cart(item_option)
        self.order.mark_cart_paid(self.transaction)

        self.attendee = AttendeeFactory(order=self.order, bought_items=self.order.bought_items.all())
        self.url = reverse('brambling_event_order_detail', kwargs={
            'event_slug': self.event.slug,
            'organization_slug': self.event.organization.slug,
            'code': self.order.code,
        })

    def test_post__order_notes(self):
        self.client.login(username=self.owner.email, password='******')
        response = self.client.post(
            self.url,
            {
                'is_notes_form': '1',
                'notes': 'Hello',
            },
        )

        self.assertEqual(response.status_code, 302)
        self.assertEqual(response['Location'], self.url)
        self.order.refresh_from_db()
        self.assertEqual(self.order.notes, 'Hello')

    def test_post__attendee_notes(self):
        self.client.login(username=self.owner.email, password='******')
        response = self.client.post(
            self.url,
            {
                'is_attendee_form': '1',
                'attendee_id': str(self.attendee.pk),
                'notes': 'Hello',
            },
        )

        self.assertEqual(response.status_code, 302)
        self.assertEqual(response['Location'], self.url)
        self.attendee.refresh_from_db()
        self.assertEqual(self.attendee.notes, 'Hello')
Пример #3
0
    def setUp(self):
        self.event = EventFactory(collect_housing_data=True)
        self.item = ItemFactory(event=self.event)
        self.item_option = ItemOptionFactory(price=100, item=self.item)

        self.order = OrderFactory(event=self.event)
        self.transaction = TransactionFactory(
            event=self.event,
            order=self.order,
        )
        self.order.add_to_cart(self.item_option)
        self.order.mark_cart_paid(self.transaction)

        self.attendee = AttendeeFactory(
            order=self.order,
            bought_items=self.order.bought_items.all(),
            housing_status='have',
            email='*****@*****.**',
            other_needs='99 mattresses',
            person_avoid='Darth Vader',
            person_prefer='Lando Calrissian',
        )
        self.attendee.ef_cause = [
            EnvironmentalFactorFactory(name='Laughter'),
            EnvironmentalFactorFactory(name='Confusion'),
        ]
        self.attendee.housing_prefer = [
            HousingCategoryFactory(name='Yurt'),
        ]
        self.attendee.ef_avoid = [
            EnvironmentalFactorFactory(name='Ontology'),
            EnvironmentalFactorFactory(name='Gnosticism'),
        ]
        self.attendee.nights.add(HousingRequestNightFactory(date=self.event.start_date))

        attendee_form = CustomFormFactory(event=self.event, form_type='attendee')
        f1 = CustomFormFieldFactory(form=attendee_form, name='favorite color')
        self.custom_key1 = f1.key
        entry1 = CustomFormEntry.objects.create(
            related_ct=ContentType.objects.get(model='attendee'),
            related_id=self.attendee.id,
            form_field=f1)
        entry1.set_value('ochre')
        entry1.save()

        housing_form = CustomFormFactory(event=self.event, form_type='housing')
        f2 = CustomFormFieldFactory(form=housing_form, name='floor or bed')
        self.custom_key2 = f2.key
        entry2 = CustomFormEntry.objects.create(
            related_ct=ContentType.objects.get(model='attendee'),
            related_id=self.attendee.pk,
            form_field=f2)
        entry2.set_value('bed')
        entry2.save()
Пример #4
0
    def setUp(self):
        self.factory = RequestFactory()
        self.view = MergeOrderView()

        event = EventFactory(collect_housing_data=True)
        item = ItemFactory(event=event)
        item_option = ItemOptionFactory(price=100, item=item)

        self.person = PersonFactory()
        self.order1 = OrderFactory(event=event, person=self.person)
        self.order2 = OrderFactory(event=event,
                                   person=None,
                                   email=self.person.email)

        self.tr1 = TransactionFactory(event=event, order=self.order1)
        self.tr2 = TransactionFactory(event=event, order=self.order2)

        self.order1.add_to_cart(item_option)
        self.order1.mark_cart_paid(self.tr1)

        self.order2.add_to_cart(item_option)
        self.order2.add_to_cart(item_option)
        self.order2.mark_cart_paid(self.tr2)

        self.att1 = AttendeeFactory(
            order=self.order1,
            bought_items=self.order1.bought_items.all(),
            email='*****@*****.**')
        self.att2 = AttendeeFactory(
            order=self.order2,
            bought_items=self.order2.bought_items.all(),
            email='*****@*****.**')

        self.housing2 = EventHousingFactory(
            event=event,
            order=self.order2,
            contact_name='Picard',
            contact_email='*****@*****.**',
            contact_phone='111-111-1111',
            public_transit_access=True,
            person_prefer='Dr. Crusher',
            person_avoid='Wesley Crusher')

        self.attendee1 = AttendeeFactory(order=self.order1)
        self.attendee2 = AttendeeFactory(order=self.order2)

        self.view.request = self.factory.post('/', {'pk': self.order2.pk})
        self.view.request.user = self.person

        setattr(self.view.request, 'session', 'session')
        messages = FallbackStorage(self.view.request)
        setattr(self.view.request, '_messages', messages)
Пример #5
0
    def test_order_by_purchase_date(self):
        """
        If ordering by purchase date is selected, we should get that
        ordering even if the field isn't selected.

        """
        order2 = OrderFactory(event=self.event)
        transaction = TransactionFactory(
            event=self.event,
            order=order2,
            timestamp=timezone.now() - datetime.timedelta(days=50)
        )
        order2.add_to_cart(self.item_option)
        order2.mark_cart_paid(transaction)
        attendee2 = AttendeeFactory(
            order=order2,
            bought_items=order2.bought_items.all(),
            housing_status='have',
            email='*****@*****.**',
            other_needs='99 mattresses',
            person_avoid='Darth Vader',
            person_prefer='Han Solo',
        )

        table = AttendeeTable(
            event=self.event,
            data={
                'o': '-purchase_date',
                TABLE_COLUMN_FIELD: ['pk', 'get_full_name'],
            },
        )
        rows = list(table)
        self.assertEqual(rows[0]['pk'].value, self.attendee.pk)
        self.assertEqual(rows[1]['pk'].value, attendee2.pk)
    def test_needs_housing(self):
        event = EventFactory(collect_housing_data=False)
        order = OrderFactory(event=event)
        transaction = TransactionFactory(event=event, order=order)
        item = ItemFactory(event=event)
        item_option = ItemOptionFactory(price=100, item=item)

        order.add_to_cart(item_option)
        order.add_to_cart(item_option)
        order.mark_cart_paid(transaction)

        a1 = AttendeeFactory(order=order, bought_items=order.bought_items.all(),
                             housing_status=Attendee.NEED)
        a2 = AttendeeFactory(order=order, bought_items=order.bought_items.all())
        self.assertTrue(a1.needs_housing())
        self.assertFalse(a2.needs_housing())
Пример #7
0
    def test_unicode_csv(self):
        event = EventFactory(collect_housing_data=True, currency='GBP')
        order = OrderFactory(event=event)
        transaction = TransactionFactory(event=event, order=order)
        item = ItemFactory(event=event)
        item_option = ItemOptionFactory(price=100, item=item)

        order.add_to_cart(item_option)
        order.add_to_cart(item_option)
        order.mark_cart_paid(transaction)

        AttendeeFactory(
            order=order,
            bought_items=order.bought_items.all(),
            housing_status=Attendee.HOME,
        )

        view = AttendeeFilterView()
        view.event = event
        view.request = self.factory.get('/?format=csv')
        view.request.user = AnonymousUser()

        table = view.get_table(Attendee.objects.all())
        response = view.render_to_response({'table': table})
        self.assertEqual(response['content-disposition'],
                         'attachment; filename="export.csv"')
        content = list(response)
        self.assertIn('£200.00', content[1])
Пример #8
0
    def test_attendee_count__home_housing(self):
        """Attendee count should be present & accurate; housing data should."""
        event = EventFactory(collect_housing_data=True)
        order = OrderFactory(event=event)
        transaction = TransactionFactory(event=event, order=order)
        item = ItemFactory(event=event)
        item_option = ItemOptionFactory(price=100, item=item)

        order.add_to_cart(item_option)
        order.add_to_cart(item_option)
        order.mark_cart_paid(transaction)

        AttendeeFactory(
            order=order,
            bought_items=order.bought_items.all(),
            housing_status=Attendee.HOME,
        )

        view = EventSummaryView()
        view.request = self.factory.get('/')
        view.request.user = AnonymousUser()
        view.event = event
        context_data = view.get_context_data()

        self.assertEqual(context_data['attendee_count'], 1)
        self.assertEqual(context_data['attendee_requesting_count'], 0)
        self.assertEqual(context_data['attendee_arranged_count'], 0)
        self.assertEqual(context_data['attendee_home_count'], 1)
Пример #9
0
    def test_queryset_distinct(self):
        """
        For authenticated users, make sure the qs is distinct.
        Specifically, having multiple additional editors on
        the event shouldn't cause duplication issues.
        """
        person = PersonFactory()
        editor1 = PersonFactory()
        editor2 = PersonFactory()
        editor3 = PersonFactory()
        event = EventFactory(collect_housing_data=False)
        EventMember.objects.create(
            person=editor1,
            event=event,
            role=EventMember.EDIT,
        )
        EventMember.objects.create(
            person=editor2,
            event=event,
            role=EventMember.EDIT,
        )
        EventMember.objects.create(
            person=editor3,
            event=event,
            role=EventMember.EDIT,
        )
        order = OrderFactory(event=event, person=person)
        # Set up three attendees to trigger duplication.
        AttendeeFactory(order=order)
        AttendeeFactory(order=order)
        AttendeeFactory(order=order)

        item = ItemFactory(event=event)
        item_option = ItemOptionFactory(price=100, item=item)

        order.add_to_cart(item_option)
        order.add_to_cart(item_option)

        viewset = BoughtItemViewSet()
        viewset.request = self.factory.get('/')
        viewset.request.user = person

        qs = viewset.get_queryset()
        self.assertEqual(len(qs), 2)
        self.assertEqual(set(qs), set(order.bought_items.all()))
Пример #10
0
    def test_queryset_distinct(self):
        """
        For authenticated users, make sure the qs is distinct.
        Specifically, having multiple additional editors on
        the event shouldn't cause duplication issues.
        """
        person = PersonFactory()
        editor1 = PersonFactory()
        editor2 = PersonFactory()
        editor3 = PersonFactory()
        event = EventFactory(collect_housing_data=False)
        EventMember.objects.create(
            person=editor1,
            event=event,
            role=EventMember.EDIT,
        )
        EventMember.objects.create(
            person=editor2,
            event=event,
            role=EventMember.EDIT,
        )
        EventMember.objects.create(
            person=editor3,
            event=event,
            role=EventMember.EDIT,
        )
        order = OrderFactory(event=event, person=person)
        att1 = AttendeeFactory(order=order)
        att2 = AttendeeFactory(order=order)
        att3 = AttendeeFactory(order=order)

        viewset = AttendeeViewSet()
        viewset.request = self.factory.get('/')
        viewset.request.user = person

        qs = viewset.get_queryset()
        self.assertEqual(len(qs), 3)
        self.assertEqual(set(qs), set((att1, att2, att3)))
Пример #11
0
    def setUp(self):
        self.event = EventFactory()
        self.order = OrderFactory(event=self.event)
        self.transaction = TransactionFactory(
            event=self.event,
            order=self.order,
        )
        self.item = ItemFactory(event=self.event)
        self.item_option = ItemOptionFactory(price=100, item=self.item)

        self.order.add_to_cart(self.item_option)
        self.order.mark_cart_paid(self.transaction)

        self.attendee = AttendeeFactory(
            order=self.order,
            bought_items=self.order.bought_items.all(),
        )

        self.view = AttendeeFilterView()
        self.view.event = self.event
Пример #12
0
    def setUp(self):
        self.factory = RequestFactory()
        self.owner = Person.objects.create_user(email="*****@*****.**",
                                                password="******")
        self.non_owner = Person.objects.create_user(
            email="*****@*****.**", password="******")
        self.event = EventFactory(collect_housing_data=False)
        OrganizationMember.objects.create(
            person=self.owner,
            organization=self.event.organization,
            role=OrganizationMember.OWNER,
        )
        order = OrderFactory(event=self.event, code='aaaaaaaa')
        self.transaction = TransactionFactory(event=self.event, order=order)
        item = ItemFactory(event=self.event)
        item_option = ItemOptionFactory(price=100, item=item)

        order.add_to_cart(item_option)
        order.add_to_cart(item_option)
        order.mark_cart_paid(self.transaction)

        AttendeeFactory(order=order, bought_items=order.bought_items.all())
Пример #13
0
    def setUp(self):
        self.factory = RequestFactory()
        owner = PersonFactory()
        self.event = EventFactory(collect_housing_data=False)
        OrganizationMember.objects.create(
            person=owner,
            organization=self.event.organization,
            role=OrganizationMember.OWNER,
        )
        order = OrderFactory(event=self.event, code='aaaaaaaa')
        self.transaction = TransactionFactory(event=self.event, order=order)
        item = ItemFactory(event=self.event)
        item_option = ItemOptionFactory(price=100, item=item)

        order.add_to_cart(item_option)
        order.add_to_cart(item_option)
        order.mark_cart_paid(self.transaction)

        AttendeeFactory(order=order, bought_items=order.bought_items.all())

        self.view = SendReceiptView()
        self.view.request = self.factory.get('/')
        self.view.request.user = owner
Пример #14
0
    def test_needs_housing(self):
        event = EventFactory(collect_housing_data=False)
        order = OrderFactory(event=event)
        transaction = TransactionFactory(event=event, order=order)
        item = ItemFactory(event=event)
        item_option = ItemOptionFactory(price=100, item=item)

        order.add_to_cart(item_option)
        order.add_to_cart(item_option)
        order.mark_cart_paid(transaction)

        a1 = AttendeeFactory(order=order,
                             bought_items=order.bought_items.all(),
                             housing_status=Attendee.NEED)
        a2 = AttendeeFactory(order=order,
                             bought_items=order.bought_items.all())
        self.assertTrue(a1.needs_housing())
        self.assertFalse(a2.needs_housing())
    def setUp(self):
        self.owner = Person.objects.create_user(email="*****@*****.**", password="******")
        self.non_owner = Person.objects.create_user(email="*****@*****.**", password="******")
        self.event = EventFactory(collect_housing_data=False)
        OrganizationMember.objects.create(
            person=self.owner,
            organization=self.event.organization,
            role=OrganizationMember.OWNER,
        )
        self.order = OrderFactory(event=self.event, code='aaaaaaaa')
        self.transaction = TransactionFactory(event=self.event, order=self.order)
        item = ItemFactory(event=self.event)
        item_option = ItemOptionFactory(price=100, item=item)

        self.order.add_to_cart(item_option)
        self.order.add_to_cart(item_option)
        self.order.mark_cart_paid(self.transaction)

        self.attendee = AttendeeFactory(order=self.order, bought_items=self.order.bought_items.all())
        self.url = reverse('brambling_event_order_detail', kwargs={
            'event_slug': self.event.slug,
            'organization_slug': self.event.organization.slug,
            'code': self.order.code,
        })
    def setUp(self):
        event = EventFactory(collect_housing_data=True,
                             start_date=now().date() + timedelta(days=2),
                             end_date=now().date() + timedelta(days=2))
        order = OrderFactory(event=event, providing_housing=False)
        housing = EventHousingFactory(event=event,
                                      order=order,
                                      contact_name='Zardoz',
                                      contact_email='*****@*****.**',
                                      contact_phone='111-111-1111',
                                      public_transit_access=True,
                                      person_prefer='Han Solo',
                                      person_avoid='Greedo')
        HousingSlotFactory(eventhousing=housing,
                           date=event.start_date,
                           spaces=1,
                           spaces_max=1)
        HousingSlotFactory(eventhousing=housing,
                           date=event.start_date - timedelta(days=1),
                           spaces=1,
                           spaces_max=1)
        housing.ef_present.add(EnvironmentalFactorFactory(name='Carbonite'))
        housing.ef_present.add(EnvironmentalFactorFactory(name='Sandbarges'))
        housing.ef_avoid.add(EnvironmentalFactorFactory(name='Jedi'))
        housing.ef_avoid.add(EnvironmentalFactorFactory(name='Droids'))
        housing.housing_categories.add(HousingCategoryFactory(name='Palace'))
        transaction = TransactionFactory(event=event, order=order)
        item = ItemFactory(event=event)
        item_option = ItemOptionFactory(price=100, item=item)

        order.add_to_cart(item_option)
        order.mark_cart_paid(transaction)

        self.attendee = AttendeeFactory(
            order=order,
            bought_items=order.bought_items.all(),
            housing_status='have',
            email='*****@*****.**',
            other_needs='99 mattresses',
            person_avoid='Darth Vader',
            person_prefer='Lando Calrissian',
        )
        self.attendee.ef_cause = [
            EnvironmentalFactorFactory(name='Laughter'),
            EnvironmentalFactorFactory(name='Confusion'),
        ]
        self.attendee.housing_prefer = [
            HousingCategoryFactory(name='Yurt'),
        ]
        self.attendee.ef_avoid = [
            EnvironmentalFactorFactory(name='Ontology'),
            EnvironmentalFactorFactory(name='Gnosticism'),
        ]
        self.attendee.nights.add(
            HousingRequestNightFactory(date=event.start_date))

        housing_form = CustomFormFactory(event=event, form_type='hosting')
        field = CustomFormFieldFactory(form=housing_form, name='bed condition')
        self.custom_key = field.key
        entry2 = CustomFormEntry.objects.create(
            related_ct=ContentType.objects.get(model='eventhousing'),
            related_id=housing.pk,
            form_field=field)
        entry2.set_value('unmade')
        entry2.save()

        self.event = event
        self.order = order
Пример #17
0
class AttendeeTableTestCase(TestCase):
    def setUp(self):
        event = EventFactory(collect_housing_data=True)
        order = OrderFactory(event=event)
        transaction = TransactionFactory(event=event, order=order)
        item = ItemFactory(event=event)
        item_option = ItemOptionFactory(price=100, item=item)

        order.add_to_cart(item_option)
        order.mark_cart_paid(transaction)

        self.attendee = AttendeeFactory(
            order=order,
            bought_items=order.bought_items.all(),
            housing_status='have',
            email='*****@*****.**',
            other_needs='99 mattresses',
            person_avoid='Darth Vader',
            person_prefer='Lando Calrissian',
        )
        self.attendee.ef_cause = [
            EnvironmentalFactorFactory(name='Laughter'),
            EnvironmentalFactorFactory(name='Confusion'),
        ]
        self.attendee.housing_prefer = [
            HousingCategoryFactory(name='Yurt'),
        ]
        self.attendee.ef_avoid = [
            EnvironmentalFactorFactory(name='Ontology'),
            EnvironmentalFactorFactory(name='Gnosticism'),
        ]
        self.attendee.nights.add(
            HousingRequestNightFactory(date=event.start_date))

        attendee_form = CustomFormFactory(event=event, form_type='attendee')
        f1 = CustomFormFieldFactory(form=attendee_form, name='favorite color')
        self.custom_key1 = f1.key
        entry1 = CustomFormEntry.objects.create(
            related_ct=ContentType.objects.get(model='attendee'),
            related_id=self.attendee.id,
            form_field=f1)
        entry1.set_value('ochre')
        entry1.save()

        housing_form = CustomFormFactory(event=event, form_type='housing')
        f2 = CustomFormFieldFactory(form=housing_form, name='floor or bed')
        self.custom_key2 = f2.key
        entry2 = CustomFormEntry.objects.create(
            related_ct=ContentType.objects.get(model='attendee'),
            related_id=self.attendee.pk,
            form_field=f2)
        entry2.set_value('bed')
        entry2.save()

        self.event = event

    def test_blank_housing_fields_if_attendee_does_not_need_housing(self):
        table = AttendeeTable(self.event)

        for row in table:
            self.assertEqual(row['other_needs_if_needed'].value, '')
            self.assertEqual(row['housing_nights'].value, '')
            self.assertEqual(row['housing_preferences'].value, '')
            self.assertEqual(row['environment_avoid'].value, '')
            self.assertEqual(row['environment_cause'].value, '')
            self.assertEqual(row['person_prefer_if_needed'].value, '')
            self.assertEqual(row['person_avoid_if_needed'].value, '')
            self.assertEqual(row[self.custom_key2].value, '')

    def test__show_non_housing_form_data_if_attendee_needs_housing(self):
        table = AttendeeTable(self.event)
        for row in table:
            self.assertEqual(row[self.custom_key1].value, 'ochre')

    def test_show_non_housing_form_data_if_attendee_does_not_need_housing(
            self):
        self.attendee.housing_status = 'need'
        self.attendee.save()
        table = AttendeeTable(self.event)
        for row in table:
            self.assertEqual(row[self.custom_key1].value, 'ochre')

    def test_filled_housing_fields_if_attendee_needs_housing(self):
        self.attendee.housing_status = 'need'
        self.attendee.save()
        table = AttendeeTable(self.event)

        for row in table:
            self.assertNotEqual(row['other_needs_if_needed'].value, '')
            self.assertNotEqual(row['housing_nights'].value, '')
            self.assertNotEqual(row['housing_preferences'].value, '')
            self.assertNotEqual(row['environment_avoid'].value, '')
            self.assertNotEqual(row['environment_cause'].value, '')
            self.assertNotEqual(row['person_prefer_if_needed'].value, '')
            self.assertNotEqual(row['person_avoid_if_needed'].value, '')
            self.assertNotEqual(row[self.custom_key2].value, '')
Пример #18
0
class OrderDetailViewTest(TestCase):
    def setUp(self):
        self.owner = Person.objects.create_user(email="*****@*****.**",
                                                password="******")
        self.non_owner = Person.objects.create_user(
            email="*****@*****.**", password="******")
        self.event = EventFactory(collect_housing_data=False)
        OrganizationMember.objects.create(
            person=self.owner,
            organization=self.event.organization,
            role=OrganizationMember.OWNER,
        )
        self.order = OrderFactory(event=self.event, code='aaaaaaaa')
        self.transaction = TransactionFactory(event=self.event,
                                              order=self.order)
        item = ItemFactory(event=self.event)
        item_option = ItemOptionFactory(price=100, item=item)

        self.order.add_to_cart(item_option)
        self.order.add_to_cart(item_option)
        self.order.mark_cart_paid(self.transaction)

        self.attendee = AttendeeFactory(
            order=self.order, bought_items=self.order.bought_items.all())
        self.url = reverse('brambling_event_order_detail',
                           kwargs={
                               'event_slug': self.event.slug,
                               'organization_slug':
                               self.event.organization.slug,
                               'code': self.order.code,
                           })

    def test_post__order_notes(self):
        self.client.login(username=self.owner.email, password='******')
        response = self.client.post(
            self.url,
            {
                'is_notes_form': '1',
                'notes': 'Hello',
            },
        )

        self.assertEqual(response.status_code, 302)
        self.assertEqual(response['Location'], self.url)
        self.order.refresh_from_db()
        self.assertEqual(self.order.notes, 'Hello')

    def test_post__attendee_notes(self):
        self.client.login(username=self.owner.email, password='******')
        response = self.client.post(
            self.url,
            {
                'is_attendee_form': '1',
                'attendee_id': str(self.attendee.pk),
                'notes': 'Hello',
            },
        )

        self.assertEqual(response.status_code, 302)
        self.assertEqual(response['Location'], self.url)
        self.attendee.refresh_from_db()
        self.assertEqual(self.attendee.notes, 'Hello')
Пример #19
0
class AttendeeTableTestCase(TestCase):

    def setUp(self):
        self.event = EventFactory(collect_housing_data=True)
        self.item = ItemFactory(event=self.event)
        self.item_option = ItemOptionFactory(price=100, item=self.item)

        self.order = OrderFactory(event=self.event)
        self.transaction = TransactionFactory(
            event=self.event,
            order=self.order,
        )
        self.order.add_to_cart(self.item_option)
        self.order.mark_cart_paid(self.transaction)

        self.attendee = AttendeeFactory(
            order=self.order,
            bought_items=self.order.bought_items.all(),
            housing_status='have',
            email='*****@*****.**',
            other_needs='99 mattresses',
            person_avoid='Darth Vader',
            person_prefer='Lando Calrissian',
        )
        self.attendee.ef_cause = [
            EnvironmentalFactorFactory(name='Laughter'),
            EnvironmentalFactorFactory(name='Confusion'),
        ]
        self.attendee.housing_prefer = [
            HousingCategoryFactory(name='Yurt'),
        ]
        self.attendee.ef_avoid = [
            EnvironmentalFactorFactory(name='Ontology'),
            EnvironmentalFactorFactory(name='Gnosticism'),
        ]
        self.attendee.nights.add(HousingRequestNightFactory(date=self.event.start_date))

        attendee_form = CustomFormFactory(event=self.event, form_type='attendee')
        f1 = CustomFormFieldFactory(form=attendee_form, name='favorite color')
        self.custom_key1 = f1.key
        entry1 = CustomFormEntry.objects.create(
            related_ct=ContentType.objects.get(model='attendee'),
            related_id=self.attendee.id,
            form_field=f1)
        entry1.set_value('ochre')
        entry1.save()

        housing_form = CustomFormFactory(event=self.event, form_type='housing')
        f2 = CustomFormFieldFactory(form=housing_form, name='floor or bed')
        self.custom_key2 = f2.key
        entry2 = CustomFormEntry.objects.create(
            related_ct=ContentType.objects.get(model='attendee'),
            related_id=self.attendee.pk,
            form_field=f2)
        entry2.set_value('bed')
        entry2.save()

    def test_blank_housing_fields_if_attendee_does_not_need_housing(self):
        table = AttendeeTable(self.event)

        for row in table:
            self.assertEqual(row['other_needs_if_needed'].value, '')
            self.assertEqual(row['housing_nights'].value, '')
            self.assertEqual(row['housing_preferences'].value, '')
            self.assertEqual(row['environment_avoid'].value, '')
            self.assertEqual(row['environment_cause'].value, '')
            self.assertEqual(row['person_prefer_if_needed'].value, '')
            self.assertEqual(row['person_avoid_if_needed'].value, '')
            self.assertEqual(row[self.custom_key2].value, '')

    def test__show_non_housing_form_data_if_attendee_needs_housing(self):
        table = AttendeeTable(self.event)
        for row in table:
            self.assertEqual(row[self.custom_key1].value, 'ochre')

    def test_show_non_housing_form_data_if_attendee_does_not_need_housing(self):
        self.attendee.housing_status = 'need'
        self.attendee.save()
        table = AttendeeTable(self.event)
        for row in table:
            self.assertEqual(row[self.custom_key1].value, 'ochre')

    def test_filled_housing_fields_if_attendee_needs_housing(self):
        self.attendee.housing_status = 'need'
        self.attendee.save()
        table = AttendeeTable(self.event)

        for row in table:
            self.assertNotEqual(row['other_needs_if_needed'].value, '')
            self.assertNotEqual(row['housing_nights'].value, '')
            self.assertNotEqual(row['housing_preferences'].value, '')
            self.assertNotEqual(row['environment_avoid'].value, '')
            self.assertNotEqual(row['environment_cause'].value, '')
            self.assertNotEqual(row['person_prefer_if_needed'].value, '')
            self.assertNotEqual(row['person_avoid_if_needed'].value, '')
            self.assertNotEqual(row[self.custom_key2].value, '')

    def test_purchase_date_field(self):
        table = AttendeeTable(
            event=self.event,
            data={
                TABLE_COLUMN_FIELD: ['pk', 'purchase_date'],
            },
        )
        row = list(table)[0]
        self.assertEqual(
            row['purchase_date'].value,
            format_as_localtime(
                self.transaction.timestamp,
                '%Y-%m-%d %H:%M',
                self.event.timezone,
            ),
        )

    def test_order_by_purchase_date(self):
        """
        If ordering by purchase date is selected, we should get that
        ordering even if the field isn't selected.

        """
        order2 = OrderFactory(event=self.event)
        transaction = TransactionFactory(
            event=self.event,
            order=order2,
            timestamp=timezone.now() - datetime.timedelta(days=50)
        )
        order2.add_to_cart(self.item_option)
        order2.mark_cart_paid(transaction)
        attendee2 = AttendeeFactory(
            order=order2,
            bought_items=order2.bought_items.all(),
            housing_status='have',
            email='*****@*****.**',
            other_needs='99 mattresses',
            person_avoid='Darth Vader',
            person_prefer='Han Solo',
        )

        table = AttendeeTable(
            event=self.event,
            data={
                'o': '-purchase_date',
                TABLE_COLUMN_FIELD: ['pk', 'get_full_name'],
            },
        )
        rows = list(table)
        self.assertEqual(rows[0]['pk'].value, self.attendee.pk)
        self.assertEqual(rows[1]['pk'].value, attendee2.pk)