@@ -150,6 +150,11 @@ def test_upgrade_poetry_to_uv(self, tmp_path: Path) -> None:
150150[tool.poetry.dependencies]
151151python = "^3.11"
152152requests = "^2.28"
153+ flask = ">=2.0"
154+ click = "~8.0"
155+ pydantic = {version = "^2.0"}
156+ attrs = {version = ">=23.0"}
157+ simple = "*"
153158
154159[tool.poetry.group.dev.dependencies]
155160pytest = "^7.0"
@@ -191,6 +196,23 @@ def test_upgrade_requirements_to_uv(self, tmp_path: Path) -> None:
191196 content = pyproject .read_text ()
192197 assert "requests" in content
193198
199+ def test_upgrade_requirements_with_dev (self , tmp_path : Path ) -> None :
200+ """Test upgrading from requirements.txt with requirements-dev.txt."""
201+ req = tmp_path / "requirements.txt"
202+ req .write_text ("requests>=2.28\n flask>=2.0" )
203+ req_dev = tmp_path / "requirements-dev.txt"
204+ req_dev .write_text ("pytest>=7.0\n ruff>=0.1.0" )
205+
206+ result = upgrade_project (tmp_path , backup = False )
207+
208+ assert result .success
209+
210+ # Check pyproject.toml has both regular and dev dependencies
211+ pyproject = tmp_path / "pyproject.toml"
212+ content = pyproject .read_text ()
213+ assert "requests" in content
214+ assert "pytest" in content
215+
194216 def test_dry_run_makes_no_changes (self , tmp_path : Path ) -> None :
195217 """Test that dry run doesn't modify files."""
196218 pyproject = tmp_path / "pyproject.toml"
@@ -247,6 +269,43 @@ def test_upgrade_mypy_to_basedpyright(self, tmp_path: Path) -> None:
247269 assert "[tool.basedpyright]" in content
248270 assert "[tool.mypy]" not in content
249271
272+ def test_upgrade_mypy_standard_mode (self , tmp_path : Path ) -> None :
273+ """Test migrating mypy with warn_return_any to basedpyright standard."""
274+ pyproject = tmp_path / "pyproject.toml"
275+ pyproject .write_text ("""
276+ [project]
277+ name = "test"
278+
279+ [tool.mypy]
280+ warn_return_any = true
281+ ignore_missing_imports = true
282+ """ )
283+
284+ result = upgrade_project (tmp_path , backup = False )
285+
286+ assert result .success
287+ content = pyproject .read_text ()
288+ assert "[tool.basedpyright]" in content
289+ assert "standard" in content
290+
291+ def test_upgrade_mypy_basic_mode (self , tmp_path : Path ) -> None :
292+ """Test migrating basic mypy to basedpyright basic."""
293+ pyproject = tmp_path / "pyproject.toml"
294+ pyproject .write_text ("""
295+ [project]
296+ name = "test"
297+
298+ [tool.mypy]
299+ python_version = "3.11"
300+ """ )
301+
302+ result = upgrade_project (tmp_path , backup = False )
303+
304+ assert result .success
305+ content = pyproject .read_text ()
306+ assert "[tool.basedpyright]" in content
307+ assert "basic" in content
308+
250309 def test_upgrade_flake8_to_ruff (self , tmp_path : Path ) -> None :
251310 """Test migrating flake8 to ruff."""
252311 (tmp_path / ".flake8" ).write_text ("""
@@ -267,6 +326,84 @@ def test_upgrade_flake8_to_ruff(self, tmp_path: Path) -> None:
267326 content = pyproject .read_text ()
268327 assert "[tool.ruff]" in content
269328
329+ def test_upgrade_isort_to_ruff (self , tmp_path : Path ) -> None :
330+ """Test migrating isort to ruff."""
331+ pyproject = tmp_path / "pyproject.toml"
332+ pyproject .write_text ("""
333+ [project]
334+ name = "test"
335+
336+ [tool.isort]
337+ known_first_party = ["mypackage"]
338+ force_single_line = true
339+ """ )
340+
341+ result = upgrade_project (tmp_path , backup = False )
342+
343+ assert result .success
344+ content = pyproject .read_text ()
345+ # isort config should be migrated to ruff.lint.isort
346+ assert "[tool.ruff.lint.isort]" in content
347+ # Original isort section should be removed
348+ assert "[tool.isort]" not in content
349+
350+ def test_upgrade_pipenv_to_uv (self , tmp_path : Path ) -> None :
351+ """Test upgrading from Pipenv to uv."""
352+ pipfile = tmp_path / "Pipfile"
353+ pipfile .write_text ("""
354+ [packages]
355+ requests = "*"
356+ flask = ">=2.0"
357+
358+ [dev-packages]
359+ pytest = "*"
360+
361+ [requires]
362+ python_version = "3.11"
363+ """ )
364+ (tmp_path / "Pipfile.lock" ).touch ()
365+
366+ result = upgrade_project (tmp_path , backup = False )
367+
368+ assert result .success
369+
370+ # Check pyproject.toml was created
371+ pyproject = tmp_path / "pyproject.toml"
372+ assert pyproject .exists ()
373+ content = pyproject .read_text ()
374+ assert "requests" in content
375+ assert "flask" in content
376+
377+ def test_upgrade_setuptools_to_uv (self , tmp_path : Path ) -> None :
378+ """Test upgrading from setup.cfg to uv."""
379+ setup_cfg = tmp_path / "setup.cfg"
380+ setup_cfg .write_text ("""
381+ [metadata]
382+ name = testproject
383+ version = 0.1.0
384+ description = A test project
385+ author = Test Author
386+ author_email = test@example.com
387+
388+ [options]
389+ packages = find:
390+ python_requires = >=3.11
391+ install_requires =
392+ requests>=2.0
393+ flask>=2.0
394+ """ )
395+ (tmp_path / "setup.py" ).write_text ("from setuptools import setup\n setup()" )
396+
397+ result = upgrade_project (tmp_path , backup = False )
398+
399+ assert result .success
400+
401+ # Check pyproject.toml was created/updated
402+ pyproject = tmp_path / "pyproject.toml"
403+ assert pyproject .exists ()
404+ content = pyproject .read_text ()
405+ assert "testproject" in content or "requests" in content
406+
270407 def test_upgrade_nonexistent_path (self , tmp_path : Path ) -> None :
271408 """Test upgrading non-existent path."""
272409 result = upgrade_project (tmp_path / "nonexistent" )
0 commit comments