示例#1
0
def index():
    """Данная функция генерирует главную страницу для пользователя

    :return: Главная страница с чатами пользователя, является ли человек \
    в сессии, формой входа(Если человек не зарегистрирован, заголовок чата
    """
    find_chat_form = FindChatForm()
    chat_create_form = CreateChatForm()
    login_form = LoginForm()
    if login_form.validate_on_submit():
        User.login(login_form.login.data)
    if chat_create_form.validate_on_submit():
        name = chat_create_form.name.data
        code_type = chat_create_form.code_type.data
        code = chat_create_form.code.data
        access_key = chat_create_form.access_key.data
        if chat_create_form.is_file_valid():
            code = chat_create_form.file.data.read()
        chat_id = Chat.create(name, code, code_type, access_key)
        return redirect('/chat/' + str(chat_id))
    return render_template('index.html',
                           chats=Chat.find(find_chat_form.chat_title.data),
                           login_form=login_form,
                           chat_create_form=chat_create_form,
                           find_chat_form=find_chat_form,
                           login=User.get_login(),
                           allowed_ex=",".join([
                               '.' + i
                               for i in app.config["ALLOWED_EXTENSIONS"]
                           ]),
                           allowed_languages=app.config["ALLOWED_LANGUAGES"])
示例#2
0
 def __create_mock_chats(self, count):
     db.session.remove()
     db.drop_all()
     db.create_all()
     langs = app.config['ALLOWED_LANGUAGES']
     for i in xrange(count):
         Chat.create('Chat name', 'Chat code', langs[i % len(langs)]['type'])
示例#3
0
 def test_change_chat_name(self):
     new_chat_name = CHAT_NAME * 2
     chat_id = Chat.create(CHAT_NAME, CHAT_CODE, CODE_TYPE, CHAT_ACCESS_KEY)
     chat = Chat.get(chat_id)
     chat.set_name(new_chat_name)
     chat = Chat.get(chat_id)
     self.assertEqual(chat.name, MarkdownMixin.decode(new_chat_name))
示例#4
0
 def test_set_chat_name_return(self):
     new_chat_name = CHAT_NAME * 2
     chat_id = Chat.create(CHAT_NAME, CHAT_CODE, CODE_TYPE, CHAT_ACCESS_KEY)
     chat = Chat.get(chat_id)
     set_chat_name_return = chat.set_name(new_chat_name)
     self.assertIsInstance(set_chat_name_return, dict)
     self.assertEqual(set_chat_name_return.get('original', None), chat.name)
     self.assertNotEqual(set_chat_name_return.get('plain', None), None)
     self.assertNotEqual(set_chat_name_return.get('escaped', None), None)
示例#5
0
 def test_form_required_handler(self):
     chat_id = Chat.create(CHAT_NAME, CHAT_CODE, CODE_TYPE)
     response = self.app.get(MESSAGES_GET_PAGE_URL.format(chat_id=chat_id))
     self.assertEqual(response.status_code, 200)
     response = self.app.get(
         MESSAGES_GET_PAGE_URL.format(chat_id=chat_id + 1))
     self.assertEqual(response.status_code, 400)
示例#6
0
 def test_find_with_page(self):
     CHAT_COUNT = 6
     LIMIT = 5
     PAGE = 2
     self.__create_mock_chats(CHAT_COUNT)
     chats = Chat.find('', limit=LIMIT, page=PAGE)
     self.assertEqual(len(chats), CHAT_COUNT - LIMIT)
示例#7
0
 def test_get_last_messages(self):
     chat = Chat.get(self.chat_id)
     old_message = Message.send(self.chat_id, MESSAGE, MESSAGE_TYPE)
     new_message = Message.send(self.chat_id, MESSAGE, MESSAGE_TYPE)
     got_last_messages = chat.get_last_messages(old_message.id)
     self.assertEqual(len(got_last_messages), 1)
     self.assertEqual(got_last_messages[0].get('id'), new_message.id)
示例#8
0
 def test_get_last_messages(self):
     chat_id = Chat.create(CHAT_NAME, CHAT_CODE, CODE_TYPE)
     last_message = Message.send(chat_id, MESSAGE, MESSAGE_TYPE)
     url = MESSAGES_GET_LAST_PAGE_URL.format(
         chat_id=chat_id, last_message_id=last_message.id)
     response = self.app.get(url)
     self.assertEqual(response.status_code, 200)
示例#9
0
def chat_page(chat_id):
    """Данная функция возвращает пользователю страницу чата по номеру

    :param chat_id: Номер чата
    :return: Страница чата
    """
    chat_create_form = CreateChatForm()
    login_form = LoginForm()
    chat = Chat.get(chat_id)
    if not chat:
        return redirect('/')
    auth_form = AuthChatForm()
    if auth_form.validate_on_submit():
        access_key = auth_form.password.data
        User.set_access_key(chat_id, access_key)
    return render_template(
        'chat.html',
        chat_id=chat.id,
        socket_mode=(app.config['SOCKET_MODE'] == 'True'),
        chat_info=chat.get_info(),
        login=User.get_login(),
        login_form=login_form,
        chat_create_form=chat_create_form,
        have_access=chat.is_access_key_valid(User.get_access_key(chat_id)),
        auth_form=auth_form,
        allowed_ex=",".join(
            ['.' + i for i in app.config["ALLOWED_EXTENSIONS"]]),
        allowed_languages=app.config["ALLOWED_LANGUAGES"])
示例#10
0
 def test_get_all_messages(self):
     second_message = Message.send(self.chat_id, MESSAGE, MESSAGE_TYPE)
     third_message = Message.send(self.chat_id, MESSAGE, MESSAGE_TYPE)
     chat = Chat.get(self.chat_id)
     got_messages = chat.get_last_messages()
     self.assertEqual(len(got_messages), 3)
     self.assertEqual(got_messages[1].get('id'), second_message.id)
     self.assertEqual(got_messages[2].get('id'), third_message.id)
示例#11
0
 def test_access_required_handler(self):
     chat_id = Chat.create(CHAT_NAME, CHAT_CODE, CODE_TYPE, CHAT_ACCESS_KEY)
     self.real.get_access_key.return_value = CHAT_INCORRECT_ACCESS_KEY
     response = self.app.get(MESSAGES_GET_PAGE_URL.format(chat_id=chat_id))
     self.assertEqual(response.status_code, 403)
     self.real.get_access_key.return_value = CHAT_ACCESS_KEY
     response = self.app.get(MESSAGES_GET_PAGE_URL.format(chat_id=chat_id))
     self.assertEqual(response.status_code, 200)
示例#12
0
def set_chat_name():
    """Изменение названия чата

    :return: успешность сохранения названия
    """
    chat_name_form = ChatNameForm()
    chat = Chat.get(chat_name_form.chat.data)
    chat_name = chat.set_name(chat_name_form.name.data)
    return dumps({"success": True, "error": "", "data": chat_name})
示例#13
0
def get_messages():
    """Запрос получения новых сообщений в чате

    :return: Принято ли сообщение
    """
    get_messages_form = GetMessagesForm(request.args)
    chat_id = get_messages_form.chat.data
    last_message_id = get_messages_form.last_message_id.data
    chat = Chat.get(chat_id)
    return dumps(chat.get_last_messages(last_message_id))
示例#14
0
 def test_send_code(self):
     chat_id = Chat.create(CHAT_NAME, CHAT_CODE, CODE_TYPE)
     params = {
         "chat": chat_id,
         "code": CODE,
         "parent": 1,
         "cname": COMMIT_MESSAGE
     }
     response = self.app.post(CODE_SEND_PAGE_URL, data=params)
     self.assertEqual(response.status_code, 200)
示例#15
0
def api_chat_list():
    """Получение списка созданных чатов

    :return: список созданных чатов
    """
    search = request.args.get('search', '')
    limit = int(request.args.get('limit', 0))
    page = int(request.args.get('page', 1))
    chats = Chat.find(search, limit, page)
    data = [chat.to_dict() for chat in chats]
    return jsonify(data)
示例#16
0
 def access_check(*args, **kwargs):
     """Функция возвращает ошибку, если ключ доступа к чату невалиден"""
     if request.method == "POST":
         chat_form = ChatForm()
     else:
         chat_form = ChatForm(request.args)
     chat_id = chat_form.chat.data
     chat = Chat.get(chat_id)
     if chat.is_access_key_valid(User.get_access_key(chat_id)):
         return func(*args, **kwargs)
     return dumps({"success": False, "error": "Access error"}), 403
示例#17
0
def api_create_chat():
    """Данная функция создаёт чат по параметрам, используется для api

    :return: Адрес новой страницы чата
    """
    form = CreateChatForm()
    name = form.name.data
    code = form.code.data
    code_type = form.code_type.data
    access_key = form.access_key.data
    chat_id = Chat.create(name, code, code_type, access_key)
    return '/chat/' + str(chat_id)
示例#18
0
def create_chat():
    user = current_user
    try:
        chat = Chat.from_chat(request.json)
    except KeyError as e:
        return jsonify(f'Missing key: {e.args[0]}'), 400

    db.session.commit()
    chat.users.append(user)

    db.session.add(chat)
    db.session.commit()
    return jsonify(chat.to_chat()), 200
示例#19
0
 def test_access_chat_page(self):
     chat_id = Chat.create(CHAT_NAME, CHAT_CODE, CODE_TYPE)
     chat_page_url = CHAT_PAGE_URL.format(chat_id=chat_id)
     response = self.app.get(chat_page_url)
     self.assertEqual(response.status_code, 200)
示例#20
0
 def test_find_chat_by_name(self):
     search_name = CHAT_NAME[2:-2]
     found_chat_list = Chat.find(search_name)
     self.assertGreaterEqual(len(found_chat_list), 1)
     self.assertIn(search_name, found_chat_list[0].name)
示例#21
0
 def setUp(self):
     BaseTestModel.setUp(self)
     self.chat_id = Chat.create(CHAT_NAME, CHAT_CODE, CODE_TYPE)
     self.message = Message.send(self.chat_id, MESSAGE, MESSAGE_TYPE)
示例#22
0
 def test_find_chat_all(self):
     CHAT_COUNT = 15
     INFINITELY_LIMIT = 0
     self.__create_mock_chats(CHAT_COUNT)
     chats = Chat.find('', limit=INFINITELY_LIMIT)
     self.assertEqual(len(chats), CHAT_COUNT)
示例#23
0
 def test_find_chat_by_id(self):
     search_id = str(self.chat_id)
     found_chat_list = Chat.find(search_id)
     self.assertEqual(len(found_chat_list), 1)
     self.assertEqual(found_chat_list[0].id, int(search_id))
示例#24
0
def chat_required(form, field):
    """Проверка чата на существование"""
    if not Chat.get(field.data):
        raise ValidationError
示例#25
0
 def test_find_with_limit(self):
     CHAT_COUNT = 10
     LIMIT = 5
     self.__create_mock_chats(CHAT_COUNT)
     chats = Chat.find('', limit=LIMIT)
     self.assertEqual(len(chats), LIMIT)
示例#26
0
 def test_get_code(self):
     chat_id = Chat.create(CHAT_NAME, CHAT_CODE, CODE_TYPE)
     code_id = Code.send(chat_id, CODE, 1, COMMIT_MESSAGE)
     response = self.app.get(CODE_GET_PAGE_URL.format(code_id=code_id))
     self.assertEqual(response.status_code, 200)
示例#27
0
 def test_set_chat_name(self):
     chat_id = Chat.create(CHAT_NAME, CHAT_CODE, CODE_TYPE)
     params = {"chat": chat_id, "name": MESSAGE}
     response = self.app.post(SET_CHAT_NAME_PAGE_URL, data=params)
     self.assertEqual(response.status_code, 200)
示例#28
0
 def test_get_tree(self):
     chat_id = Chat.create(CHAT_NAME, CHAT_CODE, CODE_TYPE)
     response = self.app.get(TREE_PAGE_URL.format(chat_id=chat_id))
     self.assertEqual(response.status_code, 200)
示例#29
0
 def test_send_message(self):
     chat_id = Chat.create(CHAT_NAME, CHAT_CODE, CODE_TYPE)
     params = {"chat": chat_id, "message": MESSAGE}
     response = self.app.post(MESSAGE_SEND_PAGE_URL, data=params)
     self.assertEqual(response.status_code, 200)
示例#30
0
 def test_get_messages(self):
     chat_id = Chat.create(CHAT_NAME, CHAT_CODE, CODE_TYPE)
     response = self.app.get(MESSAGES_GET_PAGE_URL.format(chat_id=chat_id))
     self.assertEqual(response.status_code, 200)