import os import tempfile import unittest from app import create_app, db from app.services.hardware import GPIOController from config import TestingConfig class LegacySixthBatchConfig(TestingConfig): _TMP_DIR = tempfile.mkdtemp(prefix="wesp-legacy-batch6-tests-") SQLALCHEMY_DATABASE_URI = f"sqlite:///{os.path.join(_TMP_DIR, 'recipes_test.db')}" SQLALCHEMY_BINDS = {"reports": f"sqlite:///{os.path.join(_TMP_DIR, 'reports_test.db')}"} AUTH_LOGIN = "legacy6-admin" AUTH_PASSWORD = "legacy6-secret" SIMULATION_MODE = True GPIO_LED_PIN = 18 class LegacyCompatSixthBatchTests(unittest.TestCase): def setUp(self) -> None: GPIOController._reset_for_tests() self.app = create_app(LegacySixthBatchConfig) self.client = self.app.test_client() self.ctx = self.app.app_context() self.ctx.push() db.create_all() login = self.client.post( "/api/auth/login", json={"login": "legacy6-admin", "password": "legacy6-secret"} ) self.assertEqual(login.status_code, 200) def tearDown(self) -> None: db.session.remove() db.drop_all() self.ctx.pop() GPIOController._reset_for_tests() def test_led_legacy_endpoint(self) -> None: on_resp = self.client.post("/api/led/on") self.assertEqual(on_resp.status_code, 200) self.assertEqual(on_resp.get_json()["status"], "success") blink_resp = self.client.post("/api/led/blink", json={"times": 2, "delay": 0.05}) self.assertEqual(blink_resp.status_code, 200) self.assertEqual(blink_resp.get_json()["status"], "success") off_resp = self.client.post("/api/led/off") self.assertEqual(off_resp.status_code, 200) self.assertEqual(off_resp.get_json()["status"], "success") bad_resp = self.client.post("/api/led/invalid") self.assertEqual(bad_resp.status_code, 400) self.assertEqual(bad_resp.get_json()["status"], "error") if __name__ == "__main__": unittest.main()