Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit efb485a

Browse files
test(cargo_provider): improve test coverage
1 parent 36698e7 commit efb485a

File tree

1 file changed

+147
-0
lines changed

1 file changed

+147
-0
lines changed

‎tests/providers/test_cargo_provider.py‎

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,3 +301,150 @@ def test_cargo_provider_with_lock(
301301
provider.set_version("42.1")
302302
assert file.read_text() == dedent(toml_expected)
303303
assert lock_file.read_text() == dedent(lock_expected)
304+
305+
306+
def test_cargo_provider_workspace_member_without_version_key(
307+
config: BaseConfig,
308+
chdir: Path,
309+
):
310+
"""Test workspace member that has no version key at all (should not crash)."""
311+
workspace_toml = """\
312+
[workspace]
313+
members = ["member_without_version"]
314+
315+
[workspace.package]
316+
version = "0.1.0"
317+
"""
318+
319+
# Create a member that has no version key at all
320+
member_content = """\
321+
[package]
322+
name = "member_without_version"
323+
# No version key - this should trigger NonExistentKey exception
324+
"""
325+
326+
lock_content = """\
327+
[[package]]
328+
name = "member_without_version"
329+
version = "0.1.0"
330+
source = "registry+https://github.com/rust-lang/crates.io-index"
331+
checksum = "123abc"
332+
"""
333+
334+
expected_workspace_toml = """\
335+
[workspace]
336+
members = ["member_without_version"]
337+
338+
[workspace.package]
339+
version = "42.1"
340+
"""
341+
342+
expected_lock_content = """\
343+
[[package]]
344+
name = "member_without_version"
345+
version = "0.1.0"
346+
source = "registry+https://github.com/rust-lang/crates.io-index"
347+
checksum = "123abc"
348+
"""
349+
350+
# Create the workspace file
351+
filename = CargoProvider.filename
352+
file = chdir / filename
353+
file.write_text(dedent(workspace_toml))
354+
355+
# Create the member directory and file
356+
os.mkdir(chdir / "member_without_version")
357+
member_file = chdir / "member_without_version" / "Cargo.toml"
358+
member_file.write_text(dedent(member_content))
359+
360+
# Create the lock file
361+
lock_filename = CargoProvider.lock_filename
362+
lock_file = chdir / lock_filename
363+
lock_file.write_text(dedent(lock_content))
364+
365+
config.settings["version_provider"] = "cargo"
366+
367+
provider = get_provider(config)
368+
assert isinstance(provider, CargoProvider)
369+
assert provider.get_version() == "0.1.0"
370+
371+
# This should not crash even though the member has no version key
372+
provider.set_version("42.1")
373+
assert file.read_text() == dedent(expected_workspace_toml)
374+
# The lock file should remain unchanged since the member doesn't inherit workspace version
375+
assert lock_file.read_text() == dedent(expected_lock_content)
376+
377+
378+
def test_cargo_provider_workspace_member_without_workspace_key(
379+
config: BaseConfig,
380+
chdir: Path,
381+
):
382+
"""Test workspace member that has version key but no workspace subkey."""
383+
workspace_toml = """\
384+
[workspace]
385+
members = ["member_without_workspace"]
386+
387+
[workspace.package]
388+
version = "0.1.0"
389+
"""
390+
391+
# Create a member that has version as a table but no workspace subkey
392+
# This should trigger NonExistentKey when trying to access version["workspace"]
393+
member_content = """\
394+
[package]
395+
name = "member_without_workspace"
396+
397+
[package.version]
398+
# Has version table but no workspace key - should trigger NonExistentKey
399+
"""
400+
401+
lock_content = """\
402+
[[package]]
403+
name = "member_without_workspace"
404+
version = "0.1.0"
405+
source = "registry+https://github.com/rust-lang/crates.io-index"
406+
checksum = "123abc"
407+
"""
408+
409+
expected_workspace_toml = """\
410+
[workspace]
411+
members = ["member_without_workspace"]
412+
413+
[workspace.package]
414+
version = "42.1"
415+
"""
416+
417+
expected_lock_content = """\
418+
[[package]]
419+
name = "member_without_workspace"
420+
version = "0.1.0"
421+
source = "registry+https://github.com/rust-lang/crates.io-index"
422+
checksum = "123abc"
423+
"""
424+
425+
# Create the workspace file
426+
filename = CargoProvider.filename
427+
file = chdir / filename
428+
file.write_text(dedent(workspace_toml))
429+
430+
# Create the member directory and file
431+
os.mkdir(chdir / "member_without_workspace")
432+
member_file = chdir / "member_without_workspace" / "Cargo.toml"
433+
member_file.write_text(dedent(member_content))
434+
435+
# Create the lock file
436+
lock_filename = CargoProvider.lock_filename
437+
lock_file = chdir / lock_filename
438+
lock_file.write_text(dedent(lock_content))
439+
440+
config.settings["version_provider"] = "cargo"
441+
442+
provider = get_provider(config)
443+
assert isinstance(provider, CargoProvider)
444+
assert provider.get_version() == "0.1.0"
445+
446+
# This should not crash even though the member has no version.workspace key
447+
provider.set_version("42.1")
448+
assert file.read_text() == dedent(expected_workspace_toml)
449+
# The lock file should remain unchanged since the member doesn't inherit workspace version
450+
assert lock_file.read_text() == dedent(expected_lock_content)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /