75 lines
2.7 KiB
Python
75 lines
2.7 KiB
Python
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']
|