Esempio n. 1
0
 async def test_send_missing_data(self):
   """In this test, the user uses neither email, telegram or sms."""
   user_id = self.db.add_user_to_icu(
     self.admin, self.icu.icu_id, store.User(name='user1')
   )
   user = self.db.get_user(user_id)
   msg = message.Message(self.icu, user, 'some_url')
   self.assertFalse(await self.sender.send(msg, user))
Esempio n. 2
0
 def messages(self):
   """For debug purpose only"""
   users = self.db.get_users()
   result = []
   for user in users:
     for icu in user.icus:
       url = self.updater.get_user_url(user, icu.icu_id)
       result.append(message.Message(icu, user, url))
   return result
Esempio n. 3
0
  def schedule(self, user, icu, delay: Optional[int] = None) -> bool:
    user_icus = {i.icu_id: i for i in user.icus}
    if not user.is_active or not icu.is_active or icu.icu_id not in user_icus:
      user_id, icu_id = user.user_id, icu.icu_id
      logging.info(f'Cannot send message to user {user_id} in icu {icu_id}')
      return False

    url = self.updater.get_user_url(user, icu.icu_id)
    msg = message.Message(icu, user, url)
    return self.schedule_message(msg, delay)
Esempio n. 4
0
 def test_format(self):
     url = 'some url'
     msg = message.Message(self.icu, self.user, url)
     self.formatter.format(msg)
     self.assertNotEmpty(msg.text)
     self.assertNotEmpty(msg.html)
     to_be_tested = itertools.product([url, self.user.name, self.icu.name],
                                      [msg.text, msg.html])
     for item, text in to_be_tested:
         self.assertContainsSubsequence(text, item)
Esempio n. 5
0
    def test_schedule_message(self):
        msg = message.Message(self.icu, self.user, url='url')
        self.assertEqual(len(self.scheduler.timeouts), 0)
        delay = 100
        success = self.scheduler.schedule_message(msg, delay=delay)
        self.assertTrue(success)
        self.assertEqual(len(self.scheduler.timeouts), 1)
        key = self.user_id, self.icu_id
        timeout = self.scheduler.timeouts.get(key, None)
        self.assertIsNotNone(timeout)
        self.assertTrue(timeout.when, fake_now + delay)

        # another message with smaller delay: in
        offset = -2
        success = self.scheduler.schedule_message(msg, delay=delay + offset)
        self.assertTrue(success)
        timeout = self.scheduler.timeouts.get(key, None)
        self.assertIsNotNone(timeout)
        self.assertTrue(timeout.when, fake_now + delay + offset)

        # another message with negative delay
        success = self.scheduler.schedule_message(msg, delay=-1)
        self.assertFalse(success)

        # Another user same icu: another entry
        user = store.User(name='jacqueline', telephone='12333')
        userid = self.db.add_user_to_icu(self.admin, self.icu_id, user)
        user = self.db.get_user(userid)
        offset = 100
        msg2 = message.Message(self.icu, user, url='url')
        success = self.scheduler.schedule_message(msg2, delay=delay + offset)
        self.assertTrue(success)
        self.assertEqual(len(self.scheduler.timeouts), 2)

        # Same user new icu: new entry
        icuid = self.db.add_icu(self.admin, store.ICU(name='anothericu'))
        self.db.assign_user_to_icu(self.admin, userid, icuid)
        icu = self.db.get_icu(icuid)
        msg3 = message.Message(icu, user, url='url')
        success = self.scheduler.schedule_message(msg3, delay=delay + offset)
        self.assertTrue(success)
        self.assertEqual(len(self.scheduler.timeouts), 3)
Esempio n. 6
0
 async def test_do_send(self):
     msg = message.Message(self.icu, self.user, url='url')
     await self.scheduler.do_send(msg)
     # response = self.wait()
     self.assertEqual(len(self.queue.data), 1)
     self.assertEqual(msg.first_sent, fake_now)
     self.assertEqual(msg.attempts, 1)
     self.assertEqual(len(self.scheduler.timeouts), 1)
     timeout = self.scheduler.timeouts.get(msg.key, None)
     self.assertIsNotNone(timeout)
     self.assertEqual(timeout.when,
                      self.scheduler.reminder_delay + fake_now)
Esempio n. 7
0
 async def test_send_bot(self):
   """In this test, the user uses neither email, telegram or sms."""
   user_id = self.db.add_user_to_icu(
     self.admin, self.icu.icu_id,
     store.User(name='user1', telegram_chat_id='65451')
   )
   user = self.db.get_user(user_id)
   url = 'some_url'
   msg = message.Message(self.icu, user, url)
   self.assertTrue(await self.sender.send(msg, user))
   self.assertGreater(len(self.bot.client.requests), 0)
   self.assertIn(url, self.bot.client.requests[-1].body.decode())
Esempio n. 8
0
 def build_messages(self):
     """Build the messages to be sent to each user depending on its ICU."""
     users_df = self.db.get_users()
     self.messages = []
     for index, row in users_df.iterrows():
         url = "{}{}?id={}".format(
             self.base_url, update.UpdateHandler.ROUTE.strip('/'),
             self.token_encoder.encode_icu(row.icu_id, row.icu_name))
         text = self.MESSAGE_TEMPLATE.format(row['name'], row['icu_name'],
                                             url)
         self.urls.append(f'{row.icu_name}: {url}')
         self.messages.append(
             message.Message(text, row.telephone, row.icu_id, row.icu_name))
Esempio n. 9
0
 async def test_send_email(self):
   """In this test, the user uses neither email, telegram or sms."""
   user_id = self.db.add_user_to_icu(
     self.admin, self.icu.icu_id,
     store.User(name='user1', email='*****@*****.**')
   )
   # Reset the sender allowing SMTP
   self.config.SMTP_HOST = 'some_host'
   self.sender = sender.Sender(
     self.config, self.db, self.queue, tg_bot=self.bot
   )
   user = self.db.get_user(user_id)
   msg = message.Message(self.icu, user, 'some_url')
   self.assertTrue(await self.sender.send(msg, user))