44import pytest
55
66from linkml_runtime .utils .schema_builder import SchemaBuilder
7- from linkml_runtime .linkml_model import ClassDefinition , SlotDefinition
7+ from linkml_runtime .linkml_model import (
8+ ClassDefinition ,
9+ SlotDefinition ,
10+ EnumDefinition ,
11+ PermissibleValue ,
12+ )
813
914
1015# === Tests for `SchemaBuilder.add_class` ===
@@ -146,4 +151,51 @@ def test_add_class_with_extra_kwargs(
146151
147152 assert added_class == expected_added_class
148153
149- # === Tests for `SchemaBuilder.add_class` end ===
154+
155+ # === Tests for `SchemaBuilder.add_class` end ===
156+
157+
158+ # === Tests for `SchemaBuilder.add_enum` ===
159+ @pytest .mark .parametrize (
160+ ("enum_def" , "permissible_values" , "expected_added_enum" ),
161+ [
162+ (EnumDefinition (name = "Color" ), [], EnumDefinition (name = "Color" )),
163+ # invalid permissible values
164+ (EnumDefinition (name = "Color" ), ["RED" , 3 ], EnumDefinition (name = "Color" )),
165+ (
166+ EnumDefinition (name = "Color" ),
167+ ["RED" , "BLUE" ],
168+ EnumDefinition (
169+ name = "Color" ,
170+ permissible_values = [PermissibleValue ("RED" ), PermissibleValue ("BLUE" )],
171+ ),
172+ ),
173+ (
174+ EnumDefinition (name = "Color" , permissible_values = [PermissibleValue ("RED" )]),
175+ [PermissibleValue ("RED" , description = "A bright color" ), "B" ],
176+ EnumDefinition (
177+ name = "Color" ,
178+ permissible_values = [
179+ PermissibleValue ("RED" , description = "A bright color" ),
180+ PermissibleValue ("B" ),
181+ ],
182+ ),
183+ ),
184+ ],
185+ )
186+ def test_add_enum_with_extra_permissible_values (
187+ enum_def : EnumDefinition ,
188+ permissible_values : List [Union [str , PermissibleValue ]],
189+ expected_added_enum : Optional [EnumDefinition ],
190+ ):
191+ """
192+ Test adding an enum with extra, overriding, permissible values
193+ """
194+ builder = SchemaBuilder ()
195+
196+ if any (not isinstance (pv , (str , PermissibleValue )) for pv in permissible_values ):
197+ with pytest .raises (TypeError , match = "permissible value must be" ):
198+ builder .add_enum (enum_def , permissible_values = permissible_values )
199+ else :
200+ builder .add_enum (enum_def , permissible_values = permissible_values )
201+ assert builder .schema .enums [enum_def .name ] == expected_added_enum
0 commit comments