forked from pypa/twine
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_register.py
More file actions
137 lines (108 loc) · 4.15 KB
/
test_register.py
File metadata and controls
137 lines (108 loc) · 4.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
import pretend
import pytest
from twine import cli
from twine import exceptions
from twine.commands import register
from . import helpers
@pytest.fixture()
def register_settings(make_settings):
"""Return a factory function for settings.Settings for register."""
return make_settings(
"""
[pypi]
repository: https://test.pypi.org/legacy/
username:foo
password:bar
"""
)
def test_successful_register(register_settings):
"""Return a successful result for a valid repository url and package."""
stub_response = pretend.stub(
is_redirect=False,
status_code=200,
headers={"location": "https://test.pypi.org/legacy/"},
raise_for_status=lambda: None,
)
stub_repository = pretend.stub(
register=lambda package: stub_response, close=lambda: None
)
register_settings.create_repository = lambda: stub_repository
result = register.register(register_settings, helpers.WHEEL_FIXTURE)
assert result is None
def test_exception_for_redirect(register_settings):
"""Raise an exception when repository URL results in a redirect."""
repository_url = register_settings.repository_config["repository"]
redirect_url = "https://malicious.website.org/danger/"
stub_response = pretend.stub(
is_redirect=True,
status_code=301,
headers={"location": redirect_url},
)
stub_repository = pretend.stub(
register=lambda package: stub_response, close=lambda: None
)
register_settings.create_repository = lambda: stub_repository
with pytest.raises(
exceptions.RedirectDetected,
match=rf"{repository_url}.+{redirect_url}.+\nIf you trust these URLs",
):
register.register(register_settings, helpers.WHEEL_FIXTURE)
def test_non_existent_package(register_settings):
"""Raise an exception when package file doesn't exist."""
stub_repository = pretend.stub()
register_settings.create_repository = lambda: stub_repository
package = "/foo/bar/baz.whl"
with pytest.raises(
exceptions.PackageNotFound,
match=f'"{package}" does not exist on the file system.',
):
register.register(register_settings, package)
@pytest.mark.parametrize("repo", ["pypi", "testpypi"])
def test_values_from_env_pypi(monkeypatch, repo):
"""Use env vars for settings when run from command line."""
def none_register(*args, **settings_kwargs):
pass
replaced_register = pretend.call_recorder(none_register)
monkeypatch.setattr(register, "register", replaced_register)
testenv = {
"TWINE_REPOSITORY": repo,
# Ignored because the TWINE_REPOSITORY is PyPI/TestPyPI
"TWINE_USERNAME": "this-is-ignored",
"TWINE_PASSWORD": "pypipassword",
"TWINE_CERT": "/foo/bar.crt",
}
with helpers.set_env(**testenv):
cli.dispatch(["register", helpers.WHEEL_FIXTURE])
register_settings = replaced_register.calls[0].args[0]
assert "pypipassword" == register_settings.password
assert "__token__" == register_settings.username
assert "/foo/bar.crt" == register_settings.cacert
def test_values_from_env_not_pypi(monkeypatch, write_config_file):
"""Use env vars for settings when run from command line."""
write_config_file(
"""
[distutils]
index-servers =
notpypi
[notpypi]
repository: https://upload.example.org/legacy/
username:someusername
password:password
"""
)
def none_register(*args, **settings_kwargs):
pass
replaced_register = pretend.call_recorder(none_register)
monkeypatch.setattr(register, "register", replaced_register)
testenv = {
"TWINE_REPOSITORY": "notpypi",
"TWINE_USERNAME": "someusername",
"TWINE_PASSWORD": "pypipassword",
"TWINE_CERT": "/foo/bar.crt",
}
with helpers.set_env(**testenv):
cli.dispatch(["register", helpers.WHEEL_FIXTURE])
register_settings = replaced_register.calls[0].args[0]
assert "pypipassword" == register_settings.password
assert "someusername" == register_settings.username
assert "/foo/bar.crt" == register_settings.cacert