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> было создано по шаблону',
        )