def test_does_not_return_monitor_for_past_event(self): one_second_ago = timezone.now() - timedelta(seconds=1) factories.create_event(datetime_start=one_second_ago) events = event_service.get_events_starting_in_next_twenty_four_hours() self.assertEqual(0, len(events))
def test_does_not_return_monitor_for_event_more_than_twenty_four_hours_from_now( self): twenty_five_hours_from_now = timezone.now() + timedelta(hours=25) factories.create_event(datetime_start=twenty_five_hours_from_now) events = event_service.get_events_starting_in_next_twenty_four_hours() self.assertEqual(0, len(events))
def test_does_not_send_sms_message_if_monitor_status_is_not_activated(self, send_sms_message_mock, _): event = factories.create_event() factories.create_monitor_for_event(event) main() send_sms_message_mock.assert_not_called()
def test_creates_new_event_price(self): event = factories.create_event() event_service.create_event_price_for_event(event, Decimal('60')) self.assertEqual(2, event.prices.count()) self.assertEqual(Decimal('60'), event.current_price.price)
def test_returns_latest_event_price(self): event = factories.create_event() event_service.create_event_price_for_event(event, Decimal('60')) current_price = event.current_price self.assertEqual( EventPrice.objects.filter(event=event).latest(), current_price)
def test_returns_event_starting_in_less_than_twenty_four_hours(self): twenty_three_hours_from_now = timezone.now() + timedelta(hours=23) event = factories.create_event( datetime_start=twenty_three_hours_from_now) events = event_service.get_events_starting_in_next_twenty_four_hours() self.assertEqual(1, len(events)) self.assertIn(event, events)
def test_raises_error_if_status_is_invalid(self): event = factories.create_event() monitor = monitor_service.create_monitor_for_event( event=event, phone_number=factories.VALID_PHONE_NUMBER, amount=Decimal('70')) with self.assertRaises(ValueError): monitor_service.set_status_of_monitor(monitor, 'invalid_status')
def test_returns_latest_monitor_status(self): event = factories.create_event() monitor = factories.create_monitor_for_event(event) current_status = monitor.current_status self.assertEqual( MonitorStatus.objects.filter(monitor=monitor).latest(), current_status)
def test_returns_true_if_created_monitor_exists_for_phone_number(self): event = factories.create_event() phone_number = factories.VALID_PHONE_NUMBER monitor = factories.create_monitor_for_event(event=event, phone_number=phone_number) actual_monitor = monitor_service.get_created_monitor_for_phone_number( phone_number) self.assertEqual(monitor, actual_monitor)
def test_sets_created_status_for_monitor(self): event = factories.create_event() monitor = monitor_service.create_monitor_for_event( event=event, phone_number=factories.VALID_PHONE_NUMBER, amount=Decimal('70')) self.assertEqual(1, monitor.statuses.count()) self.assertEqual(MONITOR_STATUS_CREATED, monitor.current_status.status)
def test_returns_true_if_created_monitor_exists_for_phone_number(self): event = factories.create_event() phone_number = factories.VALID_PHONE_NUMBER factories.create_monitor_for_event(event=event, phone_number=phone_number) self.assertTrue( monitor_service. does_activated_or_created_monitor_exist_for_phone_number( phone_number))
def test_returns_event_with_event_starting_now(self): now = timezone.now() event = factories.create_event(datetime_start=now) with freeze_time(now): events = event_service.get_events_starting_in_next_twenty_four_hours( ) self.assertEqual(1, len(events)) self.assertIn(event, events)
def test_returns_none_if_monitor_exists_for_phone_number_but_does_not_have_activated_status( self): event = factories.create_event() phone_number = factories.VALID_PHONE_NUMBER factories.create_monitor_for_event(event=event, phone_number=phone_number) self.assertIsNone( monitor_service.get_activated_monitor_for_phone_number( phone_number))
def test_deactivates_activated_monitor_of_event_starting_in_next_hour(self, _): event = factories.create_event() monitor = factories.create_monitor_for_event( event=event, amount=Decimal('64.99'), status=MONITOR_STATUS_ACTIVATED ) main() self.assertEqual(MONITOR_STATUS_DEACTIVATED, monitor.current_status.status)
def test_deactivates_triggered_monitor(self, _): event = factories.create_event() monitor = factories.create_monitor_for_event( event=event, amount=Decimal('65.01'), status=MONITOR_STATUS_ACTIVATED ) main() self.assertEqual(MONITOR_STATUS_DEACTIVATED, monitor.current_status.status)
def test_does_not_send_sms_message_if_monitor_event_starts_in_more_than_twenty_four_hours(self, send_sms_message_mock, _): event = factories.create_event() factories.create_monitor_for_event( event=event, amount=Decimal('65.01'), status=MONITOR_STATUS_ACTIVATED ) main() send_sms_message_mock.assert_not_called()
def test_returns_monitors_with_statuses(self): event = factories.create_event() factories.create_monitor_for_event(event=event, status=MONITOR_STATUS_DEACTIVATED) created_monitor = factories.create_monitor_for_event( event=event, status=MONITOR_STATUS_CREATED) created_monitors = Monitor.filter_statuses([MONITOR_STATUS_CREATED]) self.assertEqual(1, len(created_monitors)) self.assertEqual(created_monitor.id, created_monitors[0].id)
def test_does_not_send_sms_message_if_monitor_amount_is_higher_than_event_price(self, send_sms_message_mock, _): event = factories.create_event() factories.create_monitor_for_event( event=event, amount=Decimal('64.99'), status=MONITOR_STATUS_ACTIVATED ) main() send_sms_message_mock.assert_not_called()
def test_returns_existing_event_that_has_seatgeek_event_id(self): event = factories.create_event() mock_seatgeek_event = factories.create_seatgeek_event() with patch( 'impulse.event.services.event_service.search_upcoming_events', return_value=[mock_seatgeek_event]): upcoming_events = event_service.find_or_create_upcoming_events_matching_query( 'query') self.assertEqual(1, len(upcoming_events)) self.assertEqual(event.id, upcoming_events[0].id)
def test_returns_true_if_activated_monitor_exists_for_phone_number(self): event = factories.create_event() phone_number = factories.VALID_PHONE_NUMBER monitor = factories.create_monitor_for_event(event=event, phone_number=phone_number) monitor_service.set_status_of_monitor(monitor, MONITOR_STATUS_ACTIVATED) self.assertTrue( monitor_service. does_activated_or_created_monitor_exist_for_phone_number( phone_number))
def test_raises_error_if_activated_monitor_exists_for_phone_number(self): event = factories.create_event() factories.create_monitor_for_event( event=event, phone_number=factories.VALID_PHONE_NUMBER, status=MONITOR_STATUS_ACTIVATED) with self.assertRaises(ValueError): monitor_service.create_monitor_for_event( event=event, phone_number=factories.VALID_PHONE_NUMBER, amount=Decimal('70'))
def test_returns_true_if_activated_monitor_exists_for_phone_number(self): event = factories.create_event() phone_number = factories.VALID_PHONE_NUMBER monitor = factories.create_monitor_for_event( event=event, phone_number=phone_number, status=MONITOR_STATUS_ACTIVATED) actual_monitor = monitor_service.get_activated_monitor_for_phone_number( phone_number) self.assertEqual(monitor, actual_monitor)
def test_returns_monitor_if_created_monitors_exists_for_multiple_phone_numbers( self): event = factories.create_event() phone_number = factories.VALID_PHONE_NUMBER first_monitor = factories.create_monitor_for_event( event=event, phone_number=phone_number) factories.create_monitor_for_event(event=event, phone_number='+13106172186') actual_monitor = monitor_service.get_created_monitor_for_phone_number( phone_number) self.assertEqual(first_monitor, actual_monitor)
def test_creates_new_monitor_status(self): event = factories.create_event() monitor = monitor_service.create_monitor_for_event( event=event, phone_number=factories.VALID_PHONE_NUMBER, amount=Decimal('70')) monitor_service.set_status_of_monitor(monitor, MONITOR_STATUS_ACTIVATED) self.assertEqual(2, monitor.statuses.count()) self.assertEqual(MONITOR_STATUS_ACTIVATED, monitor.current_status.status)
def test_sends_monitor_confirmation_message(self, send_sms_message_mock): event = factories.create_event() monitor_service.create_monitor_for_event( event=event, phone_number=factories.VALID_PHONE_NUMBER, amount=Decimal('70')) expected_message = OUTGOING_MESSAGE_MONITOR_CONFIRMATION.format( event_title=event.title) send_sms_message_mock.assert_called_once_with( to_phone_number=factories.VALID_PHONE_NUMBER, message=expected_message)
def test_deactivates_monitor_if_deactivate_message_in_body(self): event = factories.create_event() phone_number = factories.VALID_PHONE_NUMBER monitor = factories.create_monitor_for_event(event=event, phone_number=phone_number) form_data = { 'From': phone_number, 'Body': INCOMING_MESSAGE_DEACTIVATE_MONITOR } response = Client().post(self.ENDPOINT, form_data) self.assertEqual(200, response.status_code) self.assertEqual(MONITOR_STATUS_DEACTIVATED, monitor.current_status.status)
def test_creates_new_monitor(self): event = factories.create_event() monitor = monitor_service.create_monitor_for_event( event=event, phone_number=factories.VALID_PHONE_NUMBER, amount=Decimal('70')) self.assertTrue(Monitor.objects.filter(id=monitor.id).exists()) self.assertEqual(Decimal('70'), monitor.amount) self.assertEqual(factories.VALID_PHONE_NUMBER, monitor.phone_number.as_e164) self.assertEqual(event.id, monitor.event_id) self.assertRegexpMatches(monitor.external_id, '^[a-z]{5,10}$')
def test_returns_monitor_if_activated_monitors_exists_for_multiple_phone_numbers( self): event = factories.create_event() phone_number = factories.VALID_PHONE_NUMBER first_monitor = factories.create_monitor_for_event( event=event, phone_number=phone_number, status=MONITOR_STATUS_ACTIVATED) factories.create_monitor_for_event(event=event, phone_number='+13106172186', status=MONITOR_STATUS_ACTIVATED) actual_monitor = monitor_service.get_activated_monitor_for_phone_number( phone_number) self.assertEqual(first_monitor, actual_monitor)
def test_sends_sms_message_if_monitor_amount_is_less_than_event_price(self, send_sms_message_mock, _): event = factories.create_event() monitor = factories.create_monitor_for_event( event=event, amount=Decimal('65.01'), status=MONITOR_STATUS_ACTIVATED ) main() expected_body = OUTGOING_MESSAGE_MONITOR_TRIGGERED.format( event_title=event.title, amount=event.current_price.price, url=event.url ) send_sms_message_mock.assert_called_once_with( to_phone_number=monitor.phone_number.as_e164, message=expected_body )
def test_does_not_raise_error_if_deactivated_monitor_exists_for_phone_number( self): event = factories.create_event() monitor = monitor_service.create_monitor_for_event( event=event, phone_number=factories.VALID_PHONE_NUMBER, amount=Decimal('70')) monitor_service.set_status_of_monitor(monitor, MONITOR_STATUS_DEACTIVATED) try: monitor_service.create_monitor_for_event( event=event, phone_number=factories.VALID_PHONE_NUMBER, amount=Decimal('80')) except ValueError: self.fail( 'create_monitor_for_event should not raise if existing monitors are deactivated' )