def setUp(self): self.client = Client() self.ticketing_event = TicketingEventsFactory() self.gbe_event = ShowFactory() self.privileged_user = ProfileFactory().user_object grant_privilege(self.privileged_user, 'Ticketing - Admin') self.url = reverse('set_ticket_to_event', urlconf='ticketing.urls', args=[self.ticketing_event.event_id, "on", self.gbe_event.eventitem_id])
def test_get_tickets_for_master_class(self): '''get the one ticket that is active for the Master Class ''' event = GenericEventFactory(type='Master') ticketing_event = TicketingEventsFactory(conference=event.e_conference, title="Master Class 2017") ticketing_event.linked_events.add(event) ticketing_event.save() TicketItemFactory(ticketing_event=ticketing_event, live=True, has_coupon=False) tickets = event.get_tickets() self.assertEqual(len(tickets), 1) self.assertEqual(tickets[0].title, "Master Class 2017")
def test_get_eb_inventory_ticket_pagination(self, m_eventbrite): # privileged user gets the inventory of tickets from (fake) EB TicketingEvents.objects.all().delete() BrownPaperSettings.objects.all().delete() event = TicketingEventsFactory() BrownPaperSettingsFactory() EventbriteSettingsFactory() simple_event_dict = copy.deepcopy(event_dict) simple_event_dict['events'] = [event_dict['events'][0]] continue_ticket_page = copy.deepcopy(ticket_dict1) continue_ticket_page['pagination']['has_more_items'] = True continue_ticket_page['pagination']['continuation'] = "eyJwYWdlIjogMn0" m_eventbrite.side_effect = [ simple_event_dict, continue_ticket_page, ticket_dict3 ] response = self.import_tickets() assert_alert_exists(response, 'success', 'Success', ("Successfully imported %d events, %d tickets" % (1, 4))) assert_alert_exists(response, 'success', 'Success', ("BPT: imported %d tickets") % (0)) ticket = get_object_or_404(TicketItem, ticket_id='987987987') self.assertEqual(ticket.cost, Decimal('0.00')) ticket = get_object_or_404(TicketItem, ticket_id='098098098') self.assertEqual(ticket.cost, Decimal('100.00'))
def test_get_transaction_fake_out(self, m_urlopen): ''' in a case of user email vs. purchase email, purchase wins. ''' TicketingEvents.objects.all().delete() BrownPaperSettings.objects.all().delete() event = TicketingEventsFactory() ticket = TicketItemFactory(ticketing_event=event, ticket_id='%s-%s' % (event.event_id, '3255985')) BrownPaperSettingsFactory() limbo, created = User.objects.get_or_create(username='******') user = UserFactory(email='*****@*****.**') profile = ProfileFactory(user_object=user, purchase_email='*****@*****.**') a = Mock() order_filename = open("tests/ticketing/orderlist.xml", 'r') a.read.side_effect = [File(order_filename).read()] m_urlopen.return_value = a self.assertEqual(process_bpt_order_list(), 1) transaction = get_object_or_404(Transaction, reference='A12345678') self.assertEqual(str(transaction.order_date), "2014-08-15 19:26:56") self.assertEqual(transaction.shipping_method, 'Will Call') self.assertEqual(transaction.order_notes, 'None') self.assertEqual(transaction.payment_source, 'Brown Paper Tickets') self.assertEqual(transaction.purchaser.email, '*****@*****.**') self.assertEqual(transaction.purchaser.phone, '111-222-3333') self.assertEqual(transaction.purchaser.matched_to_user, limbo) self.assertEqual(transaction.purchaser.first_name, 'John') self.assertEqual(transaction.purchaser.last_name, 'Smith') user.delete()
def test_get_transaction_purchase_email_case_mismatch(self, m_urlopen): ''' get a transaction for a real user via the purchase_email ''' TicketingEvents.objects.all().delete() BrownPaperSettings.objects.all().delete() event = TicketingEventsFactory() ticket = TicketItemFactory(ticketing_event=event, ticket_id='%s-%s' % (event.event_id, '3255985')) BrownPaperSettingsFactory() profile = ProfileFactory(purchase_email='*****@*****.**') a = Mock() order_filename = open("tests/ticketing/orderlist.xml", 'r') a.read.side_effect = [File(order_filename).read()] m_urlopen.return_value = a self.assertEqual(process_bpt_order_list(), 1) transaction = get_object_or_404(Transaction, reference='A12345678') self.assertEqual(str(transaction.order_date), "2014-08-15 19:26:56") self.assertEqual(transaction.shipping_method, 'Will Call') self.assertEqual(transaction.order_notes, 'None') self.assertEqual(transaction.payment_source, 'Brown Paper Tickets') self.assertEqual(transaction.purchaser.email, '*****@*****.**') self.assertEqual(transaction.purchaser.phone, '111-222-3333') self.assertEqual(transaction.purchaser.matched_to_user, profile.user_object) self.assertEqual(transaction.purchaser.first_name, 'John') self.assertEqual(transaction.purchaser.last_name, 'Smith') profile.user_object.delete()
def make_act_app_ticket(conference): ticketing_event = TicketingEventsFactory(conference=conference, act_submission_event=True) ticket_id = "%s-1111" % (ticketing_event.event_id) ticket = TicketItemFactory(ticket_id=ticket_id, ticketing_event=ticketing_event) return ticketing_event.event_id
def test_make_new_ticket(self, m_urlopen): grant_privilege(self.privileged_user, 'Ticketing - Admin') TicketingEvents.objects.all().delete() BrownPaperSettings.objects.all().delete() BrownPaperSettingsFactory() ticketing_event = TicketingEventsFactory( conference=self.current_conference) a = Mock() event_filename = open("tests/ticketing/eventlist.xml", 'r') a.read.side_effect = [File(event_filename).read()] m_urlopen.return_value = a login_as(self.privileged_user, self) data = self.edit_class() data['event_id'] = "1122333" data['display_icon'] = "icon-diamond" response = self.client.post(self.url, data=data, follow=True) new_class = GenericEvent.objects.get(e_title=data['e_title']) self.assertEqual(new_class.type, "Master") occurrence = Event.objects.get( eventitem__eventitem_id=new_class.eventitem_id) self.assertRedirects( response, "%s?%s-day=%d&filter=Filter&new=[%d]" % (reverse('manage_event_list', urlconf='gbe.scheduling.urls', args=[self.current_conference.conference_slug ]), self.current_conference.conference_slug, self.day.pk, occurrence.pk)) assert_alert_exists( response, 'success', 'Success', "%s %s - %s" % (create_ticket_event_success_msg, data['event_id'], "GBE10 Whole Shebang 2016")) assert_alert_exists(response, 'warning', "Warning", no_tickets_found_msg)
def test_transactions_sync_bpt_only(self, m_urlopen): TicketingEvents.objects.all().delete() BrownPaperSettings.objects.all().delete() BrownPaperSettingsFactory() event = TicketingEventsFactory(event_id="1") ticket = TicketItemFactory(ticketing_event=event, ticket_id='%s-%s' % (event.event_id, '3255985')) limbo, created = User.objects.get_or_create(username='******') a = Mock() order_filename = open("tests/ticketing/orderlist.xml", 'r') a.read.side_effect = [File(order_filename).read()] m_urlopen.return_value = a login_as(self.privileged_user, self) response = self.client.post(self.url, data={'Sync': 'Sync'}) nt.assert_equal(response.status_code, 200) transaction = get_object_or_404(Transaction, reference='A12345678') nt.assert_equal(str(transaction.order_date), "2014-08-15 19:26:56") nt.assert_equal(transaction.shipping_method, 'Will Call') nt.assert_equal(transaction.order_notes, 'None') nt.assert_equal(transaction.payment_source, 'Brown Paper Tickets') nt.assert_equal(transaction.purchaser.email, '*****@*****.**') nt.assert_equal(transaction.purchaser.phone, '111-222-3333') nt.assert_equal(transaction.purchaser.matched_to_user, limbo) nt.assert_equal(transaction.purchaser.first_name, 'John') nt.assert_equal(transaction.purchaser.last_name, 'Smith') assert_alert_exists( response, 'success', 'Success', "%s Transactions imported: %s - BPT" % (import_transaction_message, "1")) assert_alert_exists(response, 'danger', 'Error', no_settings_error)
def test_get_event_detail(self, m_urlopen): TicketingEvents.objects.all().delete() BrownPaperSettings.objects.all().delete() event = TicketingEventsFactory(title='', description='') BrownPaperSettingsFactory() a = Mock() event_filename = open("tests/ticketing/eventlist.xml", 'r') date_filename = open("tests/ticketing/datelist.xml", 'r') price_filename = open("tests/ticketing/pricelist.xml", 'r') a.read.side_effect = [ File(event_filename).read(), File(date_filename).read(), File(price_filename).read() ] m_urlopen.return_value = a response = self.import_tickets() self.assertEqual(response.status_code, 200) reload_event = get_object_or_404(TicketingEvents, event_id='%s' % (event.event_id)) self.assertEqual(response.status_code, 200) self.assertIn( "The Great Burlesque Exposition of 2016 takes place Feb. 5-7", reload_event.description)
def test_reimport_bpt_inventory(self, m_urlopen): # reimporting gets nothing new but doesn't fail TicketingEvents.objects.all().delete() BrownPaperSettings.objects.all().delete() event = TicketingEventsFactory() BrownPaperSettingsFactory() TicketItemFactory(ticket_id='%s-4513068' % (event.event_id), has_coupon=True, live=False, ticketing_event=event) a = Mock() date_filename = open("tests/ticketing/datelist.xml", 'r') price_filename = open("tests/ticketing/pricelist.xml", 'r') a.read.side_effect = [ File(date_filename).read(), File(price_filename).read() ] m_urlopen.return_value = a response = self.import_tickets() self.assertEqual(response.status_code, 200) ticket = get_object_or_404(TicketItem, ticket_id='%s-4513068' % (event.event_id)) assert ticket.live assert ticket.has_coupon
def test_get_bpt_inventory(self, m_urlopen): # privileged user gets the inventory of tickets from (fake) BPT TicketingEvents.objects.all().delete() BrownPaperSettings.objects.all().delete() event = TicketingEventsFactory() BrownPaperSettingsFactory() a = Mock() date_filename = open("tests/ticketing/datelist.xml", 'r') price_filename = open("tests/ticketing/pricelist.xml", 'r') a.read.side_effect = [ File(date_filename).read(), File(price_filename).read() ] m_urlopen.return_value = a response = self.import_tickets() self.assertEqual(response.status_code, 200) assert_alert_exists(response, 'danger', 'Error', no_settings_error) assert_alert_exists(response, 'success', 'Success', "BPT: imported %d tickets" % 12) ticket = get_object_or_404(TicketItem, ticket_id='%s-4513068' % (event.event_id)) self.assertEqual(response.status_code, 200) self.assertEqual(ticket.cost, Decimal('125.00'))
def make_vendor_app_purchase(conference, user_object): ticketing_event = TicketingEventsFactory(conference=conference, vendor_submission_event=True) purchaser = PurchaserFactory(matched_to_user=user_object) ticket_id = "%s-1111" % (ticketing_event.event_id) ticket = TicketItemFactory(ticket_id=ticket_id, ticketing_event=ticketing_event) transaction = TransactionFactory(ticket_item=ticket, purchaser=purchaser) return transaction
def test_get_tickets(self): grant_privilege(self.privileged_user, 'Ticketing - Admin') ticketing_event = TicketingEventsFactory( conference=self.current_conference) login_as(self.privileged_user, self) response = self.client.get(self.url) self.assertEqual(response.status_code, 200) self.assertContains( response, "%s - %s" % (ticketing_event.event_id, ticketing_event.title))
def test_get_tickets_for_class_three_ways(self): '''the ticket is linked to the class event three ways - 'most', 'conference', and a direct link. It only should appear once. ''' event = ClassFactory() ticketing_event = TicketingEventsFactory( conference=event.e_conference, include_most=True, include_conference=True, title="The Whole Shebang 2016") ticketing_event.linked_events.add(event) ticketing_event.save() TicketItemFactory(ticketing_event=ticketing_event, live=True, has_coupon=False) tickets = event.get_tickets() self.assertEqual(len(tickets), 1) self.assertEqual(tickets[0].title, "The Whole Shebang 2016")
def test_no_event_list(self, m_urlopen): # not event list comes when getting inventory TicketingEvents.objects.all().delete() BrownPaperSettings.objects.all().delete() event = TicketingEventsFactory(title="", description="") BrownPaperSettingsFactory() a = Mock() a.read.side_effect = [] m_urlopen.return_value = a response = self.import_tickets() self.assertEqual(response.status_code, 200)
def test_no_settings(self, m_urlopen): # not date list comes when getting inventory TicketingEvents.objects.all().delete() BrownPaperSettings.objects.all().delete() event = TicketingEventsFactory(title="", description="") a = Mock() event_filename = open("tests/ticketing/eventlist.xml", 'r') a.read.side_effect = [File(event_filename).read()] m_urlopen.return_value = a response = self.import_tickets() self.assertEqual(response.status_code, 200)
def test_urlerror(self, m_urlopen): # first read from BPT has a URL read error TicketingEvents.objects.all().delete() BrownPaperSettings.objects.all().delete() event = TicketingEventsFactory(title="", description="") BrownPaperSettingsFactory() a = Mock() a.read.side_effect = urllib.error.URLError("test url error") m_urlopen.return_value = a response = self.import_tickets() self.assertEqual(response.status_code, 200)
def make_admission_purchase(conference, user_object, include_most=False, include_conference=False): ticketing_event = TicketingEventsFactory( conference=conference, include_most=include_most, include_conference=include_conference) purchaser = PurchaserFactory(matched_to_user=user_object) ticket_id = "%s-1111" % (ticketing_event.event_id) ticket = TicketItemFactory(ticket_id=ticket_id, ticketing_event=ticketing_event) transaction = TransactionFactory(ticket_item=ticket, purchaser=purchaser)
def test_get_eb_no_org(self, m_eventbrite): # privileged user gets the inventory of tickets from (fake) EB TicketingEvents.objects.all().delete() BrownPaperSettings.objects.all().delete() event = TicketingEventsFactory() BrownPaperSettingsFactory() EventbriteSettingsFactory(organization_id=None) m_eventbrite.side_effect = [org_dict] response = self.import_tickets() assert_alert_exists( response, 'danger', 'Error', "%s<br>%s - %s" % (org_id_instructions, "547440371489", "GBE Dev"))
def test_get_tickets_for_class(self): '''get one ticket for everything but master, and one for classes ''' event = ClassFactory() ws_ticketing_event = TicketingEventsFactory( conference=event.e_conference, include_most=True, title="The Whole Shebang 2016") sch_ticketing_event = TicketingEventsFactory( conference=event.e_conference, include_conference=True, title="The Scholar 2016") whole_shebang = TicketItemFactory(ticketing_event=ws_ticketing_event, live=True, has_coupon=False) scholar = TicketItemFactory(ticketing_event=sch_ticketing_event, live=True, has_coupon=False) tickets = event.get_tickets() self.assertEqual(len(tickets), 2) self.assertEqual(tickets[0], ws_ticketing_event) self.assertEqual(tickets[1], sch_ticketing_event)
def test_get_tickets_for_show(self): '''just gets 1 ticket for Whole Shebang ''' event = ShowFactory() ticketing_event = TicketingEventsFactory( conference=event.e_conference, include_most=True, title="The Whole Shebang 2016") TicketItemFactory(ticketing_event=ticketing_event, live=True, has_coupon=False) tickets = event.get_tickets() self.assertEqual(len(tickets), 1) self.assertEqual(tickets[0].title, "The Whole Shebang 2016")
def test_get_tickets_for_special_event(self): '''get the one ticket that is active for all except master classes ''' event = GenericEventFactory(type='Special') ticketing_event = TicketingEventsFactory( conference=event.e_conference, include_most=True, title="The Whole Shebang 2016") TicketItemFactory(ticketing_event=ticketing_event, live=True, has_coupon=False) tickets = event.get_tickets() self.assertEqual(len(tickets), 1) self.assertEqual(tickets[0].title, "The Whole Shebang 2016")
def setup_fees(conference, is_act=False, is_vendor=False): PayPalSettingsFactory() event = TicketingEventsFactory(conference=conference, vendor_submission_event=is_vendor, act_submission_event=is_act) if is_vendor: ticket = TicketItemFactory(live=True, ticketing_event=event) add_on = TicketItemFactory(live=True, ticketing_event=event, add_on=True) return [ticket, add_on] if is_act: ticket = TicketItemFactory(live=True, ticketing_event=event, is_minimum=True, cost=10) return [ticket]
def test_get_eb_org_fail(self, m_eventbrite): # privileged user gets the inventory of tickets from (fake) EB TicketingEvents.objects.all().delete() BrownPaperSettings.objects.all().delete() event = TicketingEventsFactory() BrownPaperSettingsFactory() EventbriteSettingsFactory(organization_id=None) m_eventbrite.side_effect = [{ "status_code": 403, "error_description": "Made up error", "error": "NOT_ALLOWED" }] response = self.import_tickets() assert_alert_exists(response, 'danger', 'Error', eventbrite_error % (403, "Made up error"))
def setUp(self): self.client = Client() # Conference Setup conference = ConferenceFactory(accepting_bids=True, status='upcoming') self.ticketing_event = TicketingEventsFactory( conference=conference, act_submission_event=True) self.ticket = TicketItemFactory(ticket_id="%s-1111" % (self.ticketing_event.event_id), ticketing_event=self.ticketing_event, special_comp=True) # User/Human setup self.profile = ProfileFactory() self.privileged_user = ProfileFactory() grant_privilege(self.privileged_user, 'Ticketing - Transactions') self.url = reverse("comp_ticket", urlconf="ticketing.urls")
def test_get_eb_inventory_ticket_fail(self, m_eventbrite): # privileged user gets the inventory of tickets from (fake) EB TicketingEvents.objects.all().delete() BrownPaperSettings.objects.all().delete() event = TicketingEventsFactory() BrownPaperSettingsFactory() EventbriteSettingsFactory() simple_event_dict = copy.deepcopy(event_dict) simple_event_dict['events'] = [event_dict['events'][0]] error_ticket_page = { "status_code": 403, "error_description": "Made up error", "error": "NOT_ALLOWED" } m_eventbrite.side_effect = [simple_event_dict, error_ticket_page] response = self.import_tickets() assert_alert_exists(response, 'danger', 'Error', eventbrite_error % (403, "Made up error"))
def test_transactions_sync_eb_match_prior_purchaser(self, m_eventbrite): TicketingEvents.objects.all().delete() BrownPaperSettings.objects.all().delete() EventbriteSettings.objects.all().delete() BrownPaperSettingsFactory(active_sync=False) EventbriteSettingsFactory() event = TicketingEventsFactory(event_id="1", source=2) ticket = TicketItemFactory(ticketing_event=event, ticket_id='3255985') limbo, created = User.objects.get_or_create(username='******') purchaser = PurchaserFactory(matched_to_user=limbo) user = UserFactory(email=purchaser.email) m_eventbrite.return_value = order_dict login_as(self.privileged_user, self) response = self.client.post(self.url, data={'Sync': 'Sync'}) print(response.content) test_purchaser = Purchaser.objects.get(pk=purchaser.pk) self.assertEqual(test_purchaser.matched_to_user, user)
def test_transactions_sync_eb_w_purchaser(self, m_eventbrite): TicketingEvents.objects.all().delete() BrownPaperSettings.objects.all().delete() EventbriteSettings.objects.all().delete() BrownPaperSettingsFactory() EventbriteSettingsFactory() event = TicketingEventsFactory(event_id="1", source=2) ticket = TicketItemFactory(ticketing_event=event, ticket_id='3255985') purchaser = PurchaserFactory() known_buyer_order = order_dict known_buyer_order['attendees'][0]["profile"]["email"] = purchaser.email m_eventbrite.return_value = known_buyer_order login_as(self.privileged_user, self) response = self.client.post(self.url, data={'Sync': 'Sync'}) assert_alert_exists( response, 'success', 'Success', "%s Transactions imported: %d -- Eventbrite" % (import_transaction_message, 1))
def test_get_tickets_nothing_active(self): '''the ticket is linked to the class and there are two active prices only the most expensive is shown ''' event = ClassFactory() ticketing_event = TicketingEventsFactory(conference=event.e_conference, include_conference=True) TicketItemFactory(ticketing_event=ticketing_event, live=False, has_coupon=False, title="The Whole Shebang 2016") TicketItemFactory(ticketing_event=ticketing_event, live=True, has_coupon=True, cost=299.99, title="The Whole Shebang 2016 - expensive") tickets = event.get_tickets() self.assertEqual(len(tickets), 0)
def test_transactions_sync_eb_bad_auth_token(self, m_eventbrite): TicketingEvents.objects.all().delete() BrownPaperSettings.objects.all().delete() EventbriteSettings.objects.all().delete() BrownPaperSettingsFactory() EventbriteSettingsFactory() event = TicketingEventsFactory(event_id="1", source=2) ticket = TicketItemFactory(ticketing_event=event, ticket_id='3255985') m_eventbrite.side_effect = [{ "status_code": 401, "error_description": "The OAuth token you provided was invalid.", "error": "NOT_AUTH" }] login_as(self.privileged_user, self) response = self.client.post(self.url, data={'Sync': 'Sync'}) assert_alert_exists( response, 'danger', 'Error', eventbrite_error % (401, "The OAuth token you provided was invalid."))