From 629ef1a26235fd24ec76e12596c99a02638760df Mon Sep 17 00:00:00 2001 From: jordi fita mas Date: Fri, 26 Jan 2024 22:54:19 +0100 Subject: [PATCH] Add function to delete campsite type features --- deploy/remove_campsite_type_feature.sql | 22 ++++ pkg/campsite/types/feature.go | 15 ++- pkg/database/funcs.go | 5 + po/ca.po | 26 +++-- po/es.po | 26 +++-- po/fr.po | 42 ++++--- revert/remove_campsite_type_feature.sql | 7 ++ sqitch.plan | 1 + test/remove_campsite_type_feature.sql | 103 ++++++++++++++++++ verify/remove_campsite_type_feature.sql | 7 ++ .../admin/campsite/feature/index.gohtml | 2 +- .../admin/campsite/type/feature/index.gohtml | 9 ++ 12 files changed, 225 insertions(+), 40 deletions(-) create mode 100644 deploy/remove_campsite_type_feature.sql create mode 100644 revert/remove_campsite_type_feature.sql create mode 100644 test/remove_campsite_type_feature.sql create mode 100644 verify/remove_campsite_type_feature.sql diff --git a/deploy/remove_campsite_type_feature.sql b/deploy/remove_campsite_type_feature.sql new file mode 100644 index 0000000..c0bb643 --- /dev/null +++ b/deploy/remove_campsite_type_feature.sql @@ -0,0 +1,22 @@ +-- Deploy camper:remove_campsite_type_feature to pg +-- requires: roles +-- requires: schema_camper +-- requires: campsite_type_feature +-- requires: campsite_type_feature_i18n + +begin; + +set search_path to camper, public; + +create or replace function remove_campsite_type_feature(feature_id integer) returns void as +$$ + delete from campsite_type_feature_i18n where campsite_type_feature_id = feature_id; + delete from campsite_type_feature where campsite_type_feature_id = feature_id; +$$ + language sql +; + +revoke execute on function remove_campsite_type_feature(integer) from public; +grant execute on function remove_campsite_type_feature(integer) to admin; + +commit; diff --git a/pkg/campsite/types/feature.go b/pkg/campsite/types/feature.go index 5743408..66637ff 100644 --- a/pkg/campsite/types/feature.go +++ b/pkg/campsite/types/feature.go @@ -81,8 +81,10 @@ func (h *AdminHandler) featureHandler(user *auth.User, company *auth.Company, co f.MustRender(w, r, user, company) case http.MethodPut: editFeature(w, r, user, company, conn, f) + case http.MethodDelete: + deleteFeature(w, r, user, conn, f.TypeSlug, f.ID) default: - httplib.MethodNotAllowed(w, r, http.MethodGet, http.MethodPut) + httplib.MethodNotAllowed(w, r, http.MethodGet, http.MethodPut, http.MethodDelete) } default: http.NotFound(w, r) @@ -202,6 +204,17 @@ func processFeatureForm(w http.ResponseWriter, r *http.Request, user *auth.User, httplib.Redirect(w, r, "/admin/campsites/types/"+f.TypeSlug+"/features", http.StatusSeeOther) } +func deleteFeature(w http.ResponseWriter, r *http.Request, user *auth.User, conn *database.Conn, typeSlug string, id int) { + if err := user.VerifyCSRFToken(r); err != nil { + http.Error(w, err.Error(), http.StatusForbidden) + return + } + if err := conn.RemoveCampsiteTypeFeature(r.Context(), id); err != nil { + panic(err) + } + httplib.Redirect(w, r, "/admin/campsites/types/"+typeSlug+"/features", http.StatusSeeOther) +} + type featureForm struct { DefaultLang string ID int diff --git a/pkg/database/funcs.go b/pkg/database/funcs.go index ff56e58..0f84c4d 100644 --- a/pkg/database/funcs.go +++ b/pkg/database/funcs.go @@ -141,6 +141,11 @@ func (c *Conn) OrderCampsiteTypeFeatures(ctx context.Context, ids []int) error { return err } +func (c *Conn) RemoveCampsiteTypeFeature(ctx context.Context, id int) error { + _, err := c.Exec(ctx, "select remove_campsite_type_feature($1)", id) + return err +} + func (tx *Tx) AddCampsiteTypeCarouselSlide(ctx context.Context, typeSlug string, mediaID int, caption string) error { _, err := tx.Exec(ctx, "select add_campsite_type_carousel_slide($1, $2, $3)", typeSlug, mediaID, caption) return err diff --git a/po/ca.po b/po/ca.po index 0f0c298..58bbc6c 100644 --- a/po/ca.po +++ b/po/ca.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: camper\n" "Report-Msgid-Bugs-To: jordi@tandem.blog\n" -"POT-Creation-Date: 2024-01-26 21:20+0100\n" +"POT-Creation-Date: 2024-01-26 22:47+0100\n" "PO-Revision-Date: 2023-07-22 23:45+0200\n" "Last-Translator: jordi fita mas \n" "Language-Team: Catalan \n" @@ -604,6 +604,7 @@ msgstr "Afegeix característica" #: web/templates/admin/campsite/feature/index.gohtml:31 #: web/templates/admin/campsite/carousel/index.gohtml:31 +#: web/templates/admin/campsite/type/feature/index.gohtml:32 #: web/templates/admin/campsite/type/carousel/index.gohtml:32 #: web/templates/admin/campsite/type/option/index.gohtml:31 #: web/templates/admin/services/index.gohtml:30 @@ -617,12 +618,13 @@ msgid "Actions" msgstr "Accions" #: web/templates/admin/campsite/feature/index.gohtml:35 -#: web/templates/admin/campsite/type/option/index.gohtml:35 -msgid "Are you sure you wish to delete this option?" -msgstr "Esteu segur de voler esborrar aquesta opció?" +#: web/templates/admin/campsite/type/feature/index.gohtml:36 +msgid "Are you sure you wish to delete this feature?" +msgstr "Esteu segur de voler esborrar aquesta característica?" #: web/templates/admin/campsite/feature/index.gohtml:47 #: web/templates/admin/campsite/carousel/index.gohtml:49 +#: web/templates/admin/campsite/type/feature/index.gohtml:48 #: web/templates/admin/campsite/type/carousel/index.gohtml:50 #: web/templates/admin/campsite/type/option/index.gohtml:47 #: web/templates/admin/services/index.gohtml:47 @@ -827,7 +829,7 @@ msgctxt "title" msgid "Campsite Type Features" msgstr "Característiques del tipus d’allotjaments" -#: web/templates/admin/campsite/type/feature/index.gohtml:48 +#: web/templates/admin/campsite/type/feature/index.gohtml:57 msgid "No campsite type features added yet." msgstr "No s’ha afegit cap característica al tipus d’allotjament encara." @@ -960,6 +962,10 @@ msgctxt "action" msgid "Add Option" msgstr "Afegeix opció" +#: web/templates/admin/campsite/type/option/index.gohtml:35 +msgid "Are you sure you wish to delete this option?" +msgstr "Esteu segur de voler esborrar aquesta opció?" + #: web/templates/admin/campsite/type/option/index.gohtml:56 msgid "No campsite type options added yet." msgstr "No s’ha afegit cap opció al tipus d’allotjament encara." @@ -1538,14 +1544,14 @@ msgid "No booking found." msgstr "No s’ha trobat cap reserva." #: pkg/legal/admin.go:258 pkg/app/user.go:249 pkg/campsite/types/option.go:357 -#: pkg/campsite/types/feature.go:259 pkg/campsite/types/admin.go:483 +#: pkg/campsite/types/feature.go:272 pkg/campsite/types/admin.go:483 #: pkg/campsite/feature.go:269 pkg/season/admin.go:412 #: pkg/services/admin.go:316 pkg/surroundings/admin.go:340 msgid "Name can not be empty." msgstr "No podeu deixar el nom en blanc." #: pkg/legal/admin.go:259 pkg/campsite/types/option.go:358 -#: pkg/campsite/types/feature.go:260 pkg/campsite/types/admin.go:484 +#: pkg/campsite/types/feature.go:273 pkg/campsite/types/admin.go:484 #: pkg/campsite/feature.go:270 msgid "Name must have at least one letter." msgstr "El nom ha de tenir com a mínim una lletra." @@ -1647,7 +1653,7 @@ msgstr "El preu per nit ha de ser un número decimal." msgid "Price per night must be zero or greater." msgstr "El preu per nit ha de ser com a mínim zero." -#: pkg/campsite/types/feature.go:258 pkg/campsite/feature.go:268 +#: pkg/campsite/types/feature.go:271 pkg/campsite/feature.go:268 #: pkg/services/admin.go:315 msgid "Selected icon is not valid." msgstr "La icona escollida no és vàlida." @@ -1702,11 +1708,11 @@ msgstr "El número mínim de nits ha de ser enter." msgid "Minimum number of nights must be one or greater." msgstr "El número mínim de nits no pot ser zero." -#: pkg/campsite/admin.go:274 pkg/booking/public.go:278 +#: pkg/campsite/admin.go:275 pkg/booking/public.go:278 msgid "Selected campsite type is not valid." msgstr "El tipus d’allotjament escollit no és vàlid." -#: pkg/campsite/admin.go:275 +#: pkg/campsite/admin.go:276 msgid "Label can not be empty." msgstr "No podeu deixar l’etiqueta en blanc." diff --git a/po/es.po b/po/es.po index adaf48a..3b89f4f 100644 --- a/po/es.po +++ b/po/es.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: camper\n" "Report-Msgid-Bugs-To: jordi@tandem.blog\n" -"POT-Creation-Date: 2024-01-26 21:20+0100\n" +"POT-Creation-Date: 2024-01-26 22:47+0100\n" "PO-Revision-Date: 2023-07-22 23:46+0200\n" "Last-Translator: jordi fita mas \n" "Language-Team: Spanish \n" @@ -604,6 +604,7 @@ msgstr "Añadir características" #: web/templates/admin/campsite/feature/index.gohtml:31 #: web/templates/admin/campsite/carousel/index.gohtml:31 +#: web/templates/admin/campsite/type/feature/index.gohtml:32 #: web/templates/admin/campsite/type/carousel/index.gohtml:32 #: web/templates/admin/campsite/type/option/index.gohtml:31 #: web/templates/admin/services/index.gohtml:30 @@ -617,12 +618,13 @@ msgid "Actions" msgstr "Acciones" #: web/templates/admin/campsite/feature/index.gohtml:35 -#: web/templates/admin/campsite/type/option/index.gohtml:35 -msgid "Are you sure you wish to delete this option?" -msgstr "¿Estáis seguro de querer borrar esta opción?" +#: web/templates/admin/campsite/type/feature/index.gohtml:36 +msgid "Are you sure you wish to delete this feature?" +msgstr "¿Estáis seguro de querer borrar esta característica?" #: web/templates/admin/campsite/feature/index.gohtml:47 #: web/templates/admin/campsite/carousel/index.gohtml:49 +#: web/templates/admin/campsite/type/feature/index.gohtml:48 #: web/templates/admin/campsite/type/carousel/index.gohtml:50 #: web/templates/admin/campsite/type/option/index.gohtml:47 #: web/templates/admin/services/index.gohtml:47 @@ -827,7 +829,7 @@ msgctxt "title" msgid "Campsite Type Features" msgstr "Características del tipo de alojamiento" -#: web/templates/admin/campsite/type/feature/index.gohtml:48 +#: web/templates/admin/campsite/type/feature/index.gohtml:57 msgid "No campsite type features added yet." msgstr "No se ha añadido ninguna característica al tipo de alojamiento todavía." @@ -960,6 +962,10 @@ msgctxt "action" msgid "Add Option" msgstr "Añadir opción" +#: web/templates/admin/campsite/type/option/index.gohtml:35 +msgid "Are you sure you wish to delete this option?" +msgstr "¿Estáis seguro de querer borrar esta opción?" + #: web/templates/admin/campsite/type/option/index.gohtml:56 msgid "No campsite type options added yet." msgstr "No se ha añadido ninguna opció al tipo de alojamiento todavía." @@ -1538,14 +1544,14 @@ msgid "No booking found." msgstr "No se ha encontrado ninguna reserva." #: pkg/legal/admin.go:258 pkg/app/user.go:249 pkg/campsite/types/option.go:357 -#: pkg/campsite/types/feature.go:259 pkg/campsite/types/admin.go:483 +#: pkg/campsite/types/feature.go:272 pkg/campsite/types/admin.go:483 #: pkg/campsite/feature.go:269 pkg/season/admin.go:412 #: pkg/services/admin.go:316 pkg/surroundings/admin.go:340 msgid "Name can not be empty." msgstr "No podéis dejar el nombre en blanco." #: pkg/legal/admin.go:259 pkg/campsite/types/option.go:358 -#: pkg/campsite/types/feature.go:260 pkg/campsite/types/admin.go:484 +#: pkg/campsite/types/feature.go:273 pkg/campsite/types/admin.go:484 #: pkg/campsite/feature.go:270 msgid "Name must have at least one letter." msgstr "El nombre tiene que tener como mínimo una letra." @@ -1647,7 +1653,7 @@ msgstr "El precio por noche tiene que ser un número decimal." msgid "Price per night must be zero or greater." msgstr "El precio por noche tiene que ser como mínimo cero." -#: pkg/campsite/types/feature.go:258 pkg/campsite/feature.go:268 +#: pkg/campsite/types/feature.go:271 pkg/campsite/feature.go:268 #: pkg/services/admin.go:315 msgid "Selected icon is not valid." msgstr "El icono escogido no es válido." @@ -1702,11 +1708,11 @@ msgstr "El número mínimo de noches tiene que ser entero." msgid "Minimum number of nights must be one or greater." msgstr "El número mínimo de noches no puede ser cero." -#: pkg/campsite/admin.go:274 pkg/booking/public.go:278 +#: pkg/campsite/admin.go:275 pkg/booking/public.go:278 msgid "Selected campsite type is not valid." msgstr "El tipo de alojamiento escogido no es válido." -#: pkg/campsite/admin.go:275 +#: pkg/campsite/admin.go:276 msgid "Label can not be empty." msgstr "No podéis dejar la etiqueta en blanco." diff --git a/po/fr.po b/po/fr.po index 7c0de22..a49a0c1 100644 --- a/po/fr.po +++ b/po/fr.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: camper\n" "Report-Msgid-Bugs-To: jordi@tandem.blog\n" -"POT-Creation-Date: 2024-01-26 21:20+0100\n" +"POT-Creation-Date: 2024-01-26 22:47+0100\n" "PO-Revision-Date: 2023-12-20 10:13+0100\n" "Last-Translator: Oriol Carbonell \n" "Language-Team: French \n" @@ -582,7 +582,7 @@ msgstr "Modifier l’entité de camping" #: web/templates/admin/campsite/feature/form.gohtml:10 msgctxt "title" msgid "New Campsite Feature" -msgstr "Nouvelle fonctionnalité de camping" +msgstr "Nouvelle caractéristique de camping" #: web/templates/admin/campsite/feature/form.gohtml:17 #: web/templates/admin/campsite/feature/index.gohtml:6 @@ -601,10 +601,11 @@ msgstr "Icône" #: web/templates/admin/campsite/type/feature/index.gohtml:16 msgctxt "action" msgid "Add Feature" -msgstr "Ajouter une fonctionnalité" +msgstr "Ajouter une caractéristique" #: web/templates/admin/campsite/feature/index.gohtml:31 #: web/templates/admin/campsite/carousel/index.gohtml:31 +#: web/templates/admin/campsite/type/feature/index.gohtml:32 #: web/templates/admin/campsite/type/carousel/index.gohtml:32 #: web/templates/admin/campsite/type/option/index.gohtml:31 #: web/templates/admin/services/index.gohtml:30 @@ -618,12 +619,13 @@ msgid "Actions" msgstr "Actions" #: web/templates/admin/campsite/feature/index.gohtml:35 -#: web/templates/admin/campsite/type/option/index.gohtml:35 -msgid "Are you sure you wish to delete this option?" -msgstr "Êtes-vous sûr de vouloir supprimer cette option ?" +#: web/templates/admin/campsite/type/feature/index.gohtml:36 +msgid "Are you sure you wish to delete this feature?" +msgstr "Êtes-vous sûr de vouloir supprimer cette caractéristique ?" #: web/templates/admin/campsite/feature/index.gohtml:47 #: web/templates/admin/campsite/carousel/index.gohtml:49 +#: web/templates/admin/campsite/type/feature/index.gohtml:48 #: web/templates/admin/campsite/type/carousel/index.gohtml:50 #: web/templates/admin/campsite/type/option/index.gohtml:47 #: web/templates/admin/services/index.gohtml:47 @@ -639,7 +641,7 @@ msgstr "Supprimer" #: web/templates/admin/campsite/feature/index.gohtml:56 msgid "No campsite features added yet." -msgstr "Aucune fonctionnalité de camping n’a encore été ajoutée." +msgstr "Aucune caractéristique de camping n’a encore été ajoutée." #: web/templates/admin/campsite/carousel/form.gohtml:8 msgctxt "title" @@ -769,7 +771,7 @@ msgstr "Carrousel" #: web/templates/admin/campsite/type/index.gohtml:45 msgctxt "action" msgid "Edit Features" -msgstr "Edit Caractéristiques" +msgstr "Edit caractéristiques" #: web/templates/admin/campsite/index.gohtml:39 #: web/templates/admin/campsite/type/index.gohtml:51 @@ -799,13 +801,13 @@ msgstr "Aucun camping n’a encore été ajouté." #: web/templates/admin/campsite/type/feature/form.gohtml:32 msgctxt "title" msgid "Edit Campsite Type Feature" -msgstr "Modifier l’entité de type de camping" +msgstr "Modifier la caractéristique de type de camping" #: web/templates/admin/campsite/type/feature/form.gohtml:10 #: web/templates/admin/campsite/type/feature/form.gohtml:34 msgctxt "title" msgid "New Campsite Type Feature" -msgstr "Nouvelle fonctionnalité de type de camping" +msgstr "Nouvelle caractéristique de type de camping" #: web/templates/admin/campsite/type/feature/form.gohtml:17 #: web/templates/admin/campsite/type/feature/index.gohtml:11 @@ -828,9 +830,9 @@ msgctxt "title" msgid "Campsite Type Features" msgstr "Caractéristiques du type d’emplacement de camping" -#: web/templates/admin/campsite/type/feature/index.gohtml:48 +#: web/templates/admin/campsite/type/feature/index.gohtml:57 msgid "No campsite type features added yet." -msgstr "Aucune fonctionnalité de type camping n’a encore été ajoutée." +msgstr "Aucune caractéristique de type camping n’a encore été ajoutée." #: web/templates/admin/campsite/type/carousel/form.gohtml:8 #: web/templates/admin/campsite/type/carousel/form.gohtml:32 @@ -961,6 +963,10 @@ msgctxt "action" msgid "Add Option" msgstr "Ajouter une option" +#: web/templates/admin/campsite/type/option/index.gohtml:35 +msgid "Are you sure you wish to delete this option?" +msgstr "Êtes-vous sûr de vouloir supprimer cette option ?" + #: web/templates/admin/campsite/type/option/index.gohtml:56 msgid "No campsite type options added yet." msgstr "Aucune option de type de camping n’a encore été ajoutée." @@ -1539,14 +1545,14 @@ msgid "No booking found." msgstr "Aucune réservation trouvée." #: pkg/legal/admin.go:258 pkg/app/user.go:249 pkg/campsite/types/option.go:357 -#: pkg/campsite/types/feature.go:259 pkg/campsite/types/admin.go:483 +#: pkg/campsite/types/feature.go:272 pkg/campsite/types/admin.go:483 #: pkg/campsite/feature.go:269 pkg/season/admin.go:412 #: pkg/services/admin.go:316 pkg/surroundings/admin.go:340 msgid "Name can not be empty." msgstr "Le nom ne peut pas être laissé vide." #: pkg/legal/admin.go:259 pkg/campsite/types/option.go:358 -#: pkg/campsite/types/feature.go:260 pkg/campsite/types/admin.go:484 +#: pkg/campsite/types/feature.go:273 pkg/campsite/types/admin.go:484 #: pkg/campsite/feature.go:270 msgid "Name must have at least one letter." msgstr "Le nom doit comporter au moins une lettre." @@ -1648,7 +1654,7 @@ msgstr "Le prix par nuit doit être un nombre décimal." msgid "Price per night must be zero or greater." msgstr "Le prix par nuit doit être égal ou supérieur." -#: pkg/campsite/types/feature.go:258 pkg/campsite/feature.go:268 +#: pkg/campsite/types/feature.go:271 pkg/campsite/feature.go:268 #: pkg/services/admin.go:315 msgid "Selected icon is not valid." msgstr "L’icône sélectionnée n’est pas valide." @@ -1703,11 +1709,11 @@ msgstr "Le nombre minimum de nuits doit être un entier." msgid "Minimum number of nights must be one or greater." msgstr "Le nombre minimum de nuits doit être supérieur ou égal à une nuit." -#: pkg/campsite/admin.go:274 pkg/booking/public.go:278 +#: pkg/campsite/admin.go:275 pkg/booking/public.go:278 msgid "Selected campsite type is not valid." msgstr "Le type d’emplacement sélectionné n’est pas valide." -#: pkg/campsite/admin.go:275 +#: pkg/campsite/admin.go:276 msgid "Label can not be empty." msgstr "L'étiquette ne peut pas être vide." @@ -2093,7 +2099,7 @@ msgstr "%s doit être tout au plus %d." #~ msgctxt "title" #~ msgid "Translate Campsite Type Feature to %s" -#~ msgstr "Traduire Caractéristique de type de camping en %s" +#~ msgstr "Traduire caractéristique de type de camping en %s" #~ msgctxt "title" #~ msgid "Translate Campsite Type Carousel Slide to %s" diff --git a/revert/remove_campsite_type_feature.sql b/revert/remove_campsite_type_feature.sql new file mode 100644 index 0000000..776a8c6 --- /dev/null +++ b/revert/remove_campsite_type_feature.sql @@ -0,0 +1,7 @@ +-- Revert camper:remove_campsite_type_feature from pg + +begin; + +drop function if exists camper.remove_campsite_type_feature(integer); + +commit; diff --git a/sqitch.plan b/sqitch.plan index 772b38f..988365b 100644 --- a/sqitch.plan +++ b/sqitch.plan @@ -196,3 +196,4 @@ order_campsite_features [roles schema_camper campsite_feature] 2024-01-26T19:09: campsite_feature_i18n [roles schema_camper campsite_feature language] 2024-01-26T19:17:09Z jordi fita mas # Add relation for campsite features translation translate_campsite_feature [roles schema_camper campsite_feature_i18n] 2024-01-26T19:26:21Z jordi fita mas # Add function to translate campsite features remove_campsite_feature [roles schema_camper campsite_feature campsite_feature_i18n] 2024-01-26T19:34:52Z jordi fita mas # Add function to remove campsite features +remove_campsite_type_feature [roles schema_camper campsite_type_feature campsite_type_feature_i18n] 2024-01-26T21:35:05Z jordi fita mas # Add function to remove campsite type features diff --git a/test/remove_campsite_type_feature.sql b/test/remove_campsite_type_feature.sql new file mode 100644 index 0000000..0f5b56a --- /dev/null +++ b/test/remove_campsite_type_feature.sql @@ -0,0 +1,103 @@ +-- Test remove_campsite_type_feature +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', 'remove_campsite_type_feature', array['integer']); +select function_lang_is('camper', 'remove_campsite_type_feature', array['integer'], 'sql'); +select function_returns('camper', 'remove_campsite_type_feature', array['integer'], 'void'); +select isnt_definer('camper', 'remove_campsite_type_feature', array['integer']); +select volatility_is('camper', 'remove_campsite_type_feature', array['integer'], 'volatile'); +select function_privs_are('camper', 'remove_campsite_type_feature', array['integer'], 'guest', array[]::text[]); +select function_privs_are('camper', 'remove_campsite_type_feature', array['integer'], 'employee', array[]::text[]); +select function_privs_are('camper', 'remove_campsite_type_feature', array['integer'], 'admin', array['EXECUTE']); +select function_privs_are('camper', 'remove_campsite_type_feature', array['integer'], 'authenticator', array[]::text[]); + + +set client_min_messages to warning; +truncate campsite_type_feature_i18n cascade; +truncate campsite_type_feature 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') +; + +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', '') +; + +insert into media (media_id, company_id, original_filename, content_hash) +values (2, 1, 'cover2.xpm', sha256('static char *s[]={"1 1 1 1","a c #ffffff","a"};')) + , (3, 1, 'cover3.xpm', sha256('static char *s[]={"1 1 1 1","a c #ff00ff","a"};')) +; + +insert into campsite_type (campsite_type_id, company_id, slug, media_id, name, description, max_campers, dogs_allowed, active) +values (10, 1, '87452b88-b48f-48d3-bb6c-0296de64164e', 2, 'Type A', '

A

', 5, false, true) + , (11, 1, '9b6370f7-f941-46f2-bc6e-de455675bd0a', 3, 'Type B', '

B

', 4, true, false) +; + +insert into campsite_type_feature (campsite_type_feature_id, campsite_type_id, icon_name, name) +values (12, 10, 'wifi', 'Feature 1') + , (13, 10, 'baby', 'Feature 2') + , (14, 11, 'castle', 'Feature 3') + , (15, 11, 'ecofriendly', 'Feature 4') +; + +insert into campsite_type_feature_i18n (campsite_type_feature_id, lang_tag, name) +values (12, 'ca', 'Característica 1') + , (12, 'es', 'ES 1') + , (13, 'ca', 'Característica 2') + , (13, 'es', 'ES 2') + , (14, 'ca', 'Característica 3') + , (14, 'es', 'ES 3') + , (15, 'ca', 'Característica 4') + , (15, 'es', 'ES 4') +; + +select lives_ok( + $$ select remove_campsite_type_feature(12) $$, + 'Should be able to delete a feature from the first campsite type' +); + +select lives_ok( + $$ select remove_campsite_type_feature(15) $$, + 'Should be able to delete a feature from the second campsite type' +); + +select bag_eq( + $$ select campsite_type_feature_id, name from campsite_type_feature $$, + $$ values (13, 'Feature 2') + , (14, 'Feature 3') + $$, + 'Should have removed the features' +); + +select bag_eq( + $$ select campsite_type_feature_id, lang_tag, name from campsite_type_feature_i18n $$, + $$ values (13, 'ca', 'Característica 2') + , (13, 'es', 'ES 2') + , (14, 'ca', 'Característica 3') + , (14, 'es', 'ES 3') + $$, + 'Should have removed the features’ translations' +); + +select * +from finish(); + +rollback; diff --git a/verify/remove_campsite_type_feature.sql b/verify/remove_campsite_type_feature.sql new file mode 100644 index 0000000..5419316 --- /dev/null +++ b/verify/remove_campsite_type_feature.sql @@ -0,0 +1,7 @@ +-- Verify camper:remove_campsite_type_feature on pg + +begin; + +select has_function_privilege('camper.remove_campsite_type_feature(integer)', 'execute'); + +rollback; diff --git a/web/templates/admin/campsite/feature/index.gohtml b/web/templates/admin/campsite/feature/index.gohtml index 30cc579..09dcac2 100644 --- a/web/templates/admin/campsite/feature/index.gohtml +++ b/web/templates/admin/campsite/feature/index.gohtml @@ -32,7 +32,7 @@ - {{ $confirm := (gettext "Are you sure you wish to delete this option?")}} + {{ $confirm := (gettext "Are you sure you wish to delete this feature?")}} {{ range .Features -}} diff --git a/web/templates/admin/campsite/type/feature/index.gohtml b/web/templates/admin/campsite/type/feature/index.gohtml index 3bb9745..5cdb10d 100644 --- a/web/templates/admin/campsite/type/feature/index.gohtml +++ b/web/templates/admin/campsite/type/feature/index.gohtml @@ -29,9 +29,11 @@ {{( pgettext "Name" "header" )}} + {{( pgettext "Actions" "header" )}} + {{ $confirm := (gettext "Are you sure you wish to delete this feature?")}} {{ range .Features -}} @@ -39,6 +41,13 @@ {{ .Name }} + + + {{- end }}