Skip to content

intervolga/intervolga.edu

Repository files navigation

Концепция

Модуль проверяет код текущего сайта по заданиям Академии 1С-Битрикс. Отчет генерируется в реальном времени на странице настроек модуля /bitrix/admin/settings.php?lang=ru&mid=intervolga.edu

  1. 1 курс = 1 папка с уроками = 1 пространство имен (напр Intervolga\Edu\Tests\Course1)
  2. 1 урок = 1 папка с тестами = 1 пространство имен (напр Intervolga\Edu\Tests\Course1\Lesson1)
  3. 1 тест = 1 файл = 1 класс-наследник Intervolga\Edu\Tests\BaseTest

Каждый тест должен проверять что-то одно. Это значит, что тестов будет много.

"Душа" теста — метод run(). Именно этот метод вызывает модуль для проверки. Метод ничего не возвращает. Он должен либо завершиться, либо выдать исключение \Intervolga\Edu\Exceptions\AssertException. Исключения \Intervolga\Edu\Exceptions\AssertException генерируются классом \Intervolga\Edu\Asserts\Assert и его наследниками.

Другие классы и пространства имен

В пространстве Intervolga\Edu\Util вспомогательные классы для работы с файлами, папками, инфоблокам, меню, настройками БУС и т.д.

В пространстве Intervolga\Edu\Locator сущности (файлы, папки, инфоблоки и т.п.) которые нужно создавать в рамках Академии, но точное название которых заранее не известно. Чтобы найти их, нужно вызвать метод find().

В пространстве Intervolga\Edu\FilesTree классы для деревьев файлов. Например, любой шаблон bitix:news имеет определенную структуру — она и будет описана в таком классе.

Класс \Intervolga\Edu\Tester знает все тесты.

Как создавать новые тесты

  1. Создать новый класс-наследник Intervolga\Edu\Tests\BaseTest в правильном курсе и уроке
  2. Внести название курса, урока, теста в языковые переменные (все лежат скопом в lang/ru/include.php)
    1. Ключи должны иметь вид: INTERVOLGA_EDU.COURSE#X# для курса #X#
    2. INTERVOLGA_EDU.COURSE#X#_LESSON#Y# для урока #Y#
    3. INTERVOLGA_EDU.COURSE#X#_LESSON#Y#_#TEST# для урока #TEST#, где #TEST# должен равняться имени класса без префикса TEST (например название для теста \Intervolga\Edu\Tests\Course1\Lesson1\TestLicense будет автоматически искаться по ключу INTERVOLGA_EDU.COURSE1_LESSON1_SITECORPORATEMODULE)
    4. INTERVOLGA_EDU.COURSE#X#_LESSON#Y#_#TEST#_DESCRIPTION для описания урока #TEST#
  3. Переопределить run()
  4. В нем получить нужные данные и вызвать соответствующую проверку класса Assert
  5. Внести класс в \Intervolga\Edu\Tester::getTestClasses

Особые виды тестов

Есть особые правила для тестов Инфоблоков, кода и шаблонов компонентов

Тест кода

  1. Класс должен быть наследником \Intervolga\Edu\Tests\BaseTestCode
  2. Метод getFilesToTestCode должен возвращать массив php-файлов для проверки
  3. lang-переменная нужна только INTERVOLGA_EDU.COURSE#X#_LESSON#Y#_#TEST#_FILES -- название теста класс сгенерирует сам
  4. Переопределять run() не нужно, класс сделает все сам

Тест шаблона компонента

  1. Класс должен быть наследником \Intervolga\Edu\Tests\BaseComponentTemplateTest
  2. Нужно переопределить метод getLocator() и возвращать класс-локатор конкретного шаблона
  3. Нужно переопределить метод getComponentTemplateTree() и возвращать класс-дерево шаблона
  4. Переопределять run() не нужно, класс сделает все сам

Тест инфоблока

  1. Класс должен быть наследником \Intervolga\Edu\Tests\BaseTestIblock
  2. Нужно переопределить метод getLocator() и возвращать класс-локатор инфоблока
  3. Нужно переопределить метод getMinCount() и возвращать минимальное количество элементов ИБ
  4. Можно переопредлить метод getPropertiesLocators() и возвращать массив классов-локаторов свойств ИБ
  5. Переопределять run() не нужно, класс сделает все сам

Assert

Главный принцип -- не делать throw самому и использовать \Intervolga\Edu\Asserts\Assert::custom по минимуму. Для всех проверок искать подходящий метод в классе \Intervolga\Edu\Asserts\Assert или его наследниках. Если их нет -- добавить.

Примеры проверок

Если нужно убедиться, что папка существует, не нужно писать if... throw... Нужно вызвать \Intervolga\Edu\Asserts\Assert::directoryExists. Он проверит папку и выдаст исключение, если ее нет.

Если нужно убедиться, что папка удалена, не нужно писать if... throw... Нужно вызвать \Intervolga\Edu\Asserts\Assert::directoryNotExists. Он проверит папку и выдаст исключение, если ее нет.

Если нужно убедиться, что модуль установлен, не нужно писать if... throw... Нужно вызвать \Intervolga\Edu\Asserts\Assert::moduleInstalled. Он проверит модуль и выдаст исключение, если он не установлен.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages