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

61 lines
2.4 KiB
Plaintext

-- Тесты chk.chk_check_get — по func_specs/chk_check_get.md (db-tst-6: № = строке таблицы).
-- Запуск: psql -d <тестовая база> -f test_chk_check_get.psql (одна транзакция, откат в конце).
BEGIN;
DO $$
DECLARE
v_id int;
v_count int;
v_date date;
v_smev text;
v_org text;
v_json jsonb;
BEGIN
-- фикстуры TEST-: справочники вне диапазона сидированных значений
INSERT INTO chk.chk_type (id, name) VALUES (990001, 'TEST-тип')
ON CONFLICT (id) DO NOTHING;
INSERT INTO chk.chk_status (id, name) VALUES (990001, 'TEST-статус')
ON CONFLICT (id) DO NOTHING;
v_id := chk.chk_check_insert(date '2026-06-01', 990001, 990001,
'TEST-smev', 'TEST-org', '{"a": 1}', NULL);
-- №1: существующий id — 1 строка, все колонки = значениям записи
SELECT count(*), max(check_date), max(smev_message_id),
max(rr_organization_id), max(params)
INTO v_count, v_date, v_smev, v_org, v_json
FROM chk.chk_check_get(v_id);
IF v_count = 1
AND v_date = date '2026-06-01'
AND v_smev = 'TEST-smev'
AND v_org = 'TEST-org'
AND v_json = '{"a": 1}'::jsonb THEN
RAISE NOTICE 'PASS chk.chk_check_get #1';
ELSE
RAISE EXCEPTION 'FAIL chk.chk_check_get #1: поля не совпали';
END IF;
-- №2: несуществующий id — пустая таблица
SELECT count(*) INTO v_id FROM chk.chk_check_get(999999999);
IF v_id = 0 THEN
RAISE NOTICE 'PASS chk.chk_check_get #2';
ELSE
RAISE EXCEPTION 'FAIL chk.chk_check_get #2: ожидалась пустая таблица';
END IF;
-- №3: NULL p_id — исключение
BEGIN
PERFORM chk.chk_check_get(NULL);
RAISE EXCEPTION 'FAIL chk.chk_check_get #3: исключения не было';
EXCEPTION
WHEN raise_exception THEN
RAISE NOTICE 'PASS chk.chk_check_get #3: %', SQLERRM;
END;
-- удаление фикстур
PERFORM chk.chk_check_delete(v_id);
DELETE FROM chk.chk_type WHERE id = 990001;
DELETE FROM chk.chk_status WHERE id = 990001;
RAISE NOTICE 'ИТОГ chk.chk_check_get: все проверки выполнены';
END;
$$;
ROLLBACK;