@@ -398,6 +398,39 @@ def test_parse_poetry_lock_univers(self):
398398 expected_loc = self .get_test_loc ('pypi/poetry/univers-poetry.lock-expected.json' )
399399 self .check_packages_data (package , expected_loc , regen = REGEN_TEST_FIXTURES )
400400
401+ def test_parse_poetry_lock_package_optional (self ):
402+ test_file = self .get_temp_file ('poetry.lock' )
403+ with open (test_file , 'w' ) as lockfile :
404+ lockfile .write ('''\
405+ [[package]]
406+ name = "required-dep"
407+ version = "1.0.0"
408+ description = "required dependency"
409+ optional = false
410+ python-versions = ">=3.8"
411+
412+ [[package]]
413+ name = "optional-dep"
414+ version = "2.0.0"
415+ description = "optional dependency"
416+ optional = true
417+ python-versions = ">=3.8"
418+
419+ [metadata]
420+ lock-version = "2.0"
421+ python-versions = ">=3.8"
422+ content-hash = "test"
423+ ''' )
424+
425+ package_data = list (pypi .PoetryLockHandler .parse (test_file ))[0 ]
426+ dependencies_by_purl = {
427+ dependency ['purl' ]: dependency
428+ for dependency in package_data .dependencies
429+ }
430+
431+ assert dependencies_by_purl ['pkg:pypi/required-dep@1.0.0' ]['is_optional' ] is False
432+ assert dependencies_by_purl ['pkg:pypi/optional-dep@2.0.0' ]['is_optional' ] is True
433+
401434 def test_parse_pyproject_toml_poetry_univers (self ):
402435 test_file = self .get_test_loc ('pypi/poetry/univers/pyproject.toml' )
403436 package = pypi .PoetryPyprojectTomlHandler .parse (test_file )
@@ -805,4 +838,3 @@ def test_parse_setup_py(test_loc):
805838)
806839def test_parse_more_setup_py (test_loc ):
807840 check_setup_py_parsing (test_loc )
808-
0 commit comments