def process_cakeday_message(message, reddit, database): log.info("Processing cakeday") if database.user_has_cakeday_reminder(message.author.name): log.info("Cakeday already exists") return ["It looks like you already have a cakeday reminder set." ], False next_anniversary = utils.get_next_anniversary(message.author.created_utc) reminder = Reminder(source=utils.message_link(message.id), message=static.CAKEDAY_MESSAGE, user=database.get_or_add_user(message.author.name), requested_date=utils.datetime_from_timestamp( message.created_utc), target_date=next_anniversary, recurrence="1 year", defaulted=False) database.add_reminder(reminder) database.commit() log.info( f"Cakeday reminder created: {reminder.id} : {utils.get_datetime_string(reminder.target_date)}" ) bldr = reminder.render_message_confirmation( None, pushshift_minutes=reddit.get_effective_pushshift_lag()) return [''.join(bldr)], True
def process_remind_me(message, reddit, database, recurring): log.info("Processing RemindMe message") trigger = static.TRIGGER_RECURRING_LOWER if recurring else static.TRIGGER_LOWER time = utils.find_reminder_time(message.body, trigger) message_text = utils.find_reminder_message(message.body, trigger) reminder, result_message = Reminder.build_reminder( source=utils.message_link(message.id), message=message_text, user=database.get_or_add_user(message.author.name), requested_date=utils.datetime_from_timestamp(message.created_utc), time_string=time, recurring=recurring) if reminder is None: log.debug("Reminder not valid, returning") return [result_message], False database.add_reminder(reminder) database.commit() log.info( f"Reminder created: {reminder.id} : {utils.get_datetime_string(reminder.target_date)}" ) bldr = reminder.render_message_confirmation( result_message, pushshift_minutes=reddit.get_effective_pushshift_lag()) return [''.join(bldr)], True
def test_add_reminder(database, reddit): created = utils.datetime_now() username = "******" keyword = "reminderstring" id = utils.random_id() message = reddit_test.RedditObject( body=f"[{keyword}]\n{static.TRIGGER}! 1 day", author=username, created=created, id=id) messages.process_message(message, reddit, database) result = message.get_first_child().body assert "reminderstring" in result assert "This time has already passed" not in result assert "Could not find a time in message" not in result assert "Could not parse date" not in result reminders = database.get_user_reminders(username) assert len(reminders) == 1 assert reminders[0].user == username assert reminders[0].message == keyword assert reminders[0].source == utils.message_link(id) assert reminders[0].requested_date == created assert reminders[0].target_date == created + timedelta(hours=24) assert reminders[0].db_id is not None
def test_add_recurring_reminder(database, reddit): created = utils.datetime_now() username = "******" keyword = "reminderstring" id = reddit_test.random_id() message = reddit_test.RedditObject( body=f"[{keyword}]\n{static.TRIGGER_RECURRING}! 1 day", author=username, created=created, id=id) messages.process_message(message, reddit, database) result = message.get_first_child().body assert "reminderstring" in result assert "and then every `1 day`" in result assert "This time has already passed" not in result assert "Could not find a time in message" not in result assert "Could not parse date" not in result assert "Can't use a default for a recurring reminder" not in result assert "I got the same date rather than one after it" not in result assert "I got a date before that rather than one after it" not in result reminders = database.get_all_user_reminders(username) assert len(reminders) == 1 assert reminders[0].user.name == username assert reminders[0].message == keyword assert reminders[0].source == utils.message_link(id) assert reminders[0].requested_date == created assert reminders[0].target_date == created + timedelta(hours=24) assert reminders[0].id is not None assert reminders[0].recurrence == "1 day"
def process_remind_me(message, database): log.info("Processing RemindMe message") time = utils.find_reminder_time(message.body) message_text = utils.find_reminder_message(message.body) reminder = Reminder( source=utils.message_link(message.id), message=message_text, user=message.author.name, requested_date=utils.datetime_from_timestamp(message.created_utc), time_string=time, timezone=database.get_settings(message.author.name).timezone) if not reminder.valid: log.debug("Reminder not valid, returning") return [reminder.result_message] if not database.save_reminder(reminder): log.info("Something went wrong saving the reminder") return ["Something went wrong saving the reminder"] log.info( f"Reminder created: {reminder.db_id} : {utils.get_datetime_string(reminder.target_date)}" ) return reminder.render_message_confirmation()
def test_add_reminder_no_date(database, reddit): created = utils.datetime_now() username = "******" id = reddit_test.random_id() message = reddit_test.RedditObject( body=f"{static.TRIGGER}! \"error test\"", author=username, created=created, id=id) messages.process_message(message, reddit, database) result = message.get_first_child().body assert "This time has already passed" not in result assert "Could not find a time in message, defaulting to one day" in result reminders = database.get_all_user_reminders(username) assert len(reminders) == 1 assert reminders[0].user.name == username assert reminders[0].message == "error test" assert reminders[0].source == utils.message_link(id) assert reminders[0].requested_date == created assert reminders[0].target_date == created + timedelta(hours=24) assert reminders[0].id is not None