camper/test/translate_campsite_carousel_slide.sql
jordi fita mas c284230436 Add public pages for each individual accommodation
A small page with a brief description, carousel, and feature list of
each individual accommodation.

Most of the relations and functions for carousel and features are like
the ones for campsite types, but i had to use the accommodation’s label
to find them, because they do not have slugs; i did not even though
these would be public, and they already have a label, although not
unique for all companies, like UUID slugs are.
2024-01-26 22:27:54 +01:00

103 lines
4.4 KiB
PL/PgSQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- Test translate_campsite_carousel_slide
set client_min_messages to warning;
create extension if not exists pgtap;
reset client_min_messages;
begin;
select plan(13);
set search_path to camper, public;
select has_function('camper', 'translate_campsite_carousel_slide', array['integer', 'text', 'integer', 'text', 'text']);
select function_lang_is('camper', 'translate_campsite_carousel_slide', array['integer', 'text', 'integer', 'text', 'text'], 'sql');
select function_returns('camper', 'translate_campsite_carousel_slide', array['integer', 'text', 'integer', 'text', 'text'], 'void');
select isnt_definer('camper', 'translate_campsite_carousel_slide', array['integer', 'text', 'integer', 'text', 'text']);
select volatility_is('camper', 'translate_campsite_carousel_slide', array['integer', 'text', 'integer', 'text', 'text'], 'volatile');
select function_privs_are('camper', 'translate_campsite_carousel_slide', array['integer', 'text', 'integer', 'text', 'text'], 'guest', array[]::text[]);
select function_privs_are('camper', 'translate_campsite_carousel_slide', array['integer', 'text', 'integer', 'text', 'text'], 'employee', array[]::text[]);
select function_privs_are('camper', 'translate_campsite_carousel_slide', array['integer', 'text', 'integer', 'text', 'text'], 'admin', array['EXECUTE']);
select function_privs_are('camper', 'translate_campsite_carousel_slide', array['integer', 'text', 'integer', 'text', 'text'], 'authenticator', array[]::text[]);
set client_min_messages to warning;
truncate campsite_carousel_i18n cascade;
truncate campsite_carousel cascade;
truncate campsite cascade;
truncate campsite_type cascade;
truncate media cascade;
truncate media_content cascade;
truncate company cascade;
reset client_min_messages;
insert into company (company_id, business_name, vatin, trade_name, phone, email, web, address, city, province, postal_code, rtc_number, tourist_tax, country_code, currency_code, default_lang_tag)
values (1, 'Company 2', 'XX123', '', '555-555-555', 'a@a', '', '', '', '', '', '', 60, 'ES', 'EUR', 'ca')
, (2, 'Company 2', 'XX123', '', '555-555-555', 'a@a', '', '', '', '', '', '', 60, 'ES', 'EUR', 'ca')
;
insert into media_content (media_type, bytes)
values ('image/x-xpixmap', 'static char *s[]={"1 1 1 1","a c #ffffff","a"};')
, ('image/x-xpixmap', 'static char *s[]={"1 1 1 1","a c #ff00ff","a"};')
, ('image/x-xpixmap', 'static char *s[]={"1 1 1 1","a c #ffff00","a"};')
, ('text/plain', 'hello, world!')
, ('image/svg+xml', '<svg xmlns="http://www.w3.org/2000/svg" width="1" height="1"/>')
;
insert into media (media_id, company_id, original_filename, content_hash)
values (3, 1, 'cover2.xpm', sha256('static char *s[]={"1 1 1 1","a c #ffffff","a"};'))
, (4, 1, 'cover3.xpm', sha256('static char *s[]={"1 1 1 1","a c #ff00ff","a"};'))
, (5, 1, 'cover4.xpm', sha256('static char *s[]={"1 1 1 1","a c #ffff00","a"};'))
, (6, 1, 'text.txt', sha256('hello, world!'))
, (7, 2, 'image.svg', sha256('<svg xmlns="http://www.w3.org/2000/svg" width="1" height="1"/>'))
;
insert into campsite_type (campsite_type_id, company_id, media_id, name, description, max_campers, dogs_allowed, active)
values (10, 1, 3, 'Type A', '<p>A</p>', 5, false, true)
, (11, 2, 7, 'Type B', '<p>B</p>', 7, true, false)
;
insert into campsite (campsite_id, label, company_id, campsite_type_id)
values (12, 'A1', 1, 10)
, (13, 'A1', 2, 11)
;
insert into campsite_carousel (campsite_id, media_id, caption)
values (13, 7, 'Source caption')
, (12, 5, 'Another caption')
, (12, 6, 'N/A')
;
insert into campsite_carousel_i18n (campsite_id, media_id, lang_tag, caption)
values (13, 7, 'en', 'Target caption')
;
select lives_ok(
$$ select translate_campsite_carousel_slide(1, 'A1', 5, 'ca', 'Traducció') $$,
'Should be able to translate a carousel slide'
);
select lives_ok(
$$ select translate_campsite_carousel_slide(1, 'A1', 5, 'es', '') $$,
'Should be able to “translate” a carousel slide to the empty string'
);
select lives_ok(
$$ select translate_campsite_carousel_slide(2, 'A1', 7, 'en', 'Not anymore') $$,
'Should be able to overwrite a slides translation'
);
select bag_eq(
$$ select campsite_id, media_id, lang_tag, caption from campsite_carousel_i18n $$,
$$ values (12, 5, 'ca', 'Traducció')
, (12, 5, 'es', null)
, (13, 7, 'en', 'Not anymore')
$$,
'Should have all three slides'
);
select *
from finish();
rollback;