MT.Checks/DB/chk/tests/test_chk_check_select.psql

107 lines
4.6 KiB
Plaintext
Raw Blame History

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.

-- Тесты chk.chk_check_select — по func_specs/chk_check_select.md (db-tst-6: № = строке таблицы).
-- Запуск: psql -d <тестовая база> -f test_chk_check_select.psql (одна транзакция, откат в конце).
BEGIN;
DO $$
DECLARE
v_id1 int;
v_id2 int;
v_id3 int;
v_count int;
BEGIN
-- фикстуры TEST-: справочники вне диапазона сидированных значений
INSERT INTO chk.chk_type (id, name) VALUES (990001, 'TEST-тип 1')
ON CONFLICT (id) DO NOTHING;
INSERT INTO chk.chk_type (id, name) VALUES (990002, 'TEST-тип 2')
ON CONFLICT (id) DO NOTHING;
INSERT INTO chk.chk_status (id, name) VALUES (990001, 'TEST-статус 1')
ON CONFLICT (id) DO NOTHING;
INSERT INTO chk.chk_status (id, name) VALUES (990002, 'TEST-статус 2')
ON CONFLICT (id) DO NOTHING;
-- три проверки: 1 и 2 — одна дата/тип/статус, 3 — все значения другие
v_id1 := chk.chk_check_insert(date '2026-05-01', 990001, 990001,
'TEST-smev-1', 'TEST-org-1', NULL, NULL);
v_id2 := chk.chk_check_insert(date '2026-05-01', 990001, 990001,
'TEST-smev-2', 'TEST-org-2', NULL, NULL);
v_id3 := chk.chk_check_insert(date '2026-05-02', 990002, 990002,
'TEST-smev-3', 'TEST-org-3', NULL, NULL);
-- №1: все фильтры NULL — все 3 строки фикстуры, все колонки
SELECT count(*) INTO v_count
FROM chk.chk_check_select(NULL, NULL, NULL, NULL)
WHERE id IN (v_id1, v_id2, v_id3);
IF v_count = 3 THEN
RAISE NOTICE 'PASS chk.chk_check_select #1';
ELSE
RAISE EXCEPTION 'FAIL chk.chk_check_select #1: найдено % из 3', v_count;
END IF;
-- №2: фильтр по дате — только строки с 2026-05-01
SELECT count(*) INTO v_count
FROM chk.chk_check_select(date '2026-05-01', NULL, NULL, NULL)
WHERE id IN (v_id1, v_id2, v_id3);
IF v_count = 2 THEN
RAISE NOTICE 'PASS chk.chk_check_select #2';
ELSE
RAISE EXCEPTION 'FAIL chk.chk_check_select #2: найдено %, ожидалось 2', v_count;
END IF;
-- №3: фильтр по типу
SELECT count(*) INTO v_count
FROM chk.chk_check_select(NULL, 990001, NULL, NULL)
WHERE id IN (v_id1, v_id2, v_id3);
IF v_count = 2 THEN
RAISE NOTICE 'PASS chk.chk_check_select #3';
ELSE
RAISE EXCEPTION 'FAIL chk.chk_check_select #3: найдено %, ожидалось 2', v_count;
END IF;
-- №4: фильтр по статусу
SELECT count(*) INTO v_count
FROM chk.chk_check_select(NULL, NULL, 990002, NULL)
WHERE id IN (v_id1, v_id2, v_id3);
IF v_count = 1 THEN
RAISE NOTICE 'PASS chk.chk_check_select #4';
ELSE
RAISE EXCEPTION 'FAIL chk.chk_check_select #4: найдено %, ожидалось 1', v_count;
END IF;
-- №5: фильтр по организации РР
SELECT count(*) INTO v_count
FROM chk.chk_check_select(NULL, NULL, NULL, 'TEST-org-2')
WHERE id IN (v_id1, v_id2, v_id3);
IF v_count = 1 THEN
RAISE NOTICE 'PASS chk.chk_check_select #5';
ELSE
RAISE EXCEPTION 'FAIL chk.chk_check_select #5: найдено %, ожидалось 1', v_count;
END IF;
-- №6: комбинированный фильтр (дата + статус) — только строка 3
SELECT count(*) INTO v_count
FROM chk.chk_check_select(date '2026-05-02', NULL, 990002, NULL)
WHERE id IN (v_id1, v_id2, v_id3);
IF v_count = 1 THEN
RAISE NOTICE 'PASS chk.chk_check_select #6';
ELSE
RAISE EXCEPTION 'FAIL chk.chk_check_select #6: найдено %, ожидалось 1', v_count;
END IF;
-- №7: фильтр без совпадений — пустая таблица
SELECT count(*) INTO v_count
FROM chk.chk_check_select(date '2026-05-02', NULL, 990001, NULL);
IF v_count = 0 THEN
RAISE NOTICE 'PASS chk.chk_check_select #7';
ELSE
RAISE EXCEPTION 'FAIL chk.chk_check_select #7: найдено %, ожидалось 0', v_count;
END IF;
-- удаление фикстур
PERFORM chk.chk_check_delete(v_id1);
PERFORM chk.chk_check_delete(v_id2);
PERFORM chk.chk_check_delete(v_id3);
DELETE FROM chk.chk_type WHERE id IN (990001, 990002);
DELETE FROM chk.chk_status WHERE id IN (990001, 990002);
RAISE NOTICE 'ИТОГ chk.chk_check_select: все проверки выполнены';
END;
$$;
ROLLBACK;