From c1a94947ae1519f23c26f8fc864970dbfe4718b0 Mon Sep 17 00:00:00 2001 From: Blazej Michalik Date: Fri, 19 Jul 2024 00:25:03 +0200 Subject: [PATCH] Tests and a changenote for corrupted metadata fix --- CHANGELOG.md | 6 ++++++ tests/test_corrupted_metadata.py | 37 ++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 tests/test_corrupted_metadata.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d97c82..4738b9f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,12 @@ Versioning](https://semver.org/spec/v2.0.0.html). - Unconstrained `packaging` requirement. At the time of writing this, all versions up to `packaging==24.1` pass the tests on Linux. +### Fixed +- Lazy mode will no longer confuse corrupted wheeldata with metadata - if + `WHEEL` file is corrupted or wrong, the `.wheeldata` will be set to `None`, + as opposed to `.metadata` as was the case previously. Thanks to + [mboisson](https://github.com/mboisson) for spotting this and the fix. + ## [0.0.8] - 2021-08-03 ### Changed - Since `WheelFile` write methods now have `skipdir=True` default (see below), diff --git a/tests/test_corrupted_metadata.py b/tests/test_corrupted_metadata.py new file mode 100644 index 0000000..c02fd3f --- /dev/null +++ b/tests/test_corrupted_metadata.py @@ -0,0 +1,37 @@ +from wheelfile import WheelFile + + +def test_when_metadata_is_corrupted_sets_metadata_to_none(buf): + wf = WheelFile(buf, distname="_", version="0", mode="w") + wf.metadata = "This is not a valid metadata" # type: ignore + wf.close() + + with WheelFile(buf, distname="_", version="0", mode="rl") as broken_wf: + assert broken_wf.metadata is None + + +def test_when_wheeldata_is_corrupted_sets_wheeldata_to_none(buf): + wf = WheelFile(buf, distname="_", version="0", mode="w") + wf.wheeldata = "This is not a valid wheeldata" # type: ignore + wf.close() + + with WheelFile(buf, distname="_", version="0", mode="rl") as broken_wf: + assert broken_wf.wheeldata is None + + +def test_wheeldata_is_read_even_if_metadata_corrupted(buf): + wf = WheelFile(buf, distname="_", version="0", mode="w") + wf.metadata = "This is not a valid metadata" # type: ignore + wf.close() + + with WheelFile(buf, distname="_", version="0", mode="rl") as broken_wf: + assert broken_wf.wheeldata is not None + + +def test_metadata_is_read_even_if_wheeldata_corrupted(buf): + wf = WheelFile(buf, distname="_", version="0", mode="w") + wf.wheeldata = "This is not a valid wheeldata" # type: ignore + wf.close() + + with WheelFile(buf, distname="_", version="0", mode="rl") as broken_wf: + assert broken_wf.metadata is not None