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

1from typing import Optional 

2 

3from iso_freeze.lib import PyPackage 

4from iso_freeze.sync import ( 

5 get_additional_packages, 

6 get_installed_packages, 

7 format_package_list, 

8) 

9 

10 

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 

35 

36 

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"] 

56 

57 

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