Skip to content

Commit 8a672e8

Browse files
committed
Add 5 tests
1 parent b5d45d1 commit 8a672e8

File tree

4 files changed

+143
-0
lines changed

4 files changed

+143
-0
lines changed

backend/gn_module_zh/tests/__init__.py

Whitespace-only changes.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from geonature.tests.fixtures import *
2+
from geonature.tests.fixtures import _session, app, users, _app
3+
from geonature.tests.test_permissions import g_permissions
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
import datetime
2+
import pytest
3+
from geonature.utils.env import db
4+
5+
from shapely import Polygon
6+
import geoalchemy2
7+
8+
import uuid
9+
10+
11+
def create_zh(
12+
main_name,
13+
code,
14+
id_org,
15+
id_role,
16+
zh_date,
17+
uuid_id_lim_list,
18+
id_sdage,
19+
polygon,
20+
zh_area,
21+
**kwargs,
22+
):
23+
# Import here because TZH class need to be imported after "app instanced"
24+
from gn_module_zh.model.zh_schema import TZH
25+
26+
zh = TZH(
27+
main_name=main_name,
28+
code=code,
29+
id_org=id_org,
30+
create_author=id_role,
31+
update_author=id_role,
32+
create_date=zh_date,
33+
update_date=zh_date,
34+
id_lim_list=uuid_id_lim_list,
35+
id_sdage=id_sdage,
36+
geom=polygon,
37+
area=zh_area,
38+
)
39+
return zh
40+
41+
42+
@pytest.fixture(scope="function")
43+
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))
45+
polygon = Polygon(coords)
46+
date = datetime.datetime(2024, 10, 2, 11, 22, 33)
47+
id_sdage = 967
48+
user = users["self_user"]
49+
data = {}
50+
with db.session.begin_nested():
51+
for (
52+
main_name,
53+
code,
54+
id_org,
55+
id_role,
56+
zh_date,
57+
uuid_id_lim_list,
58+
id_sdage,
59+
geom,
60+
zh_area,
61+
) in [
62+
(
63+
"zh1",
64+
"05CEN0189",
65+
2, # id_org = 2 (not dynamic) because not same table bib_organismes used with the users
66+
user.id_role,
67+
date,
68+
uuid.uuid4(),
69+
id_sdage,
70+
geoalchemy2.shape.from_shape(polygon),
71+
polygon.area,
72+
),
73+
]:
74+
kwargs = {}
75+
s = create_zh(
76+
main_name,
77+
code,
78+
id_org,
79+
id_role,
80+
zh_date,
81+
uuid_id_lim_list,
82+
id_sdage,
83+
geom,
84+
zh_area,
85+
**kwargs,
86+
)
87+
db.session.add(s)
88+
data[main_name] = s
89+
return data
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
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+
@pytest.mark.usefixtures("client_class")
10+
class TestBdd:
11+
def test_no_zh(self, users):
12+
set_logged_user(self.client, users["self_user"])
13+
response = self.client.get(url_for("pr_zh.get_zh"))
14+
assert response.status_code == 200
15+
data = response.get_json()
16+
assert len(data["items"]["features"]) == 0
17+
18+
def test_get_zh(self, users, zh_data):
19+
set_logged_user(self.client, users["self_user"])
20+
response = self.client.get(url_for("pr_zh.get_zh"))
21+
assert response.status_code == 200
22+
data = response.get_json()
23+
assert len(data["items"]["features"]) > 0
24+
25+
def test_get_zh_by_id(self, users, zh_data):
26+
set_logged_user(self.client, users["self_user"])
27+
response = self.client.get(url_for("pr_zh.get_zh_by_id", id_zh=zh_data.get("zh1").id_zh))
28+
assert response.status_code == 200
29+
data = response.get_json()
30+
assert data["properties"]["id_zh"] == zh_data.get("zh1").id_zh
31+
assert data["properties"]["main_name"] == zh_data.get("zh1").main_name
32+
33+
def test_get_zh_by_id_not_found(self, users):
34+
set_logged_user(self.client, users["self_user"])
35+
response = self.client.get(url_for("pr_zh.get_zh_by_id", id_zh=999999))
36+
# TODO: renvoie une 500 si la zone de protection n'existe pas ce serait préférable une 404
37+
assert response.status_code == 500
38+
# data = response.get_json()
39+
# print("data:", data)
40+
# assert data["message"] == "Zone de protection non trouvée"
41+
42+
def test_get_zh_by_id_no_auth(self, users, zh_data):
43+
set_logged_user(self.client, users["noright_user"])
44+
response = self.client.get(url_for("pr_zh.get_zh_by_id", id_zh=zh_data.get("zh1").id_zh))
45+
assert response.status_code == 403
46+
data = response.get_json()
47+
assert data["code"] == 403
48+
assert (
49+
data["description"]
50+
== f"User {users['noright_user'].get_id()} has no permissions to R in ZONES_HUMIDES"
51+
)

0 commit comments

Comments
 (0)