@@ -16,38 +16,44 @@ def test_venv_not_installed():
16
16
assert str (e .value ) == "CREATE_VENV.VENV_NOT_FOUND"
17
17
18
18
19
- def test_pip_not_installed ():
19
+ @pytest .mark .parametrize ("install" , ["requirements" , "toml" ])
20
+ def test_pip_not_installed (install ):
20
21
importlib .reload (create_venv )
21
22
create_venv .venv_exists = lambda _n : True
22
23
create_venv .is_installed = lambda module : module != "pip"
23
24
create_venv .run_process = lambda _args , _error_message : None
24
25
with pytest .raises (create_venv .VenvError ) as e :
25
- create_venv .main (["--install" ])
26
+ if install == "requirements" :
27
+ create_venv .main (["--requirements" , "requirements-for-test.txt" ])
28
+ elif install == "toml" :
29
+ create_venv .main (["--toml" , "pyproject.toml" , "--extras" , "test" ])
26
30
assert str (e .value ) == "CREATE_VENV.PIP_NOT_FOUND"
27
31
28
32
29
- @pytest .mark .parametrize ("env_exists" , [True , False ])
30
- @pytest .mark .parametrize ("git_ignore" , [True , False ])
31
- @pytest .mark .parametrize ("install" , [True , False ])
33
+ @pytest .mark .parametrize ("env_exists" , ["hasEnv" , "noEnv" ])
34
+ @pytest .mark .parametrize ("git_ignore" , ["useGitIgnore" , "skipGitIgnore" ])
35
+ @pytest .mark .parametrize ("install" , ["requirements" , "toml" , "skipInstall" ])
32
36
def test_create_env (env_exists , git_ignore , install ):
33
37
importlib .reload (create_venv )
34
38
create_venv .is_installed = lambda _x : True
35
- create_venv .venv_exists = lambda _n : env_exists
39
+ create_venv .venv_exists = lambda _n : env_exists == "hasEnv"
40
+ create_venv .upgrade_pip = lambda _x : None
36
41
37
42
install_packages_called = False
38
43
39
- def install_packages (_name ):
44
+ def install_packages (_env , _name ):
40
45
nonlocal install_packages_called
41
46
install_packages_called = True
42
47
43
- create_venv .install_packages = install_packages
48
+ create_venv .install_requirements = install_packages
49
+ create_venv .install_toml = install_packages
44
50
45
51
run_process_called = False
46
52
47
53
def run_process (args , error_message ):
48
54
nonlocal run_process_called
49
55
run_process_called = True
50
- if not env_exists :
56
+ if env_exists == "noEnv" :
51
57
assert args == [sys .executable , "-m" , "venv" , create_venv .VENV_NAME ]
52
58
assert error_message == "CREATE_VENV.VENV_FAILED_CREATION"
53
59
@@ -62,18 +68,23 @@ def add_gitignore(_name):
62
68
create_venv .add_gitignore = add_gitignore
63
69
64
70
args = []
65
- if git_ignore :
66
- args .append ("--git-ignore" )
67
- if install :
68
- args .append ("--install" )
71
+ if git_ignore == "useGitIgnore" :
72
+ args += ["--git-ignore" ]
73
+ if install == "requirements" :
74
+ args += ["--requirements" , "requirements-for-test.txt" ]
75
+ elif install == "toml" :
76
+ args += ["--toml" , "pyproject.toml" , "--extras" , "test" ]
77
+
69
78
create_venv .main (args )
70
- assert install_packages_called == install
79
+ assert install_packages_called == ( install != "skipInstall" )
71
80
72
81
# run_process is called when the venv does not exist
73
- assert run_process_called != env_exists
82
+ assert run_process_called == ( env_exists == "noEnv" )
74
83
75
84
# add_gitignore is called when new venv is created and git_ignore is True
76
- assert add_gitignore_called == (not env_exists and git_ignore )
85
+ assert add_gitignore_called == (
86
+ (env_exists == "noEnv" ) and (git_ignore == "useGitIgnore" )
87
+ )
77
88
78
89
79
90
@pytest .mark .parametrize ("install_type" , ["requirements" , "pyproject" ])
@@ -93,12 +104,79 @@ def run_process(args, error_message):
93
104
elif args [1 :- 1 ] == ["-m" , "pip" , "install" , "-r" ]:
94
105
installing = "requirements"
95
106
assert error_message == "CREATE_VENV.PIP_FAILED_INSTALL_REQUIREMENTS"
96
- elif args [1 :] == ["-m" , "pip" , "install" , "-e" , ".[extras ]" ]:
107
+ elif args [1 :] == ["-m" , "pip" , "install" , "-e" , ".[test ]" ]:
97
108
installing = "pyproject"
98
109
assert error_message == "CREATE_VENV.PIP_FAILED_INSTALL_PYPROJECT"
99
110
100
111
create_venv .run_process = run_process
101
112
102
- create_venv .main (["--install" ])
113
+ if install_type == "requirements" :
114
+ create_venv .main (["--requirements" , "requirements-for-test.txt" ])
115
+ elif install_type == "pyproject" :
116
+ create_venv .main (["--toml" , "pyproject.toml" , "--extras" , "test" ])
117
+
103
118
assert pip_upgraded
104
119
assert installing == install_type
120
+
121
+
122
+ @pytest .mark .parametrize (
123
+ ("extras" , "expected" ),
124
+ [
125
+ ([], ["-m" , "pip" , "install" , "-e" , "." ]),
126
+ (["test" ], ["-m" , "pip" , "install" , "-e" , ".[test]" ]),
127
+ (["test" , "doc" ], ["-m" , "pip" , "install" , "-e" , ".[test,doc]" ]),
128
+ ],
129
+ )
130
+ def test_toml_args (extras , expected ):
131
+ importlib .reload (create_venv )
132
+
133
+ actual = []
134
+
135
+ def run_process (args , error_message ):
136
+ nonlocal actual
137
+ actual = args [1 :]
138
+
139
+ create_venv .run_process = run_process
140
+
141
+ create_venv .install_toml (sys .executable , extras )
142
+
143
+ assert actual == expected
144
+
145
+
146
+ @pytest .mark .parametrize (
147
+ ("extras" , "expected" ),
148
+ [
149
+ ([], None ),
150
+ (
151
+ ["requirements/test.txt" ],
152
+ [sys .executable , "-m" , "pip" , "install" , "-r" , "requirements/test.txt" ],
153
+ ),
154
+ (
155
+ ["requirements/test.txt" , "requirements/doc.txt" ],
156
+ [
157
+ sys .executable ,
158
+ "-m" ,
159
+ "pip" ,
160
+ "install" ,
161
+ "-r" ,
162
+ "requirements/test.txt" ,
163
+ "-r" ,
164
+ "requirements/doc.txt" ,
165
+ ],
166
+ ),
167
+ ],
168
+ )
169
+ def test_requirements_args (extras , expected ):
170
+ importlib .reload (create_venv )
171
+
172
+ actual = None
173
+
174
+ def run_process (args , error_message ):
175
+ nonlocal actual
176
+ actual = args
177
+
178
+ create_venv .run_process = run_process
179
+
180
+ create_venv .install_requirements (sys .executable , extras )
181
+
182
+ assert actual == expected
0 commit comments