1import pytest
2
3from piptools.repositories import LocalRequirementsRepository
4from piptools.utils import key_from_ireq
5
6
7@pytest.mark.parametrize(
8    ("input", "pins", "expected"),
9    (
10        (tup)
11        for tup in [
12            # Add Flask to an existing requirements.in, using --no-upgrade
13            (
14                ["flask", "jinja2", "werkzeug"],
15                [
16                    # The requirements.txt from a previous round
17                    "jinja2==2.7.3",
18                    "markupsafe==0.23",
19                    "werkzeug==0.6",
20                ],
21                [
22                    # Add flask and upgrade werkzeug from incompatible 0.6
23                    "flask==0.10.1",
24                    "itsdangerous==0.24 (from flask==0.10.1)",
25                    "werkzeug==0.10.4",
26                    # Other requirements are unchanged from
27                    # the original requirements.txt
28                    "jinja2==2.7.3",
29                    "markupsafe==0.23 (from jinja2==2.7.3)",
30                ],
31            )
32        ]
33    ),
34)
35def test_no_upgrades(base_resolver, repository, from_line, input, pins, expected):
36    input = [from_line(line) for line in input]
37    existing_pins = {}
38    for line in pins:
39        ireq = from_line(line)
40        existing_pins[key_from_ireq(ireq)] = ireq
41    local_repository = LocalRequirementsRepository(existing_pins, repository)
42    output = base_resolver(
43        input, prereleases=False, repository=local_repository
44    ).resolve()
45    output = {str(line) for line in output}
46    assert output == {str(line) for line in expected}
47