3
3
import uuid
4
4
import wsgiref .simple_server
5
5
from types import ModuleType
6
+ from typing import Any
7
+ from typing import Dict
8
+ from typing import List
6
9
7
10
import portpicker
8
11
import pytest
9
12
from canaille import create_app
10
13
from canaille .app import models
14
+ from canaille .core .models import Group
15
+ from canaille .core .models import User
11
16
from canaille .core .populate import fake_groups
12
17
from canaille .core .populate import fake_users
18
+ from canaille .oidc .basemodels import Consent
19
+ from canaille .oidc .basemodels import Token
13
20
from canaille .oidc .installation import generate_keypair
14
21
from flask import Flask
15
22
from flask import g
@@ -48,7 +55,7 @@ def url(self) -> str:
48
55
"""
49
56
return f"http://localhost:{ self .port } /"
50
57
51
- def random_user (self , ** kwargs ):
58
+ def random_user (self , ** kwargs ) -> User :
52
59
"""
53
60
Generates a :class:`~canaille.core.models.User` with random values.
54
61
Any parameter will be used instead of a random value.
@@ -60,7 +67,7 @@ def random_user(self, **kwargs):
60
67
61
68
return user
62
69
63
- def random_group (self , ** kwargs ):
70
+ def random_group (self , ** kwargs ) -> Group :
64
71
"""
65
72
Generates a :class:`~canaille.core.models.Group` with random values.
66
73
Any parameter will be used instead of a random value.
@@ -72,7 +79,7 @@ def random_group(self, **kwargs):
72
79
73
80
return group
74
81
75
- def random_token (self , subject , client , ** kwargs ):
82
+ def random_token (self , subject , client , ** kwargs ) -> Token :
76
83
"""
77
84
Generates a test :class:`~canaille.oidc.basemodels.Token` with random values.
78
85
Any parameter will be used instead of a random value.
@@ -103,7 +110,7 @@ def login(self, user):
103
110
"""
104
111
self .logged_user = user
105
112
106
- def consent (self , user , client = None ):
113
+ def consent (self , user , client = None ) -> Consent | List [ Consent ] :
107
114
"""
108
115
Make a user consent to share data with OIDC clients.
109
116
@@ -135,10 +142,13 @@ def consent(self, user, client=None):
135
142
136
143
137
144
@pytest .fixture (scope = "session" )
138
- def iam_server ():
139
- port = portpicker .pick_unused_port ()
145
+ def iam_configuration () -> Dict [str , Any ]:
146
+ """
147
+ Fixture for editing the configuration of :meth:`~pytest_iam.iam_server`.
148
+ """
149
+
140
150
private_key , public_key = generate_keypair ()
141
- config = {
151
+ return {
142
152
"TESTING" : True ,
143
153
"JAVASCRIPT" : False ,
144
154
"WTF_CSRF_ENABLED" : False ,
@@ -156,7 +166,16 @@ def iam_server():
156
166
}
157
167
},
158
168
}
159
- app = create_app (config = config )
169
+
170
+
171
+ @pytest .fixture (scope = "session" )
172
+ def iam_server (iam_configuration ) -> Server :
173
+ """
174
+ Fixture that creates a Canaille server listening a random port in a thread.
175
+ """
176
+
177
+ port = portpicker .pick_unused_port ()
178
+ app = create_app (config = iam_configuration )
160
179
server = Server (app , port )
161
180
162
181
server_thread = threading .Thread (target = server .httpd .serve_forever )
0 commit comments