Версия:

Тестирование

Система на текущий момент не имеет полного покрытия тестами, и тестирование модулей проводится в процессе разработки.

В рамках разработки проектов с использованием системы вы можете использовать любой подход к тестированию. Ниже описаны инструменты системы, которые могут быть полезны для этого.

API

В первую очередь для тестирования может пригодиться API. Вы можете использовать его как по HTTP(S), так и через подключение по сокету с использованием или без библиотеки go_core_query. Подробнее см. раздел API и go_core_query.

apiSys

Внутри любой функции вы можете использовать apiSys. Это функция, импортируемая из библиотеки api, которая позволяет вызвать любой метод любого класса (в терминологии ядра) от имени системного пользователя.

loginAsUser

Это механизм, позволяющий внутри бэкенда авторизовываться от имени определенного пользователя, получать объект запроса (с его сессией) и далее выполнять любую цепочку действий.

Это позволяет писать функции для, например, End-to-end тестирования, имитируя поведение различных пользователей.

Чтобы получить сессию пользователя, необходимо вызвать User_session.loginAsUser. В целях безопасности вызов этого метода допускается только из методов, определенных в libs/api/apiConfig.

Настройка разрешенных методов

Объект, который необходимо дополнять: grandAccessToLoginAsUserOperation.

Чтобы разрешить новый метод, из которого можно будет вызывать User_session.loginAsUser:

  1. Перейдите в конфигурацию apiConfig для конкретного проекта (libs/api/apiConfig/project.ts).
  2. Найдите объект grandAccessToLoginAsUserOperation_ и дополните его. Это объект, где ключ — имя класса, а значение — массив методов этого класса.

Вы можете создать, например, класс Testing и все методы (точки входа) писать в нем. Пример добавления методов в разрешенные:

export const grandAccessToLoginAsUserOperation_: IGrandAccessToLoginAsUserOperation = {
   Testing: ['testOrderingRoute', 'emulateManyOrders'],
}

reLoginAsUser

Также имеется объект grandAccessToReLoginAsUserOperation, который определяет доступ к методу reLoginAsUser. Этот метод, в отличие от loginAsUser, позволяет именно переключить текущую сессию на сессию определенного пользователя.

Этот механизм может быть использован не только в тестировании, но и в основной бизнес-логике вашего проекта. Например, если часть действий пользователь может делегировать своему менеджеру, такую логику можно реализовать через этот механизм, ограничив список тех, за кого можно переключиться, таблицей “Доверенных лиц”.

Такой сценарий является довольно частым, и многие коммерческие решения не имеют встроенного механизма для его реализации, решая задачу простой передачей логина и пароля другому человеку, что является проблемой безопасности.