-- Verify kakeibo:delete_transaction on pg

BEGIN;

SELECT has_function_privilege('kakeibo.delete_transaction(INTEGER)', 'EXECUTE');

SET search_path = kakeibo;

DO $$
  DECLARE
    v_transaction_id INTEGER;
    v_transaction_id_2 INTEGER;
    v_item_id INTEGER;
  BEGIN
    SELECT insert_transaction(0, '2023-03-15', 'テスト') INTO v_transaction_id;
    SELECT insert_transaction(1, '2023-03-15', 'テスト2') INTO v_transaction_id_2;
    SELECT insert_item(v_transaction_id, 'カテ', 'サブカテ', 298, 'メモ') INTO v_item_id;

    BEGIN
      PERFORM delete_transaction(v_transaction_id);
    EXCEPTION
      WHEN foreign_key_violation THEN
    END;
    PERFORM * FROM transactions WHERE id = v_transaction_id;
    IF NOT FOUND THEN
      RAISE EXCEPTION 'Unexpected delete data.';
    END IF;

    PERFORM delete_item(v_item_id);
    PERFORM delete_transaction(v_transaction_id);
    PERFORM * FROM transactions WHERE id = v_transaction_id;
    IF FOUND THEN
      RAISE EXCEPTION 'Deleted data still exists.';
    END IF;

    PERFORM * FROM transactions WHERE id = v_transaction_id_2;
    IF NOT FOUND THEN
      RAISE EXCEPTION 'Unexpected delete data.';
    END IF;
  END
$$;

ROLLBACK;
