def test_handle(self, bot, test_db, tguser, updater, update, gratitude_states): """Test the handle that collects records from the user.""" with test_database(test_db, [User, Record, Job], fail_silently=True): user, created = User.tg_get_or_create(tguser) user.active_coach = Gratitude.NAME user.state = gratitude_states[0] if user.state == Gratitude.AWAITING_REASONS: # If no gratitude exists, no reaction can be recorded if len(gratitude_states[1]) == 0: return # Last gratitude must always miss the reaction in 2nd state gratitude_states[1][-1].reaction = None with test_db.transaction(): for g in gratitude_states[1]: g.save() user.save() g = Gratitude(bot, test_db, tguser, updater.job_queue) g.handle(update) # Reload from disk g = Gratitude(bot, test_db, tguser, updater.job_queue) user = User.get(User.id == g.user.id) if user.state == Gratitude.AWAITING_GRATITUDE: if len(gratitude_states[1]) < 3: assert len(g.collector) == len(gratitude_states[1]) + 1
def test_get_or_create(self, test_db, tguser): """Test get_or_create shortcut.""" with test_database(test_db, [User], fail_silently=True): user, created = User.tg_get_or_create(tguser) user.save() assert isinstance(user, User) user1 = User.get(User.id == user.id) assert user1 == user
def select(db, tguser): """Return active coach for a telegram user.""" with db.transaction(): user, created = User.tg_get_or_create(tguser) if created: logger.info("Created new user {}".format(user)) return user.active_coach
def test_handle(self, bot, setup_update, test_db, updater): """Test setup handler.""" with test_database(test_db, [User], fail_silently=True): with db.transaction(): user, created = User.tg_get_or_create( setup_update.message.from_user) user.state = setup_update.states[0] user.save() coach = Setup(bot, test_db, setup_update.message.from_user, updater.job_queue) messages = coach.handle(setup_update) user, created = User.tg_get_or_create( setup_update.message.from_user) assert len(messages) > 0 assert user.state == setup_update.states[1]
def test_handle_inline(self, bot, coach_query, test_db, updater): """Test setup handler.""" query = coach_query.callback_query with test_database(test_db, [User], fail_silently=True): with db.transaction(): user, created = User.get_or_create( telegram_id=query.message.from_user.id, name='Pepe', chat_id=query.message.from_user.id) user.state = coach_query.states[0] user.save() coach = Setup(bot, test_db, query.message.from_user, updater.job_queue) messages = coach.handle(coach_query) user = User.get(User.telegram_id == user.telegram_id) assert len(messages) > 0 assert user.state == coach_query.states[1]
def __init__(self, bot, db, tguser, job_queue): """Init coach object.""" self.bot = bot self.db = db self.tguser = tguser self.job_queue = job_queue with db.transaction(): user, created = User.tg_get_or_create(tguser) self.user = user
def test_gen(self, test_db): """Test creating users and retrieving them from the db.""" with test_database(test_db, [User], fail_silently=True): users = create_users(test_db) for u in users: u.save() user = User.get(User.id == users[0].id) assert isinstance(user, User) assert user == users[0]
def create_users(db, num=10): """Utility func for creating users.""" with test_database(db, [User, Record, Job], fail_silently=True): rv = [] for i in range(num): rv.append(User.create_or_get( telegram_id=4325497 + i, name="User-{}".format(i), chat_id=4325497 + i )[0]) return rv
def test_handle(self, bot, menu_update, test_db, tguser, updater): """Test display of main menu.""" with test_database(test_db, [User, Record], fail_silently=True): with db.transaction(): user, created = User.tg_get_or_create(tguser) user.state = menu_update.states[0] user.save() coach = Menu(bot, db, tguser, updater.job_queue) msgs = coach.handle(menu_update) assert len(msgs) > 0
def test_diary_entry(self, bot, test_db, tguser, updater): """Test diary entry from main menu.""" diary_entry = "My secret diary." with test_database(test_db, [User, Record], fail_silently=True): with db.transaction(): user, created = User.tg_get_or_create(tguser) user.state = Menu.AWAITING_DIARY_ENTRY user.save() coach = Menu(bot, db, tguser, updater.job_queue) msgs = coach.handle(custom_update(msg=diary_entry)) assert len(msgs) == 1 rec = Record.get(Record.content == diary_entry) assert isinstance(rec, Record)