|
1 | | -from unittest.mock import patch |
| 1 | +from unittest.mock import Mock, patch |
2 | 2 |
|
3 | 3 | import pytest |
4 | | -from twyn.dependency_parser import PoetryLockParser, RequirementsTxtParser |
| 4 | +from twyn.dependency_parser import PoetryLockParser, RequirementsTxtParser, UvLockParser |
| 5 | +from twyn.dependency_parser.abstract_parser import AbstractParser |
5 | 6 | from twyn.dependency_parser.dependency_selector import DependencySelector |
6 | 7 | from twyn.dependency_parser.exceptions import ( |
7 | 8 | MultipleParsersError, |
|
11 | 12 |
|
12 | 13 | class TestDependencySelector: |
13 | 14 | @pytest.mark.parametrize( |
14 | | - "file_name, parser_obj", |
| 15 | + "file_name, parser_class", |
15 | 16 | [ |
16 | 17 | ( |
17 | 18 | "requirements.txt", |
18 | 19 | RequirementsTxtParser, |
19 | 20 | ), # because file is specified, we won't autocheck |
20 | 21 | ("poetry.lock", PoetryLockParser), |
| 22 | + ("uv.lock", UvLockParser), |
21 | 23 | ("/some/path/poetry.lock", PoetryLockParser), |
| 24 | + ("/some/path/uv.lock", UvLockParser), |
22 | 25 | ("/some/path/requirements.txt", RequirementsTxtParser), |
23 | 26 | ], |
24 | 27 | ) |
25 | | - def test_get_dependency_parser(self, file_name, parser_obj): |
| 28 | + def test_get_dependency_parser(self, file_name: str, parser_class: type[AbstractParser]): |
26 | 29 | parser = DependencySelector(file_name).get_dependency_parser() |
27 | | - assert isinstance(parser, parser_obj) |
| 30 | + assert isinstance(parser, parser_class) |
28 | 31 | assert str(parser.file_handler.file_path).endswith(file_name) |
29 | 32 |
|
30 | | - @patch("twyn.dependency_parser.poetry_lock.PoetryLockParser.file_exists") |
31 | | - @patch("twyn.dependency_parser.requirements_txt.RequirementsTxtParser.file_exists") |
| 33 | + @patch("twyn.dependency_parser.lock_parser.LockParser.file_exists") |
| 34 | + @patch("twyn.dependency_parser.lock_parser.UvLockParser.file_exists") |
| 35 | + @patch("twyn.dependency_parser.requirements_txt_parser.RequirementsTxtParser.file_exists") |
32 | 36 | def test_get_dependency_parser_auto_detect_requirements_file( |
33 | | - self, req_file_exists, poetry_file_exists, requirements_txt_file |
| 37 | + self, req_file_exists: Mock, uv_file_exists: Mock, poetry_file_exists: Mock |
34 | 38 | ): |
35 | 39 | poetry_file_exists.return_value = False |
36 | 40 | req_file_exists.return_value = True |
| 41 | + uv_file_exists.return_value = False |
37 | 42 |
|
38 | 43 | parser = DependencySelector("").get_dependency_parser() |
39 | 44 | assert isinstance(parser, RequirementsTxtParser) |
40 | 45 |
|
41 | | - @patch("twyn.dependency_parser.poetry_lock.PoetryLockParser.file_exists") |
42 | | - @patch("twyn.dependency_parser.requirements_txt.RequirementsTxtParser.file_exists") |
43 | | - def test_get_dependency_parser_auto_detect_poetry_file( |
44 | | - self, req_file_exists, poetry_file_exists, requirements_txt_file |
| 46 | + @patch("twyn.dependency_parser.lock_parser.PoetryLockParser.file_exists") |
| 47 | + @patch("twyn.dependency_parser.lock_parser.UvLockParser.file_exists") |
| 48 | + @patch("twyn.dependency_parser.requirements_txt_parser.RequirementsTxtParser.file_exists") |
| 49 | + def test_get_dependency_parser_auto_detect_poetry_lock_file( |
| 50 | + self, req_file_exists: Mock, uv_file_exists: Mock, poetry_file_exists: Mock |
45 | 51 | ): |
46 | 52 | poetry_file_exists.return_value = True |
47 | 53 | req_file_exists.return_value = False |
| 54 | + uv_file_exists.return_value = False |
48 | 55 |
|
49 | 56 | parser = DependencySelector("").get_dependency_parser() |
50 | 57 | assert isinstance(parser, PoetryLockParser) |
51 | 58 |
|
| 59 | + @patch("twyn.dependency_parser.lock_parser.PoetryLockParser.file_exists") |
| 60 | + @patch("twyn.dependency_parser.lock_parser.UvLockParser.file_exists") |
| 61 | + @patch("twyn.dependency_parser.requirements_txt_parser.RequirementsTxtParser.file_exists") |
| 62 | + def test_get_dependency_parser_auto_detect_uv_lock_file( |
| 63 | + self, req_file_exists: Mock, uv_file_exists: Mock, poetry_file_exists: Mock |
| 64 | + ): |
| 65 | + poetry_file_exists.return_value = False |
| 66 | + req_file_exists.return_value = False |
| 67 | + uv_file_exists.return_value = True |
| 68 | + |
| 69 | + parser = DependencySelector("").get_dependency_parser() |
| 70 | + assert isinstance(parser, UvLockParser) |
| 71 | + |
52 | 72 | @pytest.mark.parametrize( |
53 | 73 | "exists, exception", |
54 | 74 | [(True, MultipleParsersError), (False, NoMatchingParserError)], |
|
0 commit comments