==========================================
РуОду — Комиссии агентам: сценарные тесты
==========================================
.. |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 <test_db> -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
Модуль является частью решения РуОду.