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

begin;

select plan(21);

set search_path to camper, public;

select has_table('media_content');
select has_pk('media_content');
select table_privs_are('media_content', 'guest', array['SELECT']);
select table_privs_are('media_content', 'employee', array['SELECT']);
select table_privs_are('media_content', 'admin', array['SELECT', 'INSERT', 'UPDATE', 'DELETE']);
select table_privs_are('media_content', 'authenticator', array[]::text[]);

select has_column('media_content', 'content_hash');
select col_is_pk('media_content', 'content_hash');
select col_type_is('media_content', 'content_hash', 'bytea');
select col_not_null('media_content', 'content_hash');
select col_has_default('media_content', 'content_hash');
select col_default_is('media_content', 'content_hash', 'sha256(bytes)');

select has_column('media_content', 'media_type');
select col_type_is('media_content', 'media_type', 'media_type');
select col_not_null('media_content', 'media_type');
select col_hasnt_default('media_content', 'media_type');

select has_column('media_content', 'bytes');
select col_type_is('media_content', 'bytes', 'bytea');
select col_not_null('media_content', 'bytes');
select col_hasnt_default('media_content', 'bytes');


set client_min_messages to warning;
truncate media_content cascade;
reset client_min_messages;

insert into media_content (media_type, bytes)
values ('text/plain', 'content2')
     , ('text/plain', 'content4')
;

select bag_eq(
	$$ select encode(content_hash, 'hex'), convert_from(bytes, 'utf-8') from media_content $$,
	$$ values ('dab741b6289e7dccc1ed42330cae1accc2b755ce8079c2cd5d4b5366c9f769a6', 'content2')
	        , ('b04813d4f04a27cbd8a5d7828344a0c7d206a486343f503cb7e3d53e1d8e95a0', 'content4')
	$$,
	'Should automatically compute the content_hash'
);


select *
from finish();

rollback;