107 lines
4.6 KiB
Plaintext
107 lines
4.6 KiB
Plaintext
-- Тесты 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;
|