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)
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)
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)
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)
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)
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)