"""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() client.post('/api/visitor/session', json={'key':'1'*64}) 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()