Coverage for tests/test_sync.py: 100%
18 statements
« prev ^ index » next coverage.py v6.4.2, created at 2022-08-01 13:01 +0200
« prev ^ index » next coverage.py v6.4.2, created at 2022-08-01 13:01 +0200
1from typing import Optional
3from iso_freeze.lib import PyPackage
4from iso_freeze.sync import (
5 get_additional_packages,
6 get_installed_packages,
7 format_package_list,
8)
11def test_get_installed_packages() -> None:
12 """Test if pip list output correctly parsed."""
13 mocked_pip_list_output = [
14 {"name": "attrs", "version": "21.4.0"},
15 {"name": "iniconfig", "version": "1.1.1"},
16 {
17 "name": "iso-freeze",
18 "version": "0.0.10",
19 "editable_project_location": "/Users/user/python_projects/iso-freeze",
20 },
21 {"name": "packaging", "version": "21.3"},
22 {"name": "pip", "version": "22.2"},
23 {"name": "pluggy", "version": "1.0.0"},
24 ]
25 expected_output: list[PyPackage] = [
26 PyPackage(name="attrs", version="21.4.0", requested=False, hash=None),
27 PyPackage(name="iniconfig", version="1.1.1", requested=False, hash=None),
28 PyPackage(name="iso-freeze", version="0.0.10", requested=False, hash=None),
29 PyPackage(name="packaging", version="21.3", requested=False, hash=None),
30 PyPackage(name="pip", version="22.2", requested=False, hash=None),
31 PyPackage(name="pluggy", version="1.0.0", requested=False, hash=None),
32 ]
33 actual_output: list[PyPackage] = get_installed_packages(mocked_pip_list_output)
34 assert actual_output == expected_output
37def test_get_additional_packages() -> None:
38 """Test if additional packages are properly detected."""
39 mocked_pip_list_output: list[PyPackage] = [
40 PyPackage(name="tomli", version="2.0.1", requested=False, hash=None),
41 # Two packages not in mocked pip report output
42 PyPackage(name="pip", version="22.2", requested=False, hash=None),
43 PyPackage(name="cowsay", version="5.0", requested=False, hash=None),
44 ]
45 mocked_pip_report_output: list[PyPackage] = [
46 PyPackage(name="tomli", version="2.0.1", requested=True, hash="sha256:1234"),
47 # One package not in mocked pip list output
48 PyPackage(name="pyjokes", version="0.6.0", requested=True, hash="sha256:5678"),
49 ]
50 to_delete: Optional[list[str]] = get_additional_packages(
51 installed_packages=mocked_pip_list_output,
52 to_install=mocked_pip_report_output,
53 )
54 # pip should not be removed, cowsay should
55 assert to_delete == ["cowsay"]
58def test_format_package_list() -> None:
59 """Test if pip report --install output is properly passed to pip install."""
60 mocked_pip_report_output: list[PyPackage] = [
61 PyPackage(name="tomli", version="2.0.1", requested=True, hash="sha256:1234"),
62 PyPackage(name="pyjokes", version="0.6.0", requested=True, hash="sha256:5678"),
63 ]
64 expected_output: list[str] = ["tomli==2.0.1", "pyjokes==0.6.0"]
65 actual_output: list[str] = format_package_list(packages=mocked_pip_report_output)
66 assert expected_output == actual_output