Files
baiyue-logistics-chat/tests/test_deployment.py
T

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()