PgTAP:Examples:NanoID
PgTAP 으로 NanoID 유닛 테스트 하는 샘플
Code
BEGIN;
SELECT plan(8);
--------------------------------------------------------------------------------
-- 1. 함수 존재 여부
--------------------------------------------------------------------------------
SELECT has_function(
'public', 'generate_random_slug', ARRAY[]::TEXT[],
'function generate_random_slug() should exist'
);
SELECT function_returns(
'public', 'generate_random_slug', ARRAY[]::TEXT[], 'text',
'generate_random_slug() should return text'
);
--------------------------------------------------------------------------------
-- 2. 반환값 길이 검증 (nanoid size=21)
--------------------------------------------------------------------------------
SELECT is(
length(generate_random_slug()), 21,
'slug length should be 21'
);
--------------------------------------------------------------------------------
-- 3. 허용된 알파벳만 포함하는지 검증 (0-9, a-z)
--------------------------------------------------------------------------------
SELECT matches(
generate_random_slug(), '^[0-9a-z]{21}$',
'slug should only contain lowercase alphanumeric characters (0-9, a-z)'
);
--------------------------------------------------------------------------------
-- 4. 대문자·특수문자 미포함 검증
--------------------------------------------------------------------------------
SELECT doesnt_match(
generate_random_slug(), '[A-Z_\-]',
'slug should not contain uppercase letters, underscores, or hyphens'
);
--------------------------------------------------------------------------------
-- 5. 호출마다 고유한 값 생성 검증
--------------------------------------------------------------------------------
SELECT isnt(
generate_random_slug(), generate_random_slug(),
'consecutive calls should return different values'
);
--------------------------------------------------------------------------------
-- 6. 대량 생성 시 고유성 검증 (1000건)
--------------------------------------------------------------------------------
SELECT is(
(SELECT COUNT(DISTINCT generate_random_slug()) FROM generate_series(1, 1000)),
1000::BIGINT,
'1000 generated slugs should all be unique'
);
--------------------------------------------------------------------------------
-- 7. NULL·빈 문자열이 아닌지 검증
--------------------------------------------------------------------------------
SELECT isnt(
generate_random_slug(), NULL,
'slug should not be NULL'
);
SELECT finish();
ROLLBACK;
See also