========================================== РуОду — Комиссии агентам: сценарные тесты ========================================== .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status :alt: Beta .. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html :alt: License: LGPL-3 |badge1| |badge2| Сквозной функциональный тест модуля ``ruodoo_commission`` на штатном механизме туров Odoo (``web_tour`` + ``HttpCase.start_tour``, headless Chrome). Тест имитирует работу пользователя через интерфейс и после каждого этапа проверяет результат по данным в БД (ORM), а не только по экрану. Предназначен для запуска перед релизом: падает, если бизнес- процесс комиссий сломан. Только для тестирования — модуль не несёт бизнес-логики. **Содержание** .. contents:: :local: Что проверяется =============== Один тестовый метод (``test_commission_full_flow``) последовательно запускает три тура под пользователем «продавец + начисляет комиссии»: #. **Заказ и начисление** (``ruodoo_commission_order_tour``): создать заказ, выбрать клиента, добавить строку (товар, количество), выбрать две комиссии в колонке «Комиссии», сохранить, подтвердить, нажать «Начислить комиссию». #. **Смарт-кнопка** (``ruodoo_commission_smart_button_tour``): открыть заказ, нажать смарт-кнопку «Комиссии», увидеть список сформированных счетов поставщика. #. **Отмена** (``ruodoo_commission_cancel_tour``): отменить заказ через интерфейс. Проверки по БД между турами: * заказ подтверждён; в строке один товар, количество 10, две комиссии; * сумма комиссий строки и «ИТОГО КОМИССИЙ» заказа совпадают (150); * комиссии не входят в итог заказа (``amount_total`` = 1000); * сформированы два счёта поставщика (по числу получателей), оба проведены; суммы (100 и 50) совпадают с суммами комиссий; * журнал и счёт расходов в счетах — из настроек комиссии; * счётчик смарт-кнопки равен 2; * после отмены заказ в состоянии «Отменён», счета комиссий удалены. Зависимости =========== * ``ruodoo_commission`` — тестируемый модуль * ``sale_management`` — заказы на продажу (UI-сценарий) * ``account`` — счета поставщика Требования окружения ==================== Туры выполняются в headless-браузере, поэтому в окружении нужны: * **Chrome/Chromium** (Odoo ищет ``google-chrome`` / ``chromium`` в ``PATH``; путь можно задать переменной ``ODOO_BROWSER_BIN``); * Python-пакет **websocket-client** (иначе тур-тест будет пропущен). .. note:: Если браузер или ``websocket-client`` недоступны, Odoo помечает тест как *skipped*. Пропуск не является успехом — для достоверного прогона перед релизом обеспечьте оба компонента (например, в ``Dockerfile`` образа Odoo). Запуск ====== :: odoo -d -i ruodoo_commission_test_tours \ --test-enable --test-tags=/ruodoo_commission_test_tours \ --stop-after-init Полезные опции: ``--screenshots=/tmp/commission_tours`` для скриншотов при падении; ``ODOO_BROWSER_BIN=/path/to/chrome`` — явный путь к браузеру. Как это устроено ================ * Туры (``static/tests/tours/*.js``) подключены как ассеты в ``web.assets_tests`` и зарегистрированы в ``registry.category("web_tour.tours")``. * Селекторы — стабильные: по ``name`` полей/кнопок (``button[name=action_accrue_commission]``, ``.o_field_many2many_tags[name=commission_ids]``), семантическим классам Odoo и ``:contains`` только для данных, созданных тестом («Tour Customer», «Tour Commission …»). * Данные (клиент, товар без налогов, два вида комиссий с журналом, счётом расходов и партнёрами-получателями, пользователь с группами) создаются в ``setUpClass`` через ORM. ORM используется только для подготовки и проверок; действия сценария выполняются в UI. Авторы ====== * MK.Lab, RuOdoo Модуль сопровождается MK.Lab, RuOdoo. .. image:: https://ruodoo.ru/logo.png :alt: MK.Lab, RuOdoo :target: https://ruodoo.ru Модуль является частью решения РуОду.