Files
public/ruodoo_commission_test_tours

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
==========================================
РуОду — Комиссии агентам: сценарные тесты
==========================================

.. |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

Модуль является частью решения РуОду.