Skip to content

Commit 25af608

Browse files
committed
add hierarchy tests
1 parent badc00e commit 25af608

File tree

2 files changed

+259
-2
lines changed

2 files changed

+259
-2
lines changed

backend/gn_module_zh/tests/fixtures.py

Lines changed: 222 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,106 @@
88
import uuid
99

1010

11+
def printobj(obj):
12+
print("\n\n\nObj => ")
13+
for key, value in obj.__dict__.items():
14+
# if not key.startswith('_'): # Ignore les attributs privés
15+
print(f"{key}: {value}")
16+
print("\n\n\n")
17+
18+
19+
def create_river_basin(id_rb, name, geom, id_climate_class, id_river_flow):
20+
from gn_module_zh.model.zh_schema import TRiverBasin
21+
22+
rb = TRiverBasin(
23+
id_rb=id_rb,
24+
name=name,
25+
geom=geom,
26+
id_climate_class=id_climate_class,
27+
id_river_flow=id_river_flow,
28+
)
29+
return rb
30+
31+
32+
def create_t_rules(rule_id, abbreviation, pane_id, cat_id, subcat_id):
33+
from gn_module_zh.model.zh_schema import TRules
34+
35+
rule = TRules(
36+
rule_id=rule_id,
37+
abbreviation=abbreviation,
38+
pane_id=pane_id,
39+
cat_id=cat_id,
40+
subcat_id=subcat_id,
41+
)
42+
return rule
43+
44+
45+
def create_item(
46+
val_id,
47+
cor_rule_id,
48+
attribute_id,
49+
note,
50+
note_type_id,
51+
):
52+
from gn_module_zh.model.zh_schema import TItems
53+
54+
item = TItems(
55+
val_id=val_id,
56+
cor_rule_id=cor_rule_id,
57+
attribute_id=attribute_id,
58+
note=note,
59+
note_type_id=note_type_id,
60+
)
61+
return item
62+
63+
64+
def create_cor_rb_rules(cor_rule_id, rb_id, rule_id):
65+
from gn_module_zh.model.zh_schema import CorRbRules
66+
67+
cor_rb_rule = CorRbRules(cor_rule_id=cor_rule_id, rb_id=rb_id, rule_id=rule_id)
68+
return cor_rb_rule
69+
70+
71+
@pytest.fixture(scope="function")
72+
def rb_data(users):
73+
coords = (
74+
(-6.811523, 42.228517),
75+
(9.799805, 42.228517),
76+
(9.799805, 51.454007),
77+
(-6.811523, 51.454007),
78+
(-6.811523, 42.228517),
79+
)
80+
polygon = Polygon(coords)
81+
data = {}
82+
with db.session.begin_nested():
83+
for (
84+
id_rb,
85+
name,
86+
geom,
87+
id_climate_class,
88+
id_river_flow,
89+
) in [
90+
(
91+
1,
92+
"rb1",
93+
geoalchemy2.shape.from_shape(polygon),
94+
None,
95+
None,
96+
),
97+
]:
98+
kwargs = {}
99+
s = create_river_basin(
100+
id_rb,
101+
name,
102+
geom,
103+
id_climate_class,
104+
id_river_flow,
105+
)
106+
db.session.add(s)
107+
data[name] = s
108+
return data
109+
110+
11111
def create_zh(
12112
main_name,
13113
code,
@@ -18,6 +118,7 @@ def create_zh(
18118
id_sdage,
19119
polygon,
20120
zh_area,
121+
main_id_rb,
21122
**kwargs,
22123
):
23124
# Import here because TZH class need to be imported after "app instanced"
@@ -35,18 +136,134 @@ def create_zh(
35136
id_sdage=id_sdage,
36137
geom=polygon,
37138
area=zh_area,
139+
main_id_rb=main_id_rb,
38140
)
39141
return zh
40142

41143

42144
@pytest.fixture(scope="function")
43145
def zh_data(users):
44-
coords = ((0.0, 0.0), (0.0, 1.0), (1.0, 1.0), (1.0, 0.0), (0.0, 0.0))
146+
coords = (
147+
(-6.811523, 42.228517),
148+
(9.799805, 42.228517),
149+
(9.799805, 51.454007),
150+
(-6.811523, 51.454007),
151+
(-6.811523, 42.228517),
152+
)
153+
polygon = Polygon(coords)
154+
rb = create_river_basin(1, "rb1", geoalchemy2.shape.from_shape(polygon), None, None)
155+
db.session.add(rb)
156+
157+
cor_sdage_rule = create_cor_rb_rules(1, 1, 1)
158+
db.session.add(cor_sdage_rule)
159+
item = create_item(1, cor_sdage_rule.rule_id, cor_sdage_rule.rule_id, 75, 1)
160+
db.session.add(item)
161+
162+
# cor_hab_rule = create_cor_rb_rules(2, 1, 2)
163+
# db.session.add(cor_hab_rule)
164+
# item = create_item(2, cor_hab_rule.rule_id, cor_hab_rule.rule_id, 75, 1)
165+
# db.session.add(item)
166+
#
167+
# cor_flore_rule = create_cor_rb_rules(3, 1, 3)
168+
# db.session.add(cor_flore_rule)
169+
# item = create_item(3, cor_flore_rule.rule_id, cor_flore_rule.rule_id, 75, 1)
170+
# db.session.add(item)
171+
172+
# cor_vertebrates_rule = create_cor_rb_rules(4, 1, 4)
173+
# db.session.add(cor_vertebrates_rule)
174+
# item = create_item(4, cor_vertebrates_rule.rule_id, cor_vertebrates_rule.rule_id, 75, 1)
175+
# db.session.add(item)
176+
177+
# cor_invertebrates_rule = create_cor_rb_rules(5, 1, 5)
178+
# db.session.add(cor_invertebrates_rule)
179+
# item = create_item(5, cor_invertebrates_rule.rule_id, cor_invertebrates_rule.rule_id, 75, 1)
180+
# db.session.add(item)
181+
182+
# cor_eco_rule = create_cor_rb_rules(6, 1, 6)
183+
# db.session.add(cor_eco_rule)
184+
# item = create_item(6, cor_eco_rule.rule_id, cor_eco_rule.rule_id, 75, 1)
185+
# db.session.add(item)
186+
187+
# cor_protection_rule = create_cor_rb_rules(7, 1, 7)
188+
# db.session.add(cor_protection_rule)
189+
# item = create_item(7, cor_protection_rule.rule_id, cor_protection_rule.rule_id, 75, 1)
190+
# db.session.add(item)
191+
192+
# cor_epuration_rule = create_cor_rb_rules(8, 1, 8)
193+
# db.session.add(cor_epuration_rule)
194+
# item = create_item(8, cor_epuration_rule.rule_id, cor_epuration_rule.rule_id, 75, 1)
195+
# db.session.add(item)
196+
197+
# cor_support_rule = create_cor_rb_rules(9, 1, 9)
198+
# db.session.add(cor_support_rule)
199+
# item = create_item(9, cor_support_rule.rule_id, cor_support_rule.rule_id, 75, 1)
200+
# db.session.add(item)
201+
202+
# cor_pedagogy_rule = create_cor_rb_rules(10, 1, 10)
203+
# db.session.add(cor_pedagogy_rule)
204+
# item = create_item(10, cor_pedagogy_rule.rule_id, cor_pedagogy_rule.rule_id, 75, 1)
205+
# db.session.add(item)
206+
207+
# cor_production_rule = create_cor_rb_rules(11, 1, 11)
208+
# db.session.add(cor_production_rule)
209+
# item = create_item(11, cor_production_rule.rule_id, cor_production_rule.rule_id, 75, 1)
210+
# db.session.add(item)
211+
212+
# cor_status_rule = create_cor_rb_rules(12, 1, 12)
213+
# db.session.add(cor_status_rule)
214+
# item = create_item(12, cor_status_rule.rule_id, cor_status_rule.rule_id, 75, 1)
215+
# db.session.add(item)
216+
217+
# cor_management_rule = create_cor_rb_rules(13, 1, 13)
218+
# db.session.add(cor_management_rule)
219+
# item = create_item(13, cor_management_rule.rule_id, cor_management_rule.rule_id, 75, 1)
220+
# db.session.add(item)
221+
222+
# cor_hydro_rule = create_cor_rb_rules(14, 1, 14)
223+
# db.session.add(cor_hydro_rule)
224+
# item = create_item(14, cor_hydro_rule.rule_id, cor_hydro_rule.rule_id, 75, 1)
225+
# db.session.add(item)
226+
227+
# cor_bio_rule = create_cor_rb_rules(15, 1, 15)
228+
# db.session.add(cor_bio_rule)
229+
# item = create_item(15, cor_bio_rule.rule_id, cor_bio_rule.rule_id, 75, 1)
230+
# db.session.add(item)
231+
232+
# cor_thread_rule = create_cor_rb_rules(16, 1, 16)
233+
# db.session.add(cor_thread_rule)
234+
# item = create_item(16, cor_thread_rule.rule_id, cor_thread_rule.rule_id, 75, 1)
235+
# db.session.add(item)
236+
237+
coords = (
238+
(1.307287, 43.56357),
239+
(1.312222, 43.56357),
240+
(1.312222, 43.566182),
241+
(1.307287, 43.566182),
242+
(1.307287, 43.56357),
243+
)
45244
polygon = Polygon(coords)
46245
date = datetime.datetime(2024, 10, 2, 11, 22, 33)
47-
id_sdage = 967
246+
id_sdage = cor_sdage_rule.rule_id
247+
# hab =
248+
# flore =
249+
# vertebrates =
250+
# invertebrates =
251+
# eco =
252+
# protection =
253+
# epuration =
254+
# support =
255+
# pedagogy =
256+
# production =
257+
# status =
258+
# management =
259+
# hydro =
260+
# bio =
261+
# thread =
262+
48263
user = users["self_user"]
49264
data = {}
265+
data["rb1"] = rb
266+
data["cor_rule"] = cor_sdage_rule
50267
with db.session.begin_nested():
51268
for (
52269
main_name,
@@ -58,6 +275,7 @@ def zh_data(users):
58275
id_sdage,
59276
geom,
60277
zh_area,
278+
main_id_rb,
61279
) in [
62280
(
63281
"zh1",
@@ -69,6 +287,7 @@ def zh_data(users):
69287
id_sdage,
70288
geoalchemy2.shape.from_shape(polygon),
71289
polygon.area,
290+
1,
72291
),
73292
]:
74293
kwargs = {}
@@ -82,6 +301,7 @@ def zh_data(users):
82301
id_sdage,
83302
geom,
84303
zh_area,
304+
main_id_rb,
85305
**kwargs,
86306
)
87307
db.session.add(s)
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from pypnusershub.tests.utils import set_logged_user
2+
3+
from flask import url_for
4+
5+
from geonature.tests.fixtures import *
6+
from .fixtures import *
7+
8+
9+
def printobj(obj):
10+
print("\n\n\nObj => ")
11+
for key, value in obj.__dict__.items():
12+
# if not key.startswith('_'): # Ignore les attributs privés
13+
print(f"{key}: {value}")
14+
print("\n\n\n")
15+
16+
17+
@pytest.mark.usefixtures("client_class")
18+
class TestHierarchisation:
19+
def test_hierarchisation(self, users, zh_data):
20+
21+
from gn_module_zh.model.zh import ZH
22+
23+
set_logged_user(self.client, users["self_user"])
24+
zh = ZH(zh_data.get("zh1").id_zh)
25+
printobj(zh_data.get("zh1"))
26+
27+
db.session.execute("REFRESH MATERIALIZED VIEW pr_zh.rb_notes_summary;")
28+
29+
response = self.client.get(url_for("pr_zh.get_hierarchy", id_zh=zh_data.get("zh1").id_zh))
30+
data = response.get_json()
31+
print("data:", data)
32+
assert response.status_code == 200
33+
# assert len(data["items"]["features"]) > 0
34+
35+
# assert response.status_code == 200
36+
# data = response.get_json()
37+
# assert len(data["items"]["features"]) == 0

0 commit comments

Comments
 (0)