11import  pytest 
2+ import  semver 
23from  pydantic  import  BaseModel , ValidationError 
34
45from  pydantic_extra_types .semantic_version  import  SemanticVersion 
@@ -12,14 +13,97 @@ class Application(BaseModel):
1213    return  Application 
1314
1415
15- @pytest .mark .parametrize ('version' , ['1.0.0' , '1.0.0-alpha.1' , '1.0.0-alpha.1+build.1' , '1.2.3' ]) 
16- def  test_valid_semantic_version (SemanticVersionObject , version ):
17-     application  =  SemanticVersionObject (version = version )
16+ @pytest .mark .parametrize ( 
17+     'constructor' , [str , semver .Version .parse , SemanticVersion .parse ], ids = ['str' , 'semver.Version' , 'SemanticVersion' ] 
18+ ) 
19+ @pytest .mark .parametrize ( 
20+     'version' , 
21+     [ 
22+         '0.0.4' , 
23+         '1.2.3' , 
24+         '10.20.30' , 
25+         '1.1.2-prerelease+meta' , 
26+         '1.1.2+meta' , 
27+         '1.1.2+meta-valid' , 
28+         '1.0.0-alpha' , 
29+         '1.0.0-beta' , 
30+         '1.0.0-alpha.beta' , 
31+         '1.0.0-alpha.beta.1' , 
32+         '1.0.0-alpha.1' , 
33+         '1.0.0-alpha0.valid' , 
34+         '1.0.0-alpha.0valid' , 
35+         '1.0.0-alpha-a.b-c-somethinglong+build.1-aef.1-its-okay' , 
36+         '1.0.0-rc.1+build.1' , 
37+         '2.0.0-rc.1+build.123' , 
38+         '1.2.3-beta' , 
39+         '10.2.3-DEV-SNAPSHOT' , 
40+         '1.2.3-SNAPSHOT-123' , 
41+         '1.0.0' , 
42+         '2.0.0' , 
43+         '1.1.7' , 
44+         '2.0.0+build.1848' , 
45+         '2.0.1-alpha.1227' , 
46+         '1.0.0-alpha+beta' , 
47+         '1.2.3----RC-SNAPSHOT.12.9.1--.12+788' , 
48+         '1.2.3----R-S.12.9.1--.12+meta' , 
49+         '1.2.3----RC-SNAPSHOT.12.9.1--.12' , 
50+         '1.0.0+0.build.1-rc.10000aaa-kk-0.1' , 
51+         '99999999999999999999999.999999999999999999.99999999999999999' , 
52+         '1.0.0-0A.is.legal' , 
53+     ], 
54+ ) 
55+ def  test_valid_semantic_version (SemanticVersionObject , constructor , version ):
56+     application  =  SemanticVersionObject (version = constructor (version ))
1857    assert  application .version 
1958    assert  application .model_dump () ==  {'version' : version }
2059
2160
22- @pytest .mark .parametrize ('invalid_version' , ['no dots string' , 'with.dots.string' , '' ]) 
61+ @pytest .mark .parametrize ( 
62+     'invalid_version' , 
63+     [ 
64+         '' , 
65+         '1' , 
66+         '1.2' , 
67+         '1.2.3-0123' , 
68+         '1.2.3-0123.0123' , 
69+         '1.1.2+.123' , 
70+         '+invalid' , 
71+         '-invalid' , 
72+         '-invalid+invalid' , 
73+         '-invalid.01' , 
74+         'alpha' , 
75+         'alpha.beta' , 
76+         'alpha.beta.1' , 
77+         'alpha.1' , 
78+         'alpha+beta' , 
79+         'alpha_beta' , 
80+         'alpha.' , 
81+         'alpha..' , 
82+         'beta' , 
83+         '1.0.0-alpha_beta' , 
84+         '-alpha.' , 
85+         '1.0.0-alpha..' , 
86+         '1.0.0-alpha..1' , 
87+         '1.0.0-alpha...1' , 
88+         '1.0.0-alpha....1' , 
89+         '1.0.0-alpha.....1' , 
90+         '1.0.0-alpha......1' , 
91+         '1.0.0-alpha.......1' , 
92+         '01.1.1' , 
93+         '1.01.1' , 
94+         '1.1.01' , 
95+         '1.2' , 
96+         '1.2.3.DEV' , 
97+         '1.2-SNAPSHOT' , 
98+         '1.2.31.2.3----RC-SNAPSHOT.12.09.1--..12+788' , 
99+         '1.2-RC-SNAPSHOT' , 
100+         '-1.0.3-gamma+b7718' , 
101+         '+justmeta' , 
102+         '9.8.7+meta+meta' , 
103+         '9.8.7-whatever+meta+meta' , 
104+         '99999999999999999999999.999999999999999999.99999999999999999----RC-SNAPSHOT.12.09.1--------------------------------..12' , 
105+     ], 
106+ ) 
23107def  test_invalid_semantic_version (SemanticVersionObject , invalid_version ):
24108    with  pytest .raises (ValidationError ):
25109        SemanticVersionObject (version = invalid_version )
0 commit comments