48 lines
2.1 KiB
Python
48 lines
2.1 KiB
Python
"""Exercise the server factory using disposable state/log paths and no model key."""
|
|
|
|
import io
|
|
import logging
|
|
import os
|
|
from pathlib import Path
|
|
import tempfile
|
|
import unittest
|
|
from unittest.mock import patch
|
|
|
|
from deploy import wsgi
|
|
|
|
|
|
class DeploymentTests(unittest.TestCase):
|
|
def test_fresh_server_persists_business_data_and_uploads_outside_checkout(self):
|
|
directory = tempfile.TemporaryDirectory()
|
|
self.addCleanup(directory.cleanup)
|
|
root = Path(directory.name)
|
|
state, logs = root / 'state', root / 'logs'
|
|
with patch.object(wsgi, 'DATA_DIR', state), patch.object(wsgi, 'LOG_DIR', logs), \
|
|
patch.dict(os.environ, {'DEEPSEEK_API_KEY': ''}):
|
|
app = wsgi.create_app()
|
|
|
|
def close_handlers():
|
|
for handler in list(app.logger.handlers):
|
|
if isinstance(handler, logging.FileHandler):
|
|
handler.close()
|
|
app.logger.removeHandler(handler)
|
|
|
|
self.addCleanup(close_handlers)
|
|
client = app.test_client()
|
|
for path in ('/', '/admin/dashboard', '/api/tickets', '/api/my_orders?phone=123'):
|
|
self.assertEqual(client.get(path).status_code, 200, path)
|
|
self.assertEqual(client.post('/admin/login', json={'username': 'demo', 'password': 'test-password'}).status_code, 401)
|
|
self.assertEqual(client.post('/api/ticket', json={'content': 'Acceptance ticket', 'phone': '123'}).status_code, 200)
|
|
self.assertEqual(client.get('/api/tickets').json[0]['content'], 'Acceptance ticket')
|
|
uploaded = client.post('/api/upload', data={'file': (io.BytesIO(b'acceptance'), 'note.txt')})
|
|
self.assertEqual(uploaded.status_code, 200)
|
|
self.assertEqual((state / 'uploads' / uploaded.json['url'].rsplit('/', 1)[1]).read_bytes(), b'acceptance')
|
|
self.assertTrue((state / 'history.db').is_file())
|
|
self.assertEqual(len(list((state / 'backups').glob('history_*.db'))), 1)
|
|
self.assertTrue((logs / 'app.log').is_file())
|
|
self.assertEqual(app.config['HOST'], '127.0.0.1')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|