from scripts.package_diff import diff_requirements_txt, diff_package_json def test_requirements_txt_diff(): before = "requests==2.28.0\npyyaml==5.4.1\n" after = "requests==2.31.0\npyyaml==5.4.1\nclick==8.0.0\n" pd = diff_requirements_txt(before, after) assert {p.name for p in pd.added} == {"click"} assert {p.name for p in pd.removed} == set() assert len(pd.upgraded) == 1 assert pd.upgraded[0].name == "requests" assert pd.upgraded[0].from_version == "2.28.0" assert pd.upgraded[0].to_version == "2.31.0" def test_requirements_txt_removed(): before = "a==1.0.0\nb==1.0.0\n" after = "a==1.0.0\n" pd = diff_requirements_txt(before, after) assert {p.name for p in pd.removed} == {"b"} assert pd.added == [] and pd.upgraded == [] def test_package_json_diff(): before = '{"dependencies": {"axios": "0.21.0", "lodash": "4.17.20"}}' after = '{"dependencies": {"axios": "1.6.0", "react": "18.0.0"}}' pd = diff_package_json(before, after) assert {p.name for p in pd.added} == {"react"} assert {p.name for p in pd.removed} == {"lodash"} assert pd.upgraded[0].name == "axios" def test_package_json_handles_dev_dependencies(): before = '{"dependencies": {}, "devDependencies": {"jest": "27.0.0"}}' after = '{"dependencies": {}, "devDependencies": {"jest": "29.0.0"}}' pd = diff_package_json(before, after) assert pd.upgraded[0].name == "jest" assert pd.upgraded[0].to_version == "29.0.0" def test_empty_before_treats_all_as_added(): pd = diff_requirements_txt("", "click==8.0.0\n") assert {p.name for p in pd.added} == {"click"} def test_invalid_json_returns_empty_diff(): pd = diff_package_json("not json", "not json") assert pd.added == [] and pd.removed == [] and pd.upgraded == []