-- test_exercise_group_select: тесты ref.exercise_group_select (спецификация — func_specs\exercise_group_select.md). -- Запуск: в pgAdmin (Query Tool), целиком; при FAIL — исключение, транзакция откатывается. -- Тест #2 требует пустого справочника — выполняется на тестовой базе до seed -- либо с временно пустой таблицей (здесь: проверка состава после seed). BEGIN; DO $$ DECLARE v_count int; v_codes text; BEGIN -- #2 граничный случай: пустой справочник (до seed) — проверяем на очищенной таблице CREATE TEMP TABLE ref_exercise_group_bak ON COMMIT DROP AS SELECT * FROM ref.exercise_group; DELETE FROM ref.exercise_group; SELECT count(*) INTO v_count FROM ref.exercise_group_select(); IF v_count <> 0 THEN RAISE EXCEPTION 'FAIL ref.exercise_group_select #2: ожидалось 0 строк, got %', v_count; END IF; INSERT INTO ref.exercise_group SELECT * FROM ref_exercise_group_bak; RAISE NOTICE 'PASS ref.exercise_group_select #2'; -- #1 основной сценарий: seed из миграции 001 SELECT count(*), string_agg(code, ',' ORDER BY id) INTO v_count, v_codes FROM ref.exercise_group_select(); IF v_count <> 5 OR v_codes <> 'push,pull,legs,core,cardio' THEN RAISE EXCEPTION 'FAIL ref.exercise_group_select #1: got % / %', v_count, v_codes; END IF; RAISE NOTICE 'PASS ref.exercise_group_select #1'; END; $$; ROLLBACK;