@@ -16,38 +16,44 @@ def test_venv_not_installed():
1616 assert str (e .value ) == "CREATE_VENV.VENV_NOT_FOUND"
1717
1818
19- def test_pip_not_installed ():
19+ @pytest .mark .parametrize ("install" , ["requirements" , "toml" ])
20+ def test_pip_not_installed (install ):
2021 importlib .reload (create_venv )
2122 create_venv .venv_exists = lambda _n : True
2223 create_venv .is_installed = lambda module : module != "pip"
2324 create_venv .run_process = lambda _args , _error_message : None
2425 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" ])
2630 assert str (e .value ) == "CREATE_VENV.PIP_NOT_FOUND"
2731
2832
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" ])
3236def test_create_env (env_exists , git_ignore , install ):
3337 importlib .reload (create_venv )
3438 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
3641
3742 install_packages_called = False
3843
39- def install_packages (_name ):
44+ def install_packages (_env , _name ):
4045 nonlocal install_packages_called
4146 install_packages_called = True
4247
43- create_venv .install_packages = install_packages
48+ create_venv .install_requirements = install_packages
49+ create_venv .install_toml = install_packages
4450
4551 run_process_called = False
4652
4753 def run_process (args , error_message ):
4854 nonlocal run_process_called
4955 run_process_called = True
50- if not env_exists :
56+ if env_exists == "noEnv" :
5157 assert args == [sys .executable , "-m" , "venv" , create_venv .VENV_NAME ]
5258 assert error_message == "CREATE_VENV.VENV_FAILED_CREATION"
5359
@@ -62,18 +68,23 @@ def add_gitignore(_name):
6268 create_venv .add_gitignore = add_gitignore
6369
6470 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+
6978 create_venv .main (args )
70- assert install_packages_called == install
79+ assert install_packages_called == ( install != "skipInstall" )
7180
7281 # 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" )
7483
7584 # 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+ )
7788
7889
7990@pytest .mark .parametrize ("install_type" , ["requirements" , "pyproject" ])
@@ -93,12 +104,79 @@ def run_process(args, error_message):
93104 elif args [1 :- 1 ] == ["-m" , "pip" , "install" , "-r" ]:
94105 installing = "requirements"
95106 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 ]" ]:
97108 installing = "pyproject"
98109 assert error_message == "CREATE_VENV.PIP_FAILED_INSTALL_PYPROJECT"
99110
100111 create_venv .run_process = run_process
101112
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+
103118 assert pip_upgraded
104119 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