CRUD, FBA (FBV)
Для ускорения разработки CRUD операций, удобно использовать готовые функции (По аналогии с CBV в Django). Они находятся в модуле use и называются FBA (Functions Base Actions).
Список элементов на основе шаблона
list_action_example = use.list_action(
Faq,
template_name='demo/bot/list.html',
)
Пример теста
def test_list_action_example(self):
"""
Test /list_action: success
"""
chat = self.assertCommandWasHandled('/list_action', self.chat)
self.assertIn('list_action', chats.get_last_message(chat).text)
Список элементов на основе шаблона с пагинацией
list_action_pagination_example = use.list_action(
Faq,
template_name='demo/bot/list.html',
pagination=use.list.Pagination(1, call_data_pattern='list_action_pagination {page}')
)
Пример теста
def test_list_action_pagination_example(self):
"""
Test /list_action_pagination and call list_action_pagination <int:page>: success
"""
chat = self.assertCommandWasHandled('/list_action_pagination', self.chat)
last_message = chats.get_last_message(chat)
self.assertIn('Как быстрее писать код для списка', last_message.text)
self.assertKeyboardInMessage(last_message)
chat = self.assertCallWasHandled('list_action_pagination 2', self.chat)
last_message = chats.get_last_message(chat)
self.assertIn('Что это дает', last_message.text)
self.assertKeyboardInMessage(last_message)
Один элемент с pk на основе шаблона
detail_action_example = use.detail_action(
Faq,
'demo/bot/detail.html',
)
Пример теста
def test_detail_action_example(self):
"""
Test /detail_action/<int:pk>: success
"""
# make FAQ
chat = self.assertCommandWasHandled('/detail_action 1', self.chat)
last_message = chats.get_last_message(chat)
self.assertIn('detail_action', last_message.text)
self.assertIn('Использовать detail_action', last_message.text)
Сообщение на основе шаблона и контекста
template_action_example = use.template_action(
'demo/bot/reply.html',
context={
'this': 'Это',
'message': 'сообщение',
'make': 'было создано по шаблону'
}
)
Пример теста
def test_template_action_example(self):
"""
Test /template_action: success
"""
chat = self.assertCommandWasHandled('/template_action', self.chat)
self.assertChatLastMessageTextEqual(
chat,
'<b>Это</b> <i>сообщение</i> было создано по шаблону',
)
Опрос на основе формы
def result_callback(bot, message):
form = chats.get_note(message.chat, 'form')
form.is_valid()
data = form.cleaned_data
first_name = data['first_name']
last_name = data['last_name']
middle_name = data['middle_name']
result_text = f'Привет, {first_name} {last_name} {middle_name}'
message_with_text = messages.create_message(result_text, sender=bot)
chat = actions.send_message(message.chat, message_with_text)
return chat
create_action_example = use.create_action(
NameForm,
result_callback,
)
Пример теста
def test_create_action_example(self):
"""
Test /create_action
"""
chat = self.assertCommandWasHandled('/create_action', self.chat)
last_message = self.assertChatLastMessageTextEqual(
chat,
'Как бы вас звали на букву "Л"?:',
)
self.assertKeyboardInMessage(last_message)
chat = self.assertTextMessageWasHandled('Имя', chat)
error_message = chat.messages[-2]
self.assertEqual('Неверно введено имя, пожалуйста введите снова:', error_message.text)
chat = self.assertTextMessageWasHandled('Лорное Имя', chat)
last_message = chats.get_last_message(chat)
self.assertEqual('Какой бы была ваша фамилия на букву "Л"?:', last_message.text)
chat = self.assertTextMessageWasHandled('Фамилия', chat)
error_message = chat.messages[-2]
self.assertEqual('Неверно введена фамилия, пожалуйста введите снова:', error_message.text)
chat = self.assertTextMessageWasHandled('Лорная Фамилия', chat)
last_message = chats.get_last_message(chat)
self.assertEqual('Каким бы было ваше отчество на букву "Л"?:', last_message.text)
chat = self.assertTextMessageWasHandled('Отчество', chat)
error_message = chat.messages[-2]
self.assertEqual('Неверно введено отчество, пожалуйста введите снова:', error_message.text)
chat = self.assertTextMessageWasHandled('Лорное Отчество', chat)
last_message = chats.get_last_message(chat)
self.assertEqual('Привет, Лорное Имя Лорная Фамилия Лорное Отчество', last_message.text)
chat = self.assertCommandWasHandled('/start', chat)
last_message = chats.get_last_message(chat)
self.assertIn('Привет, Я Demo Bot', last_message.text)