2
2
3
3
import pytest
4
4
from datetime import datetime
5
+ from typing import Any , Optional
5
6
6
7
7
8
@pytest .mark .parametrize (
13
14
({"id" : "1" , "source" : "/" , "type" : "test" }, "specversion" ),
14
15
],
15
16
)
16
- def test_missing_required_attribute (attributes , missing_attribute ) -> None :
17
+ def test_missing_required_attribute (attributes : dict , missing_attribute : str ) -> None :
17
18
with pytest .raises (ValueError ) as e :
18
19
CloudEvent (attributes )
19
20
@@ -27,15 +28,15 @@ def test_missing_required_attribute(attributes, missing_attribute) -> None:
27
28
(12 , "Attribute 'id' must be a string" ),
28
29
],
29
30
)
30
- def test_id_validation (id , error ) -> None :
31
+ def test_id_validation (id : Optional [ Any ] , error : str ) -> None :
31
32
with pytest .raises ((ValueError , TypeError )) as e :
32
33
CloudEvent ({"id" : id , "source" : "/" , "type" : "test" , "specversion" : "1.0" })
33
34
34
35
assert str (e .value ) == error
35
36
36
37
37
38
@pytest .mark .parametrize ("source,error" , [(123 , "Attribute 'source' must be a string" )])
38
- def test_source_validation (source , error ) -> None :
39
+ def test_source_validation (source : Any , error : str ) -> None :
39
40
with pytest .raises ((ValueError , TypeError )) as e :
40
41
CloudEvent ({"id" : "1" , "source" : source , "type" : "test" , "specversion" : "1.0" })
41
42
@@ -49,7 +50,7 @@ def test_source_validation(source, error) -> None:
49
50
("1.4" , "Attribute 'specversion' must be '1.0'" ),
50
51
],
51
52
)
52
- def test_specversion_validation (specversion , error ) -> None :
53
+ def test_specversion_validation (specversion : Any , error : str ) -> None :
53
54
with pytest .raises ((ValueError , TypeError )) as e :
54
55
CloudEvent (
55
56
{"id" : "1" , "source" : "/" , "type" : "test" , "specversion" : specversion }
@@ -68,7 +69,7 @@ def test_specversion_validation(specversion, error) -> None:
68
69
),
69
70
],
70
71
)
71
- def test_time_validation (time , error ) -> None :
72
+ def test_time_validation (time : Any , error : str ) -> None :
72
73
with pytest .raises ((ValueError , TypeError )) as e :
73
74
CloudEvent (
74
75
{
@@ -93,7 +94,7 @@ def test_time_validation(time, error) -> None:
93
94
),
94
95
],
95
96
)
96
- def test_subject_validation (subject , error ) -> None :
97
+ def test_subject_validation (subject : Any , error : str ) -> None :
97
98
with pytest .raises ((ValueError , TypeError )) as e :
98
99
CloudEvent (
99
100
{
@@ -118,7 +119,7 @@ def test_subject_validation(subject, error) -> None:
118
119
),
119
120
],
120
121
)
121
- def test_datacontenttype_validation (datacontenttype , error ) -> None :
122
+ def test_datacontenttype_validation (datacontenttype : Any , error : str ) -> None :
122
123
with pytest .raises ((ValueError , TypeError )) as e :
123
124
CloudEvent (
124
125
{
@@ -143,7 +144,7 @@ def test_datacontenttype_validation(datacontenttype, error) -> None:
143
144
),
144
145
],
145
146
)
146
- def test_dataschema_validation (dataschema , error ) -> None :
147
+ def test_dataschema_validation (dataschema : Any , error : str ) -> None :
147
148
with pytest .raises ((ValueError , TypeError )) as e :
148
149
CloudEvent (
149
150
{
@@ -156,3 +157,40 @@ def test_dataschema_validation(dataschema, error) -> None:
156
157
)
157
158
158
159
assert str (e .value ) == error
160
+
161
+
162
+ @pytest .mark .parametrize (
163
+ "extension_name,error" ,
164
+ [
165
+ ("123" , "Extension attribute '123' should start with a letter" ),
166
+ (
167
+ "shrt" ,
168
+ "Extension attribute 'shrt' should be between 5 and 20 characters long" ,
169
+ ),
170
+ (
171
+ "thisisaverylongextension" ,
172
+ "Extension attribute 'thisisaverylongextension' should be between 5 and 20 characters long" ,
173
+ ),
174
+ (
175
+ "ThisIsNotValid" ,
176
+ "Extension attribute 'ThisIsNotValid' should only contain lowercase letters and numbers" ,
177
+ ),
178
+ (
179
+ "data" ,
180
+ "Extension attribute 'data' is reserved and must not be used" ,
181
+ ),
182
+ ],
183
+ )
184
+ def test_custom_extension (extension_name : str , error : str ) -> None :
185
+ with pytest .raises (ValueError ) as e :
186
+ CloudEvent (
187
+ {
188
+ "id" : "1" ,
189
+ "source" : "/" ,
190
+ "type" : "test" ,
191
+ "specversion" : "1.0" ,
192
+ extension_name : "value" ,
193
+ }
194
+ )
195
+
196
+ assert str (e .value ) == error
0 commit comments