|
1 | 1 | import os |
2 | 2 | import shutil |
3 | 3 | import unittest |
| 4 | +from unittest.mock import patch |
4 | 5 | from contextlib import contextmanager |
5 | 6 |
|
6 | 7 | import time |
7 | 8 | import json |
8 | 9 | import subprocess |
9 | 10 |
|
| 11 | +import flask |
| 12 | +from flask.testing import FlaskClient |
| 13 | + |
10 | 14 | from shapeflow import settings, ROOTDIR, save_settings |
| 15 | +from shapeflow.server import ShapeflowServer, UI, DIST |
11 | 16 |
|
12 | 17 | CACHE = os.path.join(ROOTDIR, 'test_main-cache') |
13 | 18 | DB = os.path.join(ROOTDIR, 'test_main-history.db') |
@@ -169,6 +174,55 @@ def test_set_settings_restart(self): |
169 | 174 | post(api('set_settings'), data=json.dumps({'settings': first_settings})) |
170 | 175 | time.sleep(10) |
171 | 176 |
|
| 177 | + |
| 178 | +@patch('os.path.isfile') |
| 179 | +@patch('os.path.isdir') |
| 180 | +@patch('flask.send_from_directory') |
| 181 | +class FlaskTest(unittest.TestCase): |
| 182 | + client: FlaskClient |
| 183 | + |
| 184 | + def setUp(self) -> None: |
| 185 | + sfs = ShapeflowServer() |
| 186 | + sfs._app.config['TESTING'] = True |
| 187 | + |
| 188 | + self.client = sfs._app.test_client() |
| 189 | + |
| 190 | + def test_serve_index_200(self, send_from_directory, _, isfile): |
| 191 | + isfile.return_value = True |
| 192 | + send_from_directory.return_value = flask.Response() |
| 193 | + |
| 194 | + r = self.client.get('/') |
| 195 | + |
| 196 | + send_from_directory.assert_called_with(DIST, 'index.html') |
| 197 | + self.assertEqual(r.status_code, 200) |
| 198 | + |
| 199 | + def test_serve_index_404(self, send_from_directory, _, isfile): |
| 200 | + isfile.return_value = False |
| 201 | + send_from_directory.return_value = flask.Response() |
| 202 | + |
| 203 | + r = self.client.get('/') |
| 204 | + |
| 205 | + send_from_directory.assert_called_with(UI, '404.html') |
| 206 | + self.assertEqual(r.status_code, 404) |
| 207 | + |
| 208 | + def test_serve_file_200(self, send_from_directory, _, isfile): |
| 209 | + isfile.return_value = True |
| 210 | + send_from_directory.return_value = flask.Response() |
| 211 | + |
| 212 | + r = self.client.get('/something.txt') |
| 213 | + |
| 214 | + send_from_directory.assert_called_with(DIST, 'something.txt') |
| 215 | + self.assertEqual(r.status_code, 200) |
| 216 | + |
| 217 | + def test_serve_file_404(self, send_from_directory, _, isfile): |
| 218 | + isfile.return_value = False |
| 219 | + send_from_directory.return_value = flask.Response() |
| 220 | + |
| 221 | + r = self.client.get('/something.txt') |
| 222 | + |
| 223 | + send_from_directory.assert_not_called() |
| 224 | + self.assertEqual(r.status_code, 404) |
| 225 | + |
| 226 | + |
172 | 227 | if __name__ == '__main__': |
173 | 228 | unittest.main() |
174 | | - |
|
0 commit comments