Ejemplo n.º 1
0
    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))
Ejemplo n.º 2
0
    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))
Ejemplo n.º 3
0
    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()
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
    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')
Ejemplo n.º 8
0
    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)
Ejemplo n.º 9
0
    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)
Ejemplo n.º 10
0
    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)
Ejemplo n.º 11
0
    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))
Ejemplo n.º 12
0
    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)
Ejemplo n.º 13
0
    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))
Ejemplo n.º 14
0
    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)
Ejemplo n.º 15
0
    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)
Ejemplo n.º 16
0
    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()
Ejemplo n.º 17
0
    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)
Ejemplo n.º 18
0
    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()
Ejemplo n.º 19
0
    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)
Ejemplo n.º 20
0
    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))
Ejemplo n.º 21
0
    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'))
Ejemplo n.º 22
0
    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)
Ejemplo n.º 23
0
    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)
Ejemplo n.º 24
0
    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)
Ejemplo n.º 25
0
    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)
Ejemplo n.º 26
0
    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)
Ejemplo n.º 27
0
    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}$')
Ejemplo n.º 28
0
    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)
Ejemplo n.º 29
0
    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
        )
Ejemplo n.º 30
0
    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'
            )