diff --git a/bemas/migrations/0008_alter_event_options_alter_event_description.py b/bemas/migrations/0008_alter_event_options_alter_event_description.py new file mode 100644 index 00000000..91bf3178 --- /dev/null +++ b/bemas/migrations/0008_alter_event_options_alter_event_description.py @@ -0,0 +1,23 @@ +# Generated by Django 5.0.4 on 2024-04-04 11:18 + +import datenmanagement.models.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('bemas', '0007_alter_complaint_dms_link_alter_event_dms_link_and_more'), + ] + + operations = [ + migrations.AlterModelOptions( + name='event', + options={'get_latest_by': 'updated_at', 'ordering': ['-complaint__id', models.OrderBy(models.F('date'), descending=True, nulls_last=True)], 'verbose_name': 'Journalereignis', 'verbose_name_plural': 'Journalereignisse'}, + ), + migrations.AlterField( + model_name='event', + name='description', + field=datenmanagement.models.fields.NullTextField(blank=True, null=True, verbose_name='Beschreibung'), + ), + ] diff --git a/datenmanagement/models/models_codelist.py b/datenmanagement/models/models_codelist.py index 7d503679..3db1a363 100644 --- a/datenmanagement/models/models_codelist.py +++ b/datenmanagement/models/models_codelist.py @@ -576,6 +576,20 @@ class BasemodelMeta(Art.BasemodelMeta): description = 'Arten von Pollern' +class Arten_Reisebusparkplaetze_Terminals(Art): + """ + Arten von Reisebusparkplätzen und -terminals + """ + + class Meta(Art.Meta): + db_table = 'codelisten\".\"arten_reisebusparkplaetze_terminals' + verbose_name = 'Art eines Reisebusparkplatzes oder -terminals' + verbose_name_plural = 'Arten von Reisebusparkplätzen und -terminals' + + class BasemodelMeta(Art.BasemodelMeta): + description = 'Arten von Reisebusparkplätzen und -terminals' + + class Arten_Toiletten(Art): """ Arten von Toiletten diff --git a/datenmanagement/models/models_simple.py b/datenmanagement/models/models_simple.py index f45a0aeb..cd8bdc19 100644 --- a/datenmanagement/models/models_simple.py +++ b/datenmanagement/models/models_simple.py @@ -37,11 +37,12 @@ Arten_Fallwildsuchen_Kontrollen, Arten_Feldsportanlagen, Arten_Feuerwachen, \ Arten_Fliessgewaesser, Arten_Hundetoiletten, Arten_Ingenieurbauwerke, \ Arten_Meldedienst_flaechenhaft, Arten_Meldedienst_punkthaft, Arten_Parkmoeglichkeiten, \ - Arten_Pflegeeinrichtungen, Arten_Poller, Arten_Toiletten, Ausfuehrungen_Ingenieurbauwerke, \ - Betriebsarten, Betriebszeiten, Bevollmaechtigte_Bezirksschornsteinfeger, \ - Bewirtschafter_Betreiber_Traeger_Eigentuemer, Gebaeudearten_Meldedienst_punkthaft, \ - Gebaeudebauweisen, Gebaeudefunktionen, Geschlechter_Kadaverfunde, Haefen, Hersteller_Poller, \ - Materialien_Denksteine, Ordnungen_Fliessgewaesser, Personentitel, Quartiere, Sportarten, \ + Arten_Pflegeeinrichtungen, Arten_Poller, Arten_Reisebusparkplaetze_Terminals, Arten_Toiletten, \ + Ausfuehrungen_Ingenieurbauwerke, Betriebsarten, Betriebszeiten, \ + Bevollmaechtigte_Bezirksschornsteinfeger, Bewirtschafter_Betreiber_Traeger_Eigentuemer, \ + Gebaeudearten_Meldedienst_punkthaft, Gebaeudebauweisen, Gebaeudefunktionen, \ + Geschlechter_Kadaverfunde, Haefen, Hersteller_Poller, Materialien_Denksteine, \ + Ordnungen_Fliessgewaesser, Personentitel, Quartiere, Sportarten, \ Status_Baudenkmale_Denkmalbereiche, Status_Poller, Tierseuchen, Typen_Abfallbehaelter, \ Typen_Erdwaermesonden, Typen_Kleinklaeranlagen, Typen_Poller, \ Verbuende_Ladestationen_Elektrofahrzeuge, Zustaende_Kadaverfunde, \ @@ -4771,6 +4772,73 @@ def __str__(self): return self.bezeichnung + (' (Nummer: ' + str(self.nummer) + ')' if self.nummer else '') +class Reisebusparkplaetze_Terminals(SimpleModel): + """ + Reisebusparkplätze und -terminals + """ + + art = ForeignKey( + to=Arten_Reisebusparkplaetze_Terminals, + verbose_name='Art', + on_delete=RESTRICT, + db_column='art', + to_field='uuid', + related_name='%(app_label)s_%(class)s_arten' + ) + bezeichnung = CharField( + verbose_name='Bezeichnung', + max_length=255, + validators=standard_validators + ) + stellplaetze = PositiveSmallIntegerMinField( + verbose_name='Stellplätze', + min_value=1 + ) + gebuehren = BooleanField( + verbose_name='Gebühren?' + ) + einschraenkungen = CharField( + verbose_name='Einschränkungen', + max_length=255, + blank=True, + null=True, + validators=standard_validators + ) + geometrie = point_field + + class Meta(SimpleModel.Meta): + db_table = 'fachdaten\".\"reisebusparkplaetze_terminals_hro' + verbose_name = 'Reisebusparkplatz oder -terminal' + verbose_name_plural = 'Reisebusparkplätze und -terminals' + + class BasemodelMeta(SimpleModel.BasemodelMeta): + description = 'Reisebusparkplätze und -terminals in der Hanse- und Universitätsstadt Rostock' + geometry_type = 'Point' + list_fields = { + 'aktiv': 'aktiv?', + 'art': 'Art', + 'bezeichnung': 'Bezeichnung', + 'stellplaetze': 'Stellplätze', + 'gebuehren': 'Gebühren', + 'einschraenkungen': 'Einschränkungen' + } + list_fields_with_foreign_key = { + 'art': 'art' + } + map_feature_tooltip_fields = ['bezeichnung'] + map_filter_fields = { + 'art': 'Art', + 'bezeichnung': 'Bezeichnung', + 'stellplaetze': 'Stellplätze', + 'gebuehren': 'Gebühren', + 'einschraenkungen': 'Einschränkungen' + } + map_filter_fields_as_list = ['art'] + + def __str__(self): + return str(self.art) + ' ' + self.bezeichnung + + class Rettungswachen(SimpleModel): """ Rettungswachen diff --git a/datenmanagement/sql/schema.sql b/datenmanagement/sql/schema.sql index 0f6c3cc2..a610e874 100644 --- a/datenmanagement/sql/schema.sql +++ b/datenmanagement/sql/schema.sql @@ -2,8 +2,8 @@ -- PostgreSQL database dump -- --- Dumped from database version 15.5 --- Dumped by pg_dump version 15.5 +-- Dumped from database version 15.6 +-- Dumped by pg_dump version 15.6 SET statement_timeout = 0; SET lock_timeout = 0; @@ -115,7 +115,7 @@ CREATE FUNCTION fachdaten.foto() RETURNS trigger AS $$ BEGIN IF NEW.foto = '' THEN - NEW.foto := NULL; + NEW.foto := NULL; END IF; RETURN NEW; END; @@ -594,6 +594,18 @@ CREATE TABLE codelisten.arten_poller ( ); +-- +-- Name: arten_reisebusparkplaetze_terminals; Type: TABLE; Schema: codelisten; Owner: - +-- + +CREATE TABLE codelisten.arten_reisebusparkplaetze_terminals ( + uuid uuid DEFAULT public.uuid_generate_v4() NOT NULL, + aktualisiert date DEFAULT (now())::date NOT NULL, + erstellt date DEFAULT (now())::date NOT NULL, + art character varying(255) NOT NULL +); + + -- -- Name: arten_toiletten; Type: TABLE; Schema: codelisten; Owner: - -- @@ -1707,24 +1719,6 @@ CREATE TABLE fachdaten.bemas_altdaten_journalereignisse ( ); --- --- Name: bluehstandorte_hro; Type: TABLE; Schema: fachdaten; Owner: - --- - -CREATE TABLE fachdaten.bluehstandorte_hro ( - uuid uuid DEFAULT public.uuid_generate_v4() NOT NULL, - aktualisiert date DEFAULT (now())::date NOT NULL, - erstellt date DEFAULT (now())::date NOT NULL, - id_fachsystem character varying(255), - aktiv boolean DEFAULT true NOT NULL, - id_zielsystem character varying(255), - deaktiviert date, - bezeichnung character varying(255) NOT NULL, - notizen character varying(1000), - geometrie public.geometry(Polygon,25833) NOT NULL -); - - -- -- Name: containerstellplaetze_hro; Type: TABLE; Schema: fachdaten; Owner: - -- @@ -1866,7 +1860,7 @@ CREATE TABLE fachdaten.erdwaermesonden_hro ( id_zielsystem character varying(255), aktiv boolean DEFAULT true NOT NULL, deaktiviert date, - d3 character(16), + d3 character varying(16), aktenzeichen character varying(18) NOT NULL, art uuid NOT NULL, typ uuid, @@ -2376,6 +2370,27 @@ CREATE TABLE fachdaten.poller_hro ( ); +-- +-- Name: reisebusparkplaetze_terminals_hro; Type: TABLE; Schema: fachdaten; Owner: - +-- + +CREATE TABLE fachdaten.reisebusparkplaetze_terminals_hro ( + uuid uuid DEFAULT public.uuid_generate_v4() NOT NULL, + aktualisiert date DEFAULT (now())::date NOT NULL, + erstellt date DEFAULT (now())::date NOT NULL, + id_fachsystem character varying(255), + id_zielsystem character varying(255), + aktiv boolean DEFAULT true NOT NULL, + deaktiviert date, + art uuid NOT NULL, + bezeichnung character varying(255) NOT NULL, + stellplaetze smallint NOT NULL, + gebuehren boolean NOT NULL, + einschraenkungen character varying(255), + geometrie public.geometry(Point,25833) NOT NULL +); + + -- -- Name: rsag_gleise_hro; Type: TABLE; Schema: fachdaten; Owner: - -- @@ -3172,7 +3187,7 @@ CREATE TABLE fachdaten_adressbezug.kleinklaeranlagen_hro ( id_zielsystem character varying(255), aktiv boolean DEFAULT true NOT NULL, adresse uuid, - d3 character(11) NOT NULL, + d3 character varying(16) NOT NULL, we_datum date NOT NULL, we_aktenzeichen character varying(255), we_befristung date, @@ -4036,6 +4051,22 @@ ALTER TABLE ONLY codelisten.arten_poller ADD CONSTRAINT arten_poller_pk PRIMARY KEY (uuid); +-- +-- Name: arten_reisebusparkplaetze_terminals arten_reisebusparkplaetze_terminals_art_unique; Type: CONSTRAINT; Schema: codelisten; Owner: - +-- + +ALTER TABLE ONLY codelisten.arten_reisebusparkplaetze_terminals + ADD CONSTRAINT arten_reisebusparkplaetze_terminals_art_unique UNIQUE (art); + + +-- +-- Name: arten_reisebusparkplaetze_terminals arten_reisebusparkplaetze_terminals_pk; Type: CONSTRAINT; Schema: codelisten; Owner: - +-- + +ALTER TABLE ONLY codelisten.arten_reisebusparkplaetze_terminals + ADD CONSTRAINT arten_reisebusparkplaetze_terminals_pk PRIMARY KEY (uuid); + + -- -- Name: arten_toiletten arten_toiletten_art_unique; Type: CONSTRAINT; Schema: codelisten; Owner: - -- @@ -5332,14 +5363,6 @@ ALTER TABLE ONLY fachdaten.bemas_altdaten_journalereignisse ADD CONSTRAINT bemas_altdaten_journalereignisse_pk PRIMARY KEY (uuid); --- --- Name: bluehstandorte_hro bluehstandorte_hro_pk; Type: CONSTRAINT; Schema: fachdaten; Owner: - --- - -ALTER TABLE ONLY fachdaten.bluehstandorte_hro - ADD CONSTRAINT bluehstandorte_hro_pk PRIMARY KEY (uuid); - - -- -- Name: containerstellplaetze_hro containerstellplaetze_hro_id_unique; Type: CONSTRAINT; Schema: fachdaten; Owner: - -- @@ -5612,6 +5635,14 @@ ALTER TABLE ONLY fachdaten.poller_hro ADD CONSTRAINT poller_hro_pk PRIMARY KEY (uuid); +-- +-- Name: reisebusparkplaetze_terminals_hro reisebusparkplaetze_terminals_hro_pk; Type: CONSTRAINT; Schema: fachdaten; Owner: - +-- + +ALTER TABLE ONLY fachdaten.reisebusparkplaetze_terminals_hro + ADD CONSTRAINT reisebusparkplaetze_terminals_hro_pk PRIMARY KEY (uuid); + + -- -- Name: rsag_gleise_hro rsag_gleise_hro_pkey; Type: CONSTRAINT; Schema: fachdaten; Owner: - -- @@ -6858,6 +6889,14 @@ ALTER TABLE ONLY fachdaten.poller_hro ADD CONSTRAINT poller_hro_typen_fk FOREIGN KEY (typ) REFERENCES codelisten.typen_poller(uuid) MATCH FULL ON UPDATE CASCADE ON DELETE SET NULL; +-- +-- Name: reisebusparkplaetze_terminals_hro reisebusparkplaetze_terminals_hro_arten_fk; Type: FK CONSTRAINT; Schema: fachdaten; Owner: - +-- + +ALTER TABLE ONLY fachdaten.reisebusparkplaetze_terminals_hro + ADD CONSTRAINT reisebusparkplaetze_terminals_hro_arten_fk FOREIGN KEY (art) REFERENCES codelisten.arten_reisebusparkplaetze_terminals(uuid) MATCH FULL ON UPDATE CASCADE ON DELETE RESTRICT; + + -- -- Name: rsag_masten_hro rsag_masten_hro_fundamenttypen_fk; Type: FK CONSTRAINT; Schema: fachdaten; Owner: - -- diff --git a/datenmanagement/tests/test_models_codelist.py b/datenmanagement/tests/test_models_codelist.py index 0dc3092f..3650feda 100644 --- a/datenmanagement/tests/test_models_codelist.py +++ b/datenmanagement/tests/test_models_codelist.py @@ -5,8 +5,9 @@ Arten_Fallwildsuchen_Kontrollen, Arten_Feldsportanlagen, Arten_Feuerwachen, \ Arten_Fliessgewaesser, Arten_Hundetoiletten, Arten_Ingenieurbauwerke, \ Arten_Meldedienst_flaechenhaft, Arten_Meldedienst_punkthaft, Arten_Parkmoeglichkeiten, \ - Arten_Pflegeeinrichtungen, Arten_Poller, Arten_Toiletten, Arten_UVP_Vorpruefungen, Arten_Wege, \ - Auftraggeber_Baustellen, Ausfuehrungen_Haltestellenkataster, Ausfuehrungen_Ingenieurbauwerke, \ + Arten_Pflegeeinrichtungen, Arten_Poller, Arten_Reisebusparkplaetze_Terminals, Arten_Toiletten, \ + Arten_UVP_Vorpruefungen, Arten_Wege, Auftraggeber_Baustellen, \ + Ausfuehrungen_Haltestellenkataster, Ausfuehrungen_Ingenieurbauwerke, \ Befestigungsarten_Aufstellflaeche_Bus_Haltestellenkataster, \ Befestigungsarten_Warteflaeche_Haltestellenkataster, Betriebsarten, Betriebszeiten, \ Bevollmaechtigte_Bezirksschornsteinfeger, Bewirtschafter_Betreiber_Traeger_Eigentuemer, \ @@ -2845,6 +2846,133 @@ def test_view_deleteimmediately(self): ) +class ArtenReisebusparkplaetzeTerminalsTest(DefaultCodelistTestCase): + """ + Arten von Reisebusparkplätzen und -terminals + """ + + model = Arten_Reisebusparkplaetze_Terminals + create_test_subset_in_classmethod = False + attributes_values_db_initial = { + 'art': 'Art1' + } + attributes_values_db_updated = { + 'art': 'Art2' + } + attributes_values_view_initial = { + 'art': 'Art3' + } + attributes_values_view_updated = { + 'art': 'Art4' + } + attributes_values_view_invalid = { + 'art': INVALID_STRING + } + + def setUp(self): + self.init() + + def test_is_codelist(self): + self.generic_is_codelist_test() + + def test_create(self): + self.generic_create_test(self.model, self.attributes_values_db_initial) + + def test_update(self): + self.generic_update_test(self.model, self.attributes_values_db_updated) + + def test_delete(self): + self.generic_delete_test(self.model) + + def test_view_start(self): + self.generic_view_test( + self.model, + self.model.__name__ + '_start', + {}, + 200, + 'text/html; charset=utf-8', + START_VIEW_STRING + ) + + def test_view_list(self): + self.generic_view_test( + self.model, + self.model.__name__ + '_list', + {}, + 200, + 'text/html; charset=utf-8', + LIST_VIEW_STRING + ) + + def test_view_data(self): + self.generic_view_test( + self.model, + self.model.__name__ + '_data', + DATA_VIEW_PARAMS, + 200, + 'application/json', + str(self.test_object.pk) + ) + + def test_view_add_success(self): + self.generic_add_update_view_test( + False, + self.model, + self.attributes_values_view_initial, + 302, + 'text/html; charset=utf-8', + 1 + ) + + def test_view_add_error(self): + self.generic_add_update_view_test( + False, + self.model, + self.attributes_values_view_invalid, + 200, + 'text/html; charset=utf-8', + 0 + ) + + def test_view_change_success(self): + self.generic_add_update_view_test( + True, + self.model, + self.attributes_values_view_updated, + 302, + 'text/html; charset=utf-8', + 1 + ) + + def test_view_change_error(self): + self.generic_add_update_view_test( + True, + self.model, + self.attributes_values_view_invalid, + 200, + 'text/html; charset=utf-8', + 0 + ) + + def test_view_delete(self): + self.generic_delete_view_test( + False, + self.model, + self.attributes_values_db_initial, + 302, + 'text/html; charset=utf-8' + ) + + def test_view_deleteimmediately(self): + self.generic_delete_view_test( + True, + self.model, + self.attributes_values_db_initial, + 204, + 'text/html; charset=utf-8' + ) + + class ArtenToilettenTest(DefaultCodelistTestCase): """ Arten von Toiletten diff --git a/datenmanagement/tests/test_models_simple.py b/datenmanagement/tests/test_models_simple.py index a39cf8b5..47370cea 100644 --- a/datenmanagement/tests/test_models_simple.py +++ b/datenmanagement/tests/test_models_simple.py @@ -6,7 +6,8 @@ Arten_Fahrradabstellanlagen, Arten_FairTrade, Arten_Fallwildsuchen_Kontrollen, \ Arten_Feldsportanlagen, Arten_Feuerwachen, Arten_Fliessgewaesser, Arten_Hundetoiletten, \ Arten_Ingenieurbauwerke, Arten_Meldedienst_flaechenhaft, Arten_Meldedienst_punkthaft, \ - Arten_Parkmoeglichkeiten, Arten_Pflegeeinrichtungen, Arten_Poller, Arten_Toiletten, \ + Arten_Parkmoeglichkeiten, Arten_Pflegeeinrichtungen, Arten_Poller, \ + Arten_Reisebusparkplaetze_Terminals, Arten_Toiletten, \ Aufteilungsplaene_Wohnungseigentumsgesetz, Baudenkmale, Behinderteneinrichtungen, \ Beschluesse_Bau_Planungsausschuss, Betriebsarten, Betriebszeiten, \ Bevollmaechtigte_Bezirksschornsteinfeger, Bewirtschafter_Betreiber_Traeger_Eigentuemer, \ @@ -18,9 +19,9 @@ Kinder_Jugendbetreuung, Kleinklaeranlagen, Kunst_im_oeffentlichen_Raum, \ Ladestationen_Elektrofahrzeuge, Materialien_Denksteine, Meldedienst_flaechenhaft, \ Meldedienst_punkthaft, Mobilpunkte, Parkmoeglichkeiten, Pflegeeinrichtungen, Poller, Quartiere, \ - Reinigungsreviere, Rettungswachen, Schiffsliegeplaetze, Schlagwoerter_Bildungstraeger, \ - Schlagwoerter_Vereine, Schutzzaeune_Tierseuchen, Sportarten, Sporthallen, \ - Stadtteil_Begegnungszentren, Standortqualitaeten_Geschaeftslagen_Sanierungsgebiet, \ + Reinigungsreviere, Reisebusparkplaetze_Terminals, Rettungswachen, Schiffsliegeplaetze, \ + Schlagwoerter_Bildungstraeger, Schlagwoerter_Vereine, Schutzzaeune_Tierseuchen, Sportarten, \ + Sporthallen, Stadtteil_Begegnungszentren, Standortqualitaeten_Geschaeftslagen_Sanierungsgebiet, \ Standortqualitaeten_Wohnlagen_Sanierungsgebiet, Status_Baudenkmale_Denkmalbereiche, \ Status_Poller, Strassen, Thalasso_Kurwege, Tierseuchen, Toiletten, Trinkwassernotbrunnen, \ Typen_Kleinklaeranlagen, Verbuende_Ladestationen_Elektrofahrzeuge, Vereine, \ @@ -9712,6 +9713,249 @@ def test_view_geometry_lat_lng(self): ) +class ReisebusparkplaetzeTerminalsTest(DefaultSimpleModelTestCase): + """ + Reisebusparkplätze und -terminals + """ + + model = Reisebusparkplaetze_Terminals + create_test_object_in_classmethod = False + create_test_subset_in_classmethod = False + + @classmethod + def setUpTestData(cls): + super().setUpTestData() + art = Arten_Reisebusparkplaetze_Terminals.objects.create( + art='Art' + ) + cls.attributes_values_db_initial = { + 'art': art, + 'bezeichnung': 'Bezeichnung1', + 'stellplaetze': 23, + 'gebuehren': False, + 'geometrie': VALID_POINT_DB + } + cls.attributes_values_db_updated = { + 'bezeichnung': 'Bezeichnung2' + } + cls.attributes_values_view_initial = { + 'aktiv': True, + 'art': str(art.pk), + 'bezeichnung': 'Bezeichnung3', + 'stellplaetze': 42, + 'gebuehren': True, + 'geometrie': VALID_POINT_VIEW + } + cls.attributes_values_view_updated = { + 'aktiv': True, + 'art': str(art.pk), + 'bezeichnung': 'Bezeichnung4', + 'stellplaetze': 99, + 'gebuehren': False, + 'geometrie': VALID_POINT_VIEW + } + cls.attributes_values_view_invalid = { + 'bezeichnung': INVALID_STRING + } + cls.test_object = cls.model.objects.create(**cls.attributes_values_db_initial) + cls.test_subset = create_test_subset(cls.model, cls.test_object) + + def setUp(self): + self.init() + + def test_is_simplemodel(self): + self.generic_is_simplemodel_test() + + def test_create(self): + self.generic_create_test(self.model, self.attributes_values_db_initial) + + def test_update(self): + self.generic_update_test(self.model, self.attributes_values_db_updated) + + def test_delete(self): + self.generic_delete_test(self.model) + + def test_view_start(self): + self.generic_view_test( + self.model, + self.model.__name__ + '_start', + {}, + 200, + 'text/html; charset=utf-8', + START_VIEW_STRING + ) + + def test_view_list(self): + self.generic_view_test( + self.model, + self.model.__name__ + '_list', + {}, + 200, + 'text/html; charset=utf-8', + LIST_VIEW_STRING + ) + + def test_view_list_subset(self): + self.generic_view_test( + self.model, + self.model.__name__ + '_list_subset', + {'subset_id': self.test_subset.pk}, + 200, + 'text/html; charset=utf-8', + LIST_VIEW_STRING + ) + + def test_view_data(self): + self.generic_view_test( + self.model, + self.model.__name__ + '_data', + DATA_VIEW_PARAMS, + 200, + 'application/json', + str(self.test_object.pk) + ) + + def test_view_data_subset(self): + data_subset_view_params = DATA_VIEW_PARAMS.copy() + data_subset_view_params['subset_id'] = self.test_subset.pk + self.generic_view_test( + self.model, + self.model.__name__ + '_data_subset', + data_subset_view_params, + 200, + 'application/json', + str(self.test_object.pk) + ) + + def test_view_map(self): + self.generic_view_test( + self.model, + self.model.__name__ + '_map', + {}, + 200, + 'text/html; charset=utf-8', + MAP_VIEW_STRING + ) + + def test_view_map_subset(self): + self.generic_view_test( + self.model, + self.model.__name__ + '_map_subset', + {'subset_id': self.test_subset.pk}, + 200, + 'text/html; charset=utf-8', + MAP_VIEW_STRING + ) + + def test_view_mapdata(self): + self.generic_view_test( + self.model, + self.model.__name__ + '_mapdata', + {}, + 200, + 'application/json', + str(self.test_object.pk) + ) + + def test_view_mapdata_subset(self): + self.generic_view_test( + self.model, + self.model.__name__ + '_mapdata_subset', + {'subset_id': self.test_subset.pk}, + 200, + 'application/json', + str(self.test_object.pk) + ) + + def test_view_add_success(self): + self.generic_add_update_view_test( + False, + self.model, + self.attributes_values_view_initial, + 302, + 'text/html; charset=utf-8', + 1 + ) + + def test_view_add_error(self): + self.generic_add_update_view_test( + False, + self.model, + self.attributes_values_view_invalid, + 200, + 'text/html; charset=utf-8', + 0 + ) + + def test_view_change_success(self): + self.generic_add_update_view_test( + True, + self.model, + self.attributes_values_view_updated, + 302, + 'text/html; charset=utf-8', + 1 + ) + + def test_view_change_error(self): + self.generic_add_update_view_test( + True, + self.model, + self.attributes_values_view_invalid, + 200, + 'text/html; charset=utf-8', + 0 + ) + + def test_view_delete(self): + self.generic_delete_view_test( + False, + self.model, + self.attributes_values_db_initial, + 302, + 'text/html; charset=utf-8' + ) + + def test_view_deleteimmediately(self): + self.generic_delete_view_test( + True, + self.model, + self.attributes_values_db_initial, + 204, + 'text/html; charset=utf-8' + ) + + def test_view_geometry(self): + self.generic_view_test( + self.model, + self.model.__name__ + '_geometry', + {}, + 200, + 'application/json', + str(self.test_object.pk) + ) + + def test_view_geometry_pk(self): + self.generic_view_test( + self.model, + self.model.__name__ + '_geometry', + {'pk': str(self.test_object.pk)}, + 200, + 'application/json', + str(self.test_object.pk) + ) + + def test_view_geometry_lat_lng(self): + self.generic_view_test( + self.model, + self.model.__name__ + '_geometry', + GEOMETRY_VIEW_PARAMS, + 200, + 'application/json', + str(self.test_object.pk) + ) + + class RettungswachenTest(DefaultSimpleModelTestCase): """ Rettungswachen