|
1 | | -from unittest.mock import call, patch |
2 | 1 | import getpass |
3 | 2 | import os |
4 | | -import pytest |
5 | 3 | import subprocess |
| 4 | +from platform import python_version |
| 5 | +from unittest.mock import call, patch |
6 | 6 |
|
| 7 | +import pytest |
7 | 8 | from scripts.pa_start_django_webapp_with_virtualenv import main |
8 | 9 |
|
9 | 10 |
|
10 | 11 | class TestMain: |
11 | | - |
12 | 12 | def test_calls_all_stuff_in_right_order(self): |
13 | | - with patch('scripts.pa_start_django_webapp_with_virtualenv.DjangoProject') as mock_DjangoProject: |
14 | | - main('www.domain.com', 'django.version', 'python.version', nuke='nuke option') |
15 | | - assert mock_DjangoProject.call_args == call('www.domain.com', 'python.version') |
| 13 | + with patch("scripts.pa_start_django_webapp_with_virtualenv.DjangoProject") as mock_DjangoProject: |
| 14 | + main("www.domain.com", "django.version", "python.version", nuke="nuke option") |
| 15 | + assert mock_DjangoProject.call_args == call("www.domain.com", "python.version") |
16 | 16 | assert mock_DjangoProject.return_value.method_calls == [ |
17 | | - call.sanity_checks(nuke='nuke option'), |
18 | | - call.create_virtualenv('django.version', nuke='nuke option'), |
19 | | - call.run_startproject(nuke='nuke option'), |
| 17 | + call.sanity_checks(nuke="nuke option"), |
| 18 | + call.create_virtualenv("django.version", nuke="nuke option"), |
| 19 | + call.run_startproject(nuke="nuke option"), |
20 | 20 | call.find_django_files(), |
21 | 21 | call.update_settings_file(), |
22 | 22 | call.run_collectstatic(), |
23 | | - call.create_webapp(nuke='nuke option'), |
| 23 | + call.create_webapp(nuke="nuke option"), |
24 | 24 | call.add_static_file_mappings(), |
25 | 25 | call.update_wsgi_file(), |
26 | 26 | call.webapp.reload(), |
27 | 27 | ] |
28 | 28 |
|
29 | | - |
30 | 29 | def test_domain_defaults_to_using_current_username_and_domain_from_env(self, monkeypatch): |
31 | 30 | username = getpass.getuser() |
32 | | - monkeypatch.setenv('PYTHONANYWHERE_DOMAIN', 'pythonanywhere.domain') |
33 | | - with patch('scripts.pa_start_django_webapp_with_virtualenv.DjangoProject') as mock_DjangoProject: |
34 | | - main('your-username.pythonanywhere.com', 'django.version', 'python.version', nuke=False) |
35 | | - assert mock_DjangoProject.call_args == call(username + '.pythonanywhere.domain', 'python.version') |
36 | | - |
| 31 | + monkeypatch.setenv("PYTHONANYWHERE_DOMAIN", "pythonanywhere.domain") |
| 32 | + with patch("scripts.pa_start_django_webapp_with_virtualenv.DjangoProject") as mock_DjangoProject: |
| 33 | + main("your-username.pythonanywhere.com", "django.version", "python.version", nuke=False) |
| 34 | + assert mock_DjangoProject.call_args == call(username + ".pythonanywhere.domain", "python.version") |
37 | 35 |
|
38 | 36 | def test_lowercases_username(self): |
39 | | - with patch('scripts.pa_start_django_webapp_with_virtualenv.getpass') as mock_getpass: |
40 | | - mock_getpass.getuser.return_value = 'UserName1' |
41 | | - with patch('scripts.pa_start_django_webapp_with_virtualenv.DjangoProject') as mock_DjangoProject: |
42 | | - main('your-username.pythonanywhere.com', 'django.version', 'python.version', 'nukey') |
43 | | - assert mock_DjangoProject.call_args == call('username1.pythonanywhere.com', 'python.version') |
44 | | - |
| 37 | + with patch("scripts.pa_start_django_webapp_with_virtualenv.getpass") as mock_getpass: |
| 38 | + mock_getpass.getuser.return_value = "UserName1" |
| 39 | + with patch("scripts.pa_start_django_webapp_with_virtualenv.DjangoProject") as mock_DjangoProject: |
| 40 | + main("your-username.pythonanywhere.com", "django.version", "python.version", "nukey") |
| 41 | + assert mock_DjangoProject.call_args == call("username1.pythonanywhere.com", "python.version") |
45 | 42 |
|
46 | 43 | @pytest.mark.slowtest |
47 | 44 | def test_actually_creates_django_project_in_virtualenv_with_hacked_settings_and_static_files( |
48 | 45 | self, fake_home, virtualenvs_folder, api_token |
49 | 46 | ): |
50 | 47 |
|
51 | | - with patch('scripts.pa_start_django_webapp_with_virtualenv.DjangoProject.update_wsgi_file'): |
52 | | - with patch('pythonanywhere.api.call_api'): |
53 | | - main('mydomain.com', '1.9.2', '2.7', nuke=False) |
54 | | - |
55 | | - django_version = subprocess.check_output([ |
56 | | - str(virtualenvs_folder / 'mydomain.com/bin/python'), |
57 | | - '-c' |
58 | | - 'import django; print(django.get_version())' |
59 | | - ]).decode().strip() |
60 | | - assert django_version == '1.9.2' |
61 | | - |
62 | | - with (fake_home / 'mydomain.com/mysite/settings.py').open() as f: |
63 | | - lines = f.read().split('\n') |
| 48 | + with patch("scripts.pa_start_django_webapp_with_virtualenv.DjangoProject.update_wsgi_file"): |
| 49 | + with patch("pythonanywhere.api.call_api"): |
| 50 | + main("mydomain.com", "1.9.2", "2.7", nuke=False) |
| 51 | + |
| 52 | + django_version = ( |
| 53 | + subprocess.check_output( |
| 54 | + [ |
| 55 | + str(virtualenvs_folder / "mydomain.com/bin/python"), |
| 56 | + "-c" "import django; print(django.get_version())", |
| 57 | + ] |
| 58 | + ) |
| 59 | + .decode() |
| 60 | + .strip() |
| 61 | + ) |
| 62 | + assert django_version == "1.9.2" |
| 63 | + |
| 64 | + with (fake_home / "mydomain.com/mysite/settings.py").open() as f: |
| 65 | + lines = f.read().split("\n") |
64 | 66 | assert "MEDIA_ROOT = os.path.join(BASE_DIR, 'media')" in lines |
65 | 67 | assert "ALLOWED_HOSTS = ['mydomain.com']" in lines |
66 | 68 |
|
67 | | - assert 'base.css' in os.listdir(str(fake_home / 'mydomain.com/static/admin/css')) |
68 | | - |
| 69 | + assert "base.css" in os.listdir(str(fake_home / "mydomain.com/static/admin/css")) |
69 | 70 |
|
70 | 71 | @pytest.mark.slowtest |
71 | | - def test_nuke_option_lets_you_run_twice( |
72 | | - self, fake_home, virtualenvs_folder, api_token |
73 | | - ): |
74 | | - |
75 | | - with patch('scripts.pa_start_django_webapp_with_virtualenv.DjangoProject.update_wsgi_file'): |
76 | | - with patch('pythonanywhere.api.call_api'): |
77 | | - main('mydomain.com', '1.9.2', '2.7', nuke=False) |
78 | | - main('mydomain.com', '1.11.3', '3.6', nuke=True) |
79 | | - |
80 | | - django_version = subprocess.check_output([ |
81 | | - str(virtualenvs_folder / 'mydomain.com/bin/python'), |
82 | | - '-c' |
83 | | - 'import django; print(django.get_version())' |
84 | | - ]).decode().strip() |
85 | | - assert django_version == '1.11.3' |
| 72 | + def test_nuke_option_lets_you_run_twice(self, fake_home, virtualenvs_folder, api_token): |
| 73 | + |
| 74 | + with patch("scripts.pa_start_django_webapp_with_virtualenv.DjangoProject.update_wsgi_file"): |
| 75 | + with patch("pythonanywhere.api.call_api"): |
| 76 | + version = ".".join(python_version().split(".")[:2]) |
| 77 | + main("mydomain.com", "1.9.2", version, nuke=False) |
| 78 | + main("mydomain.com", "1.11.3", version, nuke=True) |
| 79 | + |
| 80 | + django_version = ( |
| 81 | + subprocess.check_output( |
| 82 | + [ |
| 83 | + str(virtualenvs_folder / "mydomain.com/bin/python"), |
| 84 | + "-c" "import django; print(django.get_version())", |
| 85 | + ] |
| 86 | + ) |
| 87 | + .decode() |
| 88 | + .strip() |
| 89 | + ) |
| 90 | + assert django_version == "1.11.3" |
0 commit comments