def _add_questions(user_id: int, data: Dict) -> str: language_id = get_language_id(data['language'].upper(), 'code') values = generate_questions_values(user_id, language_id, int(data['test_type']), data['questions']) insert_questions(values) return 'Ваши вопросы были успешно добавлены!'
def _update_questions(user_id: int, file: io.BytesIO) -> str: try: data = check_language_test(file, False) except Exception as e: return str(e) else: questions = get_all_questions(user_id) question_ids, missed_questions, upd_questions = [], [], [] for question in data['questions']: _question = normalize_question(question['question']) if _question in questions: question_ids.append(questions[_question]) upd_questions.append(question) else: missed_questions.append(_question) if question_ids: delete_questions(question_ids) language_id = get_language_id(data['language'].upper(), 'code') values = generate_questions_values(user_id, language_id, int(data['test_type']), upd_questions) insert_questions(values) if missed_questions: fmt_missed_questions = '\n'.join( f'{ind}. {val}' for ind, val in enumerate(missed_questions, start=1)) return (f'Были обновлены не все вопросы из вашего списка.\n' f'Список вопросов, которые не были ранее загружены:\n' f'{fmt_missed_questions}') else: return 'Все вопросы были успешно обновлены!'
def test_get_test_types(): result = [ 'Тест по грамматике.', 'Тест по существительным.', ] assert get_test_types('English') == result assert get_test_types(get_language_id('English')) == result
def test_delete_questions(random_language_test): language_id = get_language_id(random_language_test['language'], 'code') values = generate_questions_values(1, language_id, random_language_test['language'], random_language_test['questions']) question = random_language_test['questions'][0]['question'] insert_questions(values) all_questions = get_all_questions(1) delete_questions([ all_questions[question], ]) assert question not in get_all_questions(1)
def _select_language(session: UserSession, message: Optional[str]) -> Answer: if message is None or not is_supported_language(message): current_languages = get_current_languages() keyboard = get_keyboard(current_languages, row_width=1) text = 'Выберите один из доступных языков.' if message is not None: text = f'Вы прислали неподдерживаемый язык.\n{text}' return Answer(text=text, keyboard=keyboard) else: session.language_id = get_language_id(message.strip()) _ush.update_current_step(session) return _ush.handle_session(session)
def test_delete_questions(language_test_file, language_test_creator_session_handler, language_test_creator_session): file, language_test = language_test_file language_id = get_language_id(language_test['language'], 'code') values = generate_questions_values(1, language_id, language_test['language'], language_test['questions']) insert_questions(values) question = language_test['questions'][0]['question'] _session = _update_step(language_test_creator_session, 'delete_questions') _ = language_test_creator_session_handler.handle_session( _session, question) assert question not in get_all_questions(1)
def test_get_language_id(language, key, result): assert get_language_id(language, key) == result