@@ -31,6 +31,29 @@ def create_scoop_wrapper(scoop_executable: Path | None) -> ScoopWrapper:
3131 return scoop_wrapper
3232
3333
34+ def test_scoop_data_case_insensitive () -> None :
35+ scoop_content = {
36+ "buckets" : [{"Name" : "my_bucket" , "Source" : "https://github.com/my/bucket" }],
37+ "apps" : [
38+ {
39+ "Name" : "app1" ,
40+ "Source" : "my_bucket" ,
41+ "Version" : "1.0.0" ,
42+ },
43+ {
44+ "name" : "app2" ,
45+ "source" : "my_bucket" ,
46+ "version" : "2.0.0" ,
47+ },
48+ ],
49+ }
50+ content = ScoopInstallConfigFile .from_dict (scoop_content )
51+ assert content .buckets [0 ].name == "my_bucket"
52+ assert {app .name for app in content .apps } == {"app1" , "app2" }
53+ # Check serialization back to dict
54+ assert json .loads (content .to_json_string ()) == scoop_content
55+
56+
3457def test_scoop_installed (tmp_path : Path ) -> None :
3558 scoop_exec = tmp_path / "scoop" / "my_scoop.ps1"
3659 scoop_exec .parent .mkdir (parents = True )
@@ -203,7 +226,7 @@ def test_scoop_file_parsing(tmp_path: Path) -> None:
203226 "required_apps, installed_apps, expected_app_versions, expected_exception" ,
204227 [
205228 (
206- [ScoopFileElement ( name = " app1" , source = " test" , version = None )],
229+ [ScoopFileElement . from_dict ({ " name" : " app1" , " source" : " test" , " version" : None } )],
207230 [
208231 InstalledScoopApp (
209232 name = "app1" ,
@@ -226,7 +249,7 @@ def test_scoop_file_parsing(tmp_path: Path) -> None:
226249 None ,
227250 ),
228251 (
229- [ScoopFileElement ( name = " app2" , source = " test" , version = " 1.0.0" )],
252+ [ScoopFileElement . from_dict ({ " name" : " app2" , " source" : " test" , " version" : " 1.0.0"} )],
230253 [
231254 InstalledScoopApp (
232255 name = "app2" ,
@@ -241,7 +264,7 @@ def test_scoop_file_parsing(tmp_path: Path) -> None:
241264 None ,
242265 ),
243266 (
244- [ScoopFileElement ( name = " app3" , source = " test" , version = " 1.0.0" )],
267+ [ScoopFileElement . from_dict ({ " name" : " app3" , " source" : " test" , " version" : " 1.0.0"} )],
245268 [
246269 InstalledScoopApp (
247270 name = "app3" ,
@@ -256,7 +279,7 @@ def test_scoop_file_parsing(tmp_path: Path) -> None:
256279 UserNotificationException , # version mismatch
257280 ),
258281 (
259- [ScoopFileElement ( name = " app4" , source = " test" , version = None )],
282+ [ScoopFileElement . from_dict ({ " name" : " app4" , " source" : " test" , " version" : None } )],
260283 [
261284 InstalledScoopApp (
262285 name = "app1" ,
@@ -289,10 +312,10 @@ def test_map_required_apps_to_installed_apps(
289312def test_do_install_missing (scoop_dir : Path ) -> None :
290313 # Create a mock for scoop_install_config
291314 scoop_install_config = ScoopInstallConfigFile (
292- buckets = [ScoopFileElement ( name = " bucket1" , source = " source1" )],
315+ buckets = [ScoopFileElement . from_dict ({ " name" : " bucket1" , " source" : " source1"} )],
293316 apps = [
294- ScoopFileElement ( name = " app1" , source = " source1" ),
295- ScoopFileElement ( name = " app2" , source = " source2" ),
317+ ScoopFileElement . from_dict ({ " name" : " app1" , " source" : " source1"} ),
318+ ScoopFileElement . from_dict ({ " name" : " app2" , " source" : " source2"} ),
296319 ],
297320 )
298321
@@ -354,7 +377,7 @@ def create_installed_list(apps: list[tuple[str, str]]) -> list[InstalledScoopApp
354377def create_required_list (
355378 apps : list [tuple [str , str , str | None ]],
356379) -> list [ScoopFileElement ]:
357- return [ScoopFileElement ( name = name , source = src , version = ver ) for name , src , ver in apps ]
380+ return [ScoopFileElement . from_dict ({ " name" : name , " source" : src , " version" : ver } ) for name , src , ver in apps ]
358381
359382
360383@pytest .mark .parametrize (
0 commit comments