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