Beispiel #1
0
 def test_create_timedelta(self):
     self.assertRaises(event_models.BadTimeUnitError,
                       event_models.create_timedelta, 5, 'y')  # No years.
     self.assertEqual(event_models.create_timedelta(2, 'h'),
                      datetime.timedelta(seconds=2 * 3600))
     self.assertEqual(event_models.create_timedelta(3, 'd'),
                      datetime.timedelta(seconds=3 * 86400))
     self.assertEqual(event_models.create_timedelta(4, 'w'),
                      datetime.timedelta(seconds=4 * 604800))
Beispiel #2
0
  def test_build_query_components(self):
    """Tests building a simple query and one with two inequality filters."""
    self.setup_events()

    query_components1 = self.device_event._build_query_components()
    self.assertEqual(query_components1['less_than_properties'], ['due_date'])
    self.assertEqual(query_components1['extra_inequality_conditions'], [])
    self.assertLen(
        query_components1['query'].filters._ConjunctionNode__nodes, 3)

    # Add another inequality filter that uses <. Propery name hould be added to
    # less_than_properties, condition should be added to
    # extra_inequality_filters, and the core query should be identical.
    self.device_event.conditions.append(
        event_models.CustomEventCondition(
            name='last_heartbeat', opsymbol='<',
            value=event_models.create_timedelta(-5, 'd')))
    query_components2 = self.device_event._build_query_components()
    self.assertListEqual(
        query_components2['less_than_properties'],
        ['due_date', 'last_heartbeat'])
    self.assertEqual(
        query_components2['extra_inequality_conditions'],
        [self.device_event.conditions[3]])
    self.assertLen(
        query_components2['query'].filters._ConjunctionNode__nodes, 3)
Beispiel #3
0
    def test_get_and_put(self):
        self.assertEqual(event_models.ReminderEvent.get(0), None)
        test_event = event_models.ReminderEvent.create(0)

        self.assertEqual(test_event.level, 0)  # Tests @property taken from ID.
        self.assertEqual(test_event.model, 'Device')
        self.assertEqual(test_event.name, 'reminder_level_0')
        self.assertEqual(event_models.ReminderEvent.make_name(0),
                         'reminder_level_0')

        test_event.description = 'Device is due soon.'
        tomorrow = event_models.create_timedelta(1, 'd')
        test_event.conditions = [
            event_models.CustomEventCondition(name='due_date',
                                              opsymbol='<',
                                              value=tomorrow),
            event_models.CustomEventCondition(name='locked',
                                              opsymbol='=',
                                              value=False),
            event_models.CustomEventCondition(name='lost',
                                              opsymbol='=',
                                              value=False)
        ]
        test_event.template = 'reminder_due'
        test_event.put()

        self.assertEqual(test_event, event_models.ReminderEvent.get(0))
Beispiel #4
0
    def setup_events(self):
        """Creates test events."""
        self.device_event = event_models.CustomEvent.create('device_event')
        self.device_event.description = 'This is the device event.'
        self.device_event.model = 'Device'
        self.device_event.conditions = [
            event_models.CustomEventCondition(
                name='due_date',
                opsymbol='<',
                value=event_models.create_timedelta(1, 'd')),
            event_models.CustomEventCondition(name='locked',
                                              opsymbol='=',
                                              value=False),
            event_models.CustomEventCondition(name='lost',
                                              opsymbol='=',
                                              value=False)
        ]
        self.device_event.actions = ['DO_THING1', 'DO_THING2', 'DO_THING3']
        self.device_event.put()

        self.shelf_event1 = event_models.CustomEvent.create('shelf_event_1')
        self.shelf_event1.description = 'This is the first shelf event.'
        self.shelf_event1.model = 'Shelf'
        self.shelf_event1.conditions = [
            event_models.CustomEventCondition(name='last_audit_time',
                                              opsymbol='<',
                                              value=_THREE_DAYS_AGO_DELTA),
            event_models.CustomEventCondition(name='enabled',
                                              opsymbol='=',
                                              value=True)
        ]
        self.shelf_event1.actions = ['DO_THING4', 'DO_THING5', 'DO_THING6']
        self.shelf_event1.put()

        self.shelf_event2 = event_models.CustomEvent.create('shelf_event_2')
        self.shelf_event2.description = 'This is the second shelf event.'
        self.shelf_event2.model = 'Shelf'
        self.shelf_event2.conditions = [
            event_models.CustomEventCondition(name='last_audit_time',
                                              opsymbol='<',
                                              value=_THREE_DAYS_AGO_DELTA),
            event_models.CustomEventCondition(name='enabled',
                                              opsymbol='=',
                                              value=True),
            event_models.CustomEventCondition(name='capacity',
                                              opsymbol='=',
                                              value=24),
        ]
        self.shelf_event2.actions = ['DO_THING7', 'DO_THING8', 'DO_THING9']
        self.shelf_event2.put()
 def setup_events(self):
   tomorrow_delta = event_models.create_timedelta(1, 'd')
   self.reminder_due_event = event_models.ReminderEvent.create(0)
   self.reminder_due_event.description = 'Device due in less than one day.'
   self.reminder_due_event.conditions = [
       event_models.CustomEventCondition(
           name='due_date', opsymbol='<', value=tomorrow_delta),
       event_models.CustomEventCondition(
           name='due_date', opsymbol='>', value=datetime.timedelta(seconds=0)),
       event_models.CustomEventCondition(
           name='locked', opsymbol='=', value=False),
       event_models.CustomEventCondition(
           name='lost', opsymbol='=', value=False)
   ]
   self.reminder_due_event.actions = ['DO_THING1', 'DO_THING2', 'DO_THING3']
   self.reminder_due_event.put()
Beispiel #6
0
def _interpret_time(value):
    """Interprets a string from a YAML query condition for a time-related value.

  This turns a string like 'TIME:-3d' into a datetime.timedelta three days ago.

  Args:
    value: str, a value from datastore. If the passed value is not a string,
        this method returns it as originally passed.

  Returns:
    The original value, or an interpreted one as a datetime.timedelta.
  """
    if isinstance(value, basestring):
        match = _TIME_RE.match(value)
        if match:
            qty = int(match.group(1))
            unit = match.group(2)
            return event_models.create_timedelta(qty, unit)
    return value
  def test_null_due_dates(self, mock_loginfo):
    """Tests with events and devices, but due_date for both devices are null."""
    self.setup_devices()  # pylint: disable=no-value-for-parameter
    tomorrow_delta = event_models.create_timedelta(1, 'd')
    simple_reminder_due_event = event_models.ReminderEvent.create(0)
    simple_reminder_due_event.description = 'Due date-based event.'
    simple_reminder_due_event.conditions = [
        event_models.CustomEventCondition(
            name='due_date', opsymbol='<', value=tomorrow_delta)]
    simple_reminder_due_event.put()
    self.testbed.mock_raiseevent.reset_mock()

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

    self.assertEqual(response.status_int, 200)
    retrieved_device1 = self.device1.key.get()
    retrieved_device2 = self.device2.key.get()

    self.assertIsNone(retrieved_device1.next_reminder)
    self.assertIsNone(retrieved_device2.next_reminder)
Beispiel #8
0
import datetime
from absl import logging
import mock

from google.appengine.api import datastore_errors
from google.appengine.ext import ndb

from loaner.web_app.backend.clients import directory
from loaner.web_app.backend.models import device_model
from loaner.web_app.backend.models import event_models
from loaner.web_app.backend.models import shelf_model
from loaner.web_app.backend.testing import loanertest

_NOW = datetime.datetime.utcnow()
_THREE_DAYS_AGO_DELTA = event_models.create_timedelta(-3, 'd')


class CoreEventTest(loanertest.TestCase):
  """Tests for CoreEvent class."""

  def test_core_event(self):
    self.assertEqual(event_models.CoreEvent.get('foo'), None)

    test_event = event_models.CoreEvent.create(
        'test_core_event', 'Happens when a thing has occurred.')
    test_event.actions = ['do_thing1', 'do_thing2', 'do_thing3']
    test_event.put()

    fetched_event = event_models.CoreEvent.get('test_core_event')
    self.assertEqual(test_event, fetched_event)