Skip to content

Commit 09aa9c2

Browse files
committed
Backend test : use generic fixture user
1 parent d5fb87b commit 09aa9c2

4 files changed

Lines changed: 91 additions & 98 deletions

File tree

backend/gn_module_monitoring/tests/fixtures/generic.py

Lines changed: 69 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99
Permission,
1010
)
1111
from geonature.core.gn_commons.models import TModules
12+
from gn_module_monitoring.monitoring.models import TMonitoringModules
1213

14+
from geonature.tests.fixtures import users
1315
from pypnusershub.db.models import User
1416
from pypnusershub.db.models import (
1517
User,
@@ -20,21 +22,60 @@
2022
)
2123

2224

23-
@pytest.fixture(scope="session")
24-
def monitorings_users(app):
25-
app = db.session.execute(
26-
select(Application).where(Application.code_application == "GN")
27-
).scalar_one()
28-
profil = db.session.execute(select(Profil).where(Profil.nom_profil == "Lecteur")).scalar_one()
25+
def add_user_permission(module_code, user, scope, type_code_object, code_action="CRUVED"):
26+
"""
27+
Add permissions to a user in a module.
2928
30-
modules = db.session.scalars(select(TModules)).all()
29+
Parameters
30+
----------
31+
module_code : str
32+
Code of the module to add the permission to.
33+
user : User
34+
User to add the permission to.
35+
scope : int
36+
Scope value for the permission.
37+
type_code_object : str
38+
Type of the object to add the permission to.
39+
code_action : str, optional
40+
Code of the action to add the permission for. Default is "CRUVED".
3141
42+
Notes
43+
-----
44+
The function will add the permission to the specified module and object with the given scope.
45+
If the scope is 3, the scope_value will be set to None.
46+
"""
47+
module = db.session.execute(
48+
select(TModules).where(TModules.module_code == module_code)
49+
).scalar_one()
3250
actions = {
3351
code: db.session.execute(
3452
select(PermAction).where(PermAction.code_action == code)
3553
).scalar_one()
36-
for code in "CRUVED"
54+
for code in code_action
3755
}
56+
with db.session.begin_nested():
57+
if scope > 0:
58+
object_all = db.session.scalars(
59+
select(PermObject).where(PermObject.code_object == type_code_object)
60+
).all()
61+
for action in actions.values():
62+
for obj in object_all + module.objects:
63+
permission = Permission(
64+
role=user,
65+
action=action,
66+
module=module,
67+
object=obj,
68+
scope_value=scope if scope != 3 else None,
69+
sensitivity_filter=None,
70+
)
71+
db.session.add(permission)
72+
73+
74+
@pytest.fixture
75+
def monitorings_users(users):
76+
77+
modules = db.session.scalars(select(TModules)).all()
78+
3879
type_code_object = [
3980
"MONITORINGS_MODULES",
4081
"MONITORINGS_GRP_SITES",
@@ -43,60 +84,31 @@ def monitorings_users(app):
4384
"ALL",
4485
]
4586

46-
def create_user(username, organisme=None, scope=None, sensitivity_filter=False):
47-
# do not commit directly on current transaction, as we want to rollback all changes at the end of tests
48-
with db.session.begin_nested():
49-
user = User(
50-
groupe=False,
51-
active=True,
52-
organisme=organisme,
53-
identifiant=username,
54-
password=username,
55-
nom_role=username,
56-
prenom_role=username,
57-
)
58-
db.session.add(user)
59-
# user must have been commited for user.id_role to be defined
60-
with db.session.begin_nested():
61-
# login right
62-
right = UserApplicationRight(
63-
id_role=user.id_role, id_application=app.id_application, id_profil=profil.id_profil
64-
)
65-
db.session.add(right)
66-
if scope > 0:
67-
for co in type_code_object:
68-
object_all = db.session.scalars(
69-
select(PermObject).where(PermObject.code_object == co)
70-
).all()
71-
for action in actions.values():
72-
for module in modules:
73-
for obj in object_all + module.objects:
74-
permission = Permission(
75-
role=user,
76-
action=action,
77-
module=module,
78-
object=obj,
79-
scope_value=scope if scope != 3 else None,
80-
sensitivity_filter=sensitivity_filter,
81-
)
82-
db.session.add(permission)
83-
return user
87+
def add_monitoring_permissions(user, scope=None, sensitivity_filter=False):
88+
for code_object in type_code_object:
89+
for module in modules:
90+
add_user_permission(
91+
module.module_code,
92+
user,
93+
scope=scope,
94+
type_code_object=code_object,
95+
code_action="CRUVD",
96+
)
8497

85-
users = {}
98+
return user
8699

87-
organisme = Organisme(nom_organisme="Autre")
88-
db.session.add(organisme)
100+
monitoring_users = {}
89101

90102
users_to_create = [
91-
("noright_user", organisme, 0),
92-
("stranger_user", None, 2),
93-
("associate_user", organisme, 2),
94-
("self_user", organisme, 1),
95-
("user", organisme, 2),
96-
("admin_user", organisme, 3),
103+
("noright_user", 0),
104+
("stranger_user", 2),
105+
("associate_user", 2),
106+
("self_user", 1),
107+
("user", 2),
108+
("admin_user", 3),
97109
]
98110

99111
for username, *args in users_to_create:
100-
users[username] = create_user(username, *args)
112+
monitoring_users[username] = add_monitoring_permissions(users[username], *args)
101113

102-
return users
114+
return monitoring_users

backend/gn_module_monitoring/tests/test_routes/test_monitoring.py

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -13,35 +13,6 @@
1313
from pypnusershub.tests.utils import set_logged_user_cookie
1414

1515
from gn_module_monitoring.tests.fixtures.generic import *
16-
from gn_module_monitoring.monitoring.models import TMonitoringModules
17-
18-
19-
def add_user_permission(module_code, user, scope, type_code_object, code_action="CRUVED"):
20-
module = db.session.execute(
21-
select(TMonitoringModules).where(TMonitoringModules.module_code == module_code)
22-
).scalar_one()
23-
actions = {
24-
code: db.session.execute(
25-
select(PermAction).where(PermAction.code_action == code)
26-
).scalar_one()
27-
for code in code_action
28-
}
29-
with db.session.begin_nested():
30-
if scope > 0:
31-
object_all = db.session.scalars(
32-
select(PermObject).where(PermObject.code_object == type_code_object)
33-
).all()
34-
for action in actions.values():
35-
for obj in object_all + module.objects:
36-
permission = Permission(
37-
role=user,
38-
action=action,
39-
module=module,
40-
object=obj,
41-
scope_value=scope if scope != 3 else None,
42-
sensitivity_filter=None,
43-
)
44-
db.session.add(permission)
4516

4617

4718
@pytest.mark.usefixtures("client_class", "temporary_transaction")

backend/gn_module_monitoring/tests/test_routes/test_site.py

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from gn_module_monitoring.tests.fixtures.generic import *
88

99

10-
@pytest.mark.usefixtures("client_class", "temporary_transaction")
10+
@pytest.mark.usefixtures("client_class")
1111
class TestSite:
1212
def test_get_type_site_by_id(self, types_site):
1313
for type_site in types_site.values():
@@ -75,26 +75,38 @@ def test_get_sites_order_by_unknown_field(self, sites, monitorings_users):
7575

7676
def test_get_sites_filters(self, sites, visits, monitorings_users):
7777
set_logged_user_cookie(self.client, monitorings_users["admin_user"])
78+
7879
r = self.client.get(url_for("monitorings.get_sites", last_visit="2025"))
7980
assert r.json["count"] >= len(sites)
8081

8182
r = self.client.get(url_for("monitorings.get_sites", last_visit="2026"))
8283
assert r.json["count"] == 0
8384

84-
r = self.client.get(url_for("monitorings.get_sites", id_inventor="user"))
85-
nb_results = r.json["count"]
86-
assert r.json["count"] >= 3
85+
# Test filters with inventor name
86+
resp = self.client.get(url_for("monitorings.get_sites", id_inventor="Bob"))
87+
nb_results = resp.json["count"]
88+
assert nb_results >= 3
8789

88-
r = self.client.get(
90+
# Test filters with inventor name with order by
91+
resp = self.client.get(
8992
url_for(
9093
"monitorings.get_sites",
91-
id_inventor="user",
94+
id_inventor="Bob",
9295
sort="id_inventor",
9396
sort_dir="desc",
9497
)
9598
)
96-
assert nb_results == r.json["count"]
97-
assert r.json["count"] == len(sites)
99+
assert nb_results == resp.json["count"]
100+
101+
# Test get all sites with order by
102+
resp = self.client.get(
103+
url_for(
104+
"monitorings.get_sites",
105+
sort="id_base_site",
106+
sort_dir="desc",
107+
)
108+
)
109+
assert resp.json["count"] == len(sites)
98110

99111
def test_get_sites_filters_types_site(self, sites, types_site, monitorings_users):
100112
set_logged_user_cookie(self.client, monitorings_users["admin_user"])
@@ -127,7 +139,7 @@ def test_get_sites_base_site_name(self, sites, monitorings_users):
127139
base_site_name = site.base_site_name
128140

129141
r = self.client.get(url_for("monitorings.get_sites", base_site_name=base_site_name))
130-
print(r.json)
142+
131143
assert len(r.json["items"]) == 1
132144
assert r.json["items"][0]["base_site_name"] == base_site_name
133145

@@ -386,8 +398,6 @@ def test_get_module_sites(self, monitoring_module, monitorings_users):
386398
set_logged_user_cookie(self.client, monitorings_users["admin_user"])
387399
module_code = "TEST"
388400
r = self.client.get(url_for("monitorings.get_module_sites", module_code=module_code))
389-
print(url_for("monitorings.get_module_sites", module_code=module_code))
390-
print(r.json)
391401
assert r.json["module_code"] == module_code
392402

393403
def test_get_types_site_by_label(self, types_site, monitorings_users):

backend/gn_module_monitoring/tests/test_routes/test_visit.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from gn_module_monitoring.tests.fixtures.generic import *
88

99

10-
@pytest.mark.usefixtures("client_class", "temporary_transaction")
10+
@pytest.mark.usefixtures("client_class")
1111
class TestVisits:
1212
def test_get_visits(self, visits, monitorings_users):
1313
set_logged_user_cookie(self.client, monitorings_users["admin_user"])

0 commit comments

Comments
 (0)