Код Senior Отчётность и Allure обновлено

Категории падений как в Allure

Условие

Напишите categorize(results, categories). results: { name, status, message }, categories: { name, matchedStatuses, messageRegex } по порядку приоритета. Для каждого результата со статусом failed или broken найти первую категорию, где статус входит в matchedStatuses, а messageRegex совпадает с сообщением целиком (как ^(?:regex)$, флаг s, чтобы точка ловила перевод строки). Если не нашлось: failed идёт в "Product defects", broken в "Test defects".

Вернуть массив [имя категории, [имена тестов]] только для непустых категорий, в порядке: пользовательские по порядку, затем "Product defects", затем "Test defects". Тесты внутри в порядке results.

Примеры

categorize([{"name":"a","status":"broken","message":"TimeoutError: 30000ms exceeded"}, {"name":"b","status":"failed","message":"assert 1 == 2"}], [{"name":"Таймауты","matchedStatuses":["broken"],"messageRegex":".*Timeout.*"}]) // [["Таймауты", ["a"]], ["Product defects", ["b"]]]
categorize([{"name":"a","status":"passed","message":""}], []) // []
categorize([{"name":"a","status":"broken","message":"KeyError"}], []) // [["Test defects", ["a"]]]

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.