-- Test input_is_valid
set client_min_messages to warning;
create extension if not exists pgtap;
reset client_min_messages;

begin;

select plan(28);

set search_path to camper, public;

select has_function('public', 'input_is_valid', array ['text', 'text']);
select function_lang_is('public', 'input_is_valid', array ['text', 'text'], 'plpgsql');
select function_returns('public', 'input_is_valid', array ['text', 'text'], 'boolean');
select isnt_definer('public', 'input_is_valid', array ['text', 'text']);
select volatility_is('public', 'input_is_valid', array ['text', 'text'], 'stable');
select function_privs_are('public', 'input_is_valid', array ['text', 'text'], 'guest', array ['EXECUTE']);
select function_privs_are('public', 'input_is_valid', array ['text', 'text'], 'employee', array ['EXECUTE']);
select function_privs_are('public', 'input_is_valid', array ['text', 'text'], 'admin', array ['EXECUTE']);
select function_privs_are('public', 'input_is_valid', array ['text', 'text'], 'authenticator', array ['EXECUTE']);

select is( input_is_valid('123', 'integer'), true );
select is( input_is_valid('abc', 'integer'), false );
select is( input_is_valid('abc', 'email'), false );
select is( input_is_valid('ESabc', 'vatin'), false );
select is( input_is_valid('abc', 'text'), true );
select is( input_is_valid('ES44444444A', 'vatin'), true );
select is( input_is_valid('ES44444444A', 'text'), true );
select is( input_is_valid('ES44444444A', 'email'), false );
select is( input_is_valid('NL04RABO9373475770', 'text'), true );
select is( input_is_valid('ESNL04RABO9373475770', 'vatin'), false );
select is( input_is_valid('NL04RABO9373475770', 'email'), false );
select is( input_is_valid('ARBNNL22', 'text'), true );
select is( input_is_valid('ESARBNNL22', 'vatin'), false );
select is( input_is_valid('ARBNNL22', 'email'), false );
select is( input_is_valid('2023-05-12', 'text'), true );
select is( input_is_valid('2023-05-12', 'date'), true );
select is( input_is_valid('2023-05-12', 'integer'), false );
select is( input_is_valid('', 'text'), true );
select is( input_is_valid('', 'inexistent'), false );

select *
from finish();

rollback;
