def test_remind_one(self, mock_loginfo):
    """Tests that one device should be reminded."""
    self.setup_events()
    self.setup_devices()  # pylint: disable=no-value-for-parameter

    # Remindable.
    self.device1.due_date = _NOW + datetime.timedelta(hours=23)
    self.device1.next_reminder = device_model.Reminder(
        time=_NOW - datetime.timedelta(minutes=1), level=0)
    self.device1.put()

    # Not yet remindable.
    self.device2.due_date = _NOW + datetime.timedelta(hours=25)
    self.device2.next_reminder = device_model.Reminder(
        time=_NOW + datetime.timedelta(hours=2), level=0)
    self.device1.put()
    self.device2.put()

    self.testbed.mock_raiseevent.reset_mock()

    response = self.testapp.get(
        r'/_cron/run_reminder_events?remind_for_devices=true')

    self.assertEqual(response.status_int, 200)
    mock_loginfo.assert_any_call(
        run_reminder_events._DEVICE_REMINDING_NOW_MSG,
        self.device1.identifier, 0)
    self.testbed.mock_raiseevent.assert_called_once_with(
        event_name='reminder_level_0', device=self.device1)
 def test_build_device_message_from_model(self):
     """Test the construction of a device message from a device entity."""
     test_device = device_model.Device(
         serial_number='test_serial_value',
         asset_tag='test_asset_tag_value',
         enrolled=True,
         device_model='test model value',
         due_date=datetime.datetime(year=2018, month=1, day=1),
         last_known_healthy=datetime.datetime(year=2018, month=1, day=2),
         shelf=self.test_shelf_model.key,
         assigned_user='******',
         assignment_date=datetime.datetime(year=2018, month=1, day=3),
         current_ou=constants.ORG_UNIT_DICT['GUEST'],
         ou_changed_date=datetime.datetime(year=2018, month=1, day=4),
         locked=True,
         lost=False,
         mark_pending_return_date=datetime.datetime(year=2018,
                                                    month=1,
                                                    day=5),
         chrome_device_id='device id value',
         last_heartbeat=datetime.datetime(year=2018, month=1, day=6),
         damaged=None,
         damaged_reason='Not damaged',
         last_reminder=device_model.Reminder(level=1),
         next_reminder=device_model.Reminder(level=2),
     ).put().get()
     expected_message = device_messages.Device(
         serial_number='test_serial_value',
         asset_tag='test_asset_tag_value',
         identifier='test_asset_tag_value',
         enrolled=True,
         device_model='test model value',
         due_date=datetime.datetime(year=2018, month=1, day=1),
         last_known_healthy=datetime.datetime(year=2018, month=1, day=2),
         shelf=self.expected_shelf_message,
         assigned_user='******',
         assignment_date=datetime.datetime(year=2018, month=1, day=3),
         current_ou=constants.ORG_UNIT_DICT['GUEST'],
         ou_changed_date=datetime.datetime(year=2018, month=1, day=4),
         locked=True,
         lost=False,
         mark_pending_return_date=datetime.datetime(year=2018,
                                                    month=1,
                                                    day=5),
         chrome_device_id='device id value',
         last_heartbeat=datetime.datetime(year=2018, month=1, day=6),
         damaged=None,
         damaged_reason='Not damaged',
         last_reminder=device_messages.Reminder(level=1),
         next_reminder=device_messages.Reminder(level=2),
         guest_permitted=True,
         guest_enabled=True,
         max_extend_date=device_model.calculate_return_dates(
             test_device.assignment_date).max,
         overdue=True,
     )
     actual_message = api_utils.build_device_message_from_model(
         test_device, True)
     self.assertEqual(actual_message, expected_message)
Example #3
0
  def test_run_success(self, mock_lock):
    device = device_model.Device(
        serial_number='123456', chrome_device_id='123',
        next_reminder=device_model.Reminder(level=0))

    self.action.run(device=device)
    self.assertEqual(mock_lock.call_count, 1)
Example #4
0
  def test_run_success(self, mock_lock):
    device = device_model.Device(
        serial_number='123456', chrome_device_id='123',
        next_reminder=device_model.Reminder(level=0))

    self.action.run(device=device)
    mock_lock.assert_called_with(constants.ADMIN_USERNAME)
Example #5
0
 def test_run_no_event(self):
     device = device_model.Device(  # Raises generic because imported != loaded.
         serial_number='123456',
         next_reminder=device_model.Reminder(level=0))
     self.assertRaisesRegexp(Exception,
                             '.*no ReminderEvent.*',
                             self.action.run,
                             device=device)
Example #6
0
 def test_build_reminder_message_from_model(
     self, test_level, test_datetime, test_count):
   """Test the construction of a reminder message from a reminder entity."""
   test_reminder = device_model.Reminder(
       level=test_level, time=test_datetime, count=test_count).put().get()
   expected_message = device_messages.Reminder(
       level=test_level, time=test_datetime, count=test_count)
   returned_message = api_utils.build_reminder_message_from_model(
       test_reminder)
   self.assertEqual(returned_message, expected_message)
Example #7
0
    def test_run_success(self, mock_sendemail):
        device = device_model.Device(
            serial_number='123456',
            chrome_device_id='123',
            next_reminder=device_model.Reminder(level=0))
        reminder_event = event_models.ReminderEvent.create(0)
        reminder_event.template = 'fake_template_name'
        self.assertFalse(device.last_reminder)

        self.action.run(device=device)
        mock_sendemail.assert_called_with(device, 'fake_template_name')
        device = device.key.get()
        self.assertTrue(device.last_reminder)
    def test_reminded_no_repeat(self):
        """Tests that a device that was already reminded is not done again."""
        self.setup_events()
        self.setup_devices()  # pylint: disable=no-value-for-parameter

        # Device reminded an hour ago, and repeats not allowed.
        self.device1.due_date = _NOW + datetime.timedelta(hours=23)
        self.device1.last_reminder = device_model.Reminder(
            time=_NOW - datetime.timedelta(minutes=60), level=0)
        self.device1.put()

        self.testbed.mock_raiseevent.reset_mock()

        self.testapp.get(r'/_cron/run_reminder_events?remind_for_devices=true')
        retrieved_device1 = self.device1.key.get()
        self.assertEqual(retrieved_device1.next_reminder, None)
        self.assertFalse(self.testbed.mock_raiseevent.called)
  def test_device_marked_returned(self, mock_loginfo):
    """Tests that a marked returned device is not reminded."""
    self.setup_events()
    self.setup_devices()  # pylint: disable=no-value-for-parameter

    self.device1.due_date = _NOW + datetime.timedelta(hours=23)
    self.device1.next_reminder = device_model.Reminder(
        time=_NOW - datetime.timedelta(minutes=1), level=0)
    self.device1.mark_pending_return_date = datetime.datetime.utcnow()
    self.device1.put()
    self.testbed.mock_raiseevent.reset_mock()

    self.testapp.get(
        r'/_cron/run_reminder_events?find_remindable_devices=true')
    mock_loginfo.assert_any_call(
        run_reminder_events._DEVICE_MARKED_RETURNED_MSG,
        self.device1.identifier, 0)
    self.assertFalse(self.testbed.mock_raiseevent.called)
    def test_run_success(self, config_return, send_email_call_count):
        device = device_model.Device(
            serial_number='123456',
            chrome_device_id='123',
            next_reminder=device_model.Reminder(level=0))
        with mock.patch.object(config_model.Config,
                               'get',
                               return_value=config_return):
            with mock.patch.object(send_email,
                                   'send_user_email') as mock_sendemail:
                event_models.ReminderEvent.create(0)
                self.assertFalse(device.last_reminder)

                self.action.run(device=device)
                device = device.key.get()
                self.assertTrue(device.last_reminder)
                self.assertEqual(mock_sendemail.call_count,
                                 send_email_call_count)
  def test_reminded_too_early_for_repeat(self, mock_loginfo):
    """Tests that a device that was already reminded is still waiting."""
    self.setup_events()
    self.setup_devices()  # pylint: disable=no-value-for-parameter

    # Device reminded an hour ago, and repeats allowed, but it's early yet.
    self.device1.due_date = _NOW + datetime.timedelta(hours=23)
    self.device1.last_reminder = device_model.Reminder(
        time=_NOW - datetime.timedelta(minutes=60), level=0)
    self.device1.put()
    self.reminder_due_event.interval = 1
    self.reminder_due_event.repeat_interval = True
    self.reminder_due_event.put()
    self.testbed.mock_raiseevent.reset_mock()

    self.testapp.get(
        r'/_cron/run_reminder_events?find_remindable_devices=true')
    mock_loginfo.assert_any_call(
        run_reminder_events._DEVICE_REPEAT_WAITING_MSG,
        self.device1.identifier, 0)
    self.assertFalse(self.testbed.mock_raiseevent.called)