mirror of
https://github.com/maziggy/bambuddy.git
synced 2026-08-11 00:30:12 -04:00
61 lines
2.3 KiB
Python
61 lines
2.3 KiB
Python
"""Integration tests for GET /api/v1/virtual-printers/tailscale-status."""
|
|
|
|
from unittest.mock import AsyncMock, patch
|
|
|
|
import pytest
|
|
from httpx import AsyncClient
|
|
|
|
|
|
class TestTailscaleStatusAPI:
|
|
"""Tests for the tailscale-status endpoint."""
|
|
|
|
@pytest.mark.asyncio
|
|
@pytest.mark.integration
|
|
async def test_tailscale_status_available(self, async_client: AsyncClient):
|
|
"""Returns 200 with available=true when Tailscale is connected."""
|
|
from backend.app.services.virtual_printer.tailscale import TailscaleStatus
|
|
|
|
mock_status = TailscaleStatus(
|
|
available=True,
|
|
hostname="myhost",
|
|
tailnet_name="example.ts.net",
|
|
fqdn="myhost.example.ts.net",
|
|
tailscale_ips=["100.1.2.3"],
|
|
)
|
|
|
|
with patch("backend.app.api.routes.virtual_printers.tailscale_service") as mock_svc:
|
|
mock_svc.get_status = AsyncMock(return_value=mock_status)
|
|
response = await async_client.get("/api/v1/virtual-printers/tailscale-status")
|
|
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["available"] is True
|
|
assert data["fqdn"] == "myhost.example.ts.net"
|
|
assert data["hostname"] == "myhost"
|
|
assert data["tailnet_name"] == "example.ts.net"
|
|
assert "100.1.2.3" in data["tailscale_ips"]
|
|
assert data["error"] is None
|
|
|
|
@pytest.mark.asyncio
|
|
@pytest.mark.integration
|
|
async def test_tailscale_status_unavailable(self, async_client: AsyncClient):
|
|
"""Returns 200 with available=false and error message when Tailscale is absent."""
|
|
from backend.app.services.virtual_printer.tailscale import TailscaleStatus
|
|
|
|
mock_status = TailscaleStatus(
|
|
available=False,
|
|
hostname="",
|
|
tailnet_name="",
|
|
fqdn="",
|
|
error="tailscale binary not found",
|
|
)
|
|
|
|
with patch("backend.app.api.routes.virtual_printers.tailscale_service") as mock_svc:
|
|
mock_svc.get_status = AsyncMock(return_value=mock_status)
|
|
response = await async_client.get("/api/v1/virtual-printers/tailscale-status")
|
|
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["available"] is False
|
|
assert data["fqdn"] == ""
|
|
assert data["error"] == "tailscale binary not found"
|