from fastapi.testclient import TestClient from app.main import app from app.schemas.swos_beta import SwosBetaProbeResponse def _login(client: TestClient) -> str: response = client.post('/api/auth/login', data={'username': 'admin', 'password': 'admin'}) return response.json()['access_token'] def test_swos_probe_endpoint(monkeypatch, tmp_path): monkeypatch.setenv('DATABASE_URL', f'sqlite:///{tmp_path / "swos_probe.db"}') monkeypatch.setenv('DATA_DIR', str(tmp_path / 'data')) monkeypatch.setenv('SECRET_KEY', 'test-secret') monkeypatch.setenv('DEFAULT_ADMIN_USERNAME', 'admin') monkeypatch.setenv('DEFAULT_ADMIN_PASSWORD', 'admin') from app.api.routes import swos_beta monkeypatch.setattr( swos_beta.swos_beta_service, 'probe', lambda payload: SwosBetaProbeResponse( success=True, base_url='http://192.168.88.1', status_code=200, auth_mode='digest', page_title='SwOS', content_type='text/html', server='MikroTik', save_backup_visible=True, backup_endpoint_ok=True, note='beta', ), ) with TestClient(app) as client: token = _login(client) response = client.post( '/api/swos-beta/probe', json={'host': '192.168.88.1', 'port': 80, 'username': 'admin', 'password': ''}, headers={'Authorization': f'Bearer {token}'}, ) assert response.status_code == 200 assert response.json()['backup_endpoint_ok'] is True def test_swos_download_endpoint(monkeypatch, tmp_path): monkeypatch.setenv('DATABASE_URL', f'sqlite:///{tmp_path / "swos_download.db"}') monkeypatch.setenv('DATA_DIR', str(tmp_path / 'data')) monkeypatch.setenv('SECRET_KEY', 'test-secret') monkeypatch.setenv('DEFAULT_ADMIN_USERNAME', 'admin') monkeypatch.setenv('DEFAULT_ADMIN_PASSWORD', 'admin') from app.api.routes import swos_beta class FakeBackup: filename = 'switch.swb' content = b'binary-data' content_type = 'application/octet-stream' monkeypatch.setattr(swos_beta.swos_beta_service, 'download_backup', lambda payload: FakeBackup()) with TestClient(app) as client: token = _login(client) response = client.post( '/api/swos-beta/download', json={'host': '192.168.88.1', 'port': 80, 'username': 'admin', 'password': ''}, headers={'Authorization': f'Bearer {token}'}, ) assert response.status_code == 200 assert response.content == b'binary-data' assert 'attachment; filename="switch.swb"' == response.headers['content-disposition']