Coverage for src/meshadmin/cli/tests/test_network.py: 100%
47 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-05-06 11:34 +0200
« prev ^ index » next coverage.py v7.8.0, created at 2025-05-06 11:34 +0200
1import httpx
2import pytest
3from typer.testing import CliRunner
5from meshadmin.cli.main import app
7runner = CliRunner()
9MOCK_NETWORK_LIST = [
10 {"id": 1, "name": "test-network", "cidr": "10.0.0.0/24"},
11 {"id": 2, "name": "prod-network", "cidr": "10.1.0.0/24"},
12]
14MOCK_NETWORK_CREATE = {"id": 1, "name": "new-network", "cidr": "10.2.0.0/24"}
17@pytest.fixture
18def mock_access_token(mocker):
19 return mocker.patch(
20 "meshadmin.cli.commands.network.get_access_token", return_value="fake-token"
21 )
24@pytest.fixture
25def mock_context_config(mocker):
26 return mocker.patch(
27 "meshadmin.cli.commands.network.get_context_config",
28 return_value={"endpoint": "http://testserver"},
29 )
32def test_list_networks_success(mocker, mock_access_token, mock_context_config):
33 mock_response = httpx.Response(
34 status_code=200,
35 json=MOCK_NETWORK_LIST,
36 request=httpx.Request("GET", "http://testserver/api/v1/networks"),
37 )
38 mock_get = mocker.patch("httpx.get", return_value=mock_response)
39 result = runner.invoke(app, ["network", "list"])
40 assert result.exit_code == 0
41 mock_get.assert_called_once_with(
42 "http://testserver/api/v1/networks",
43 headers={"Authorization": "Bearer fake-token"},
44 )
45 assert "test-network" in result.stdout
46 assert "prod-network" in result.stdout
49def test_list_networks_auth_failure(mock_access_token, mock_context_config):
50 mock_access_token.side_effect = Exception("Auth failed")
51 result = runner.invoke(app, ["network", "list"])
52 assert result.exit_code == 1
53 assert "failed to get access token" in result.stdout
56def test_create_network_success(mocker, mock_access_token, mock_context_config):
57 mock_response = httpx.Response(
58 status_code=200,
59 json=MOCK_NETWORK_CREATE,
60 request=httpx.Request("POST", "http://testserver/api/v1/networks"),
61 )
62 mock_post = mocker.patch("httpx.post", return_value=mock_response)
63 result = runner.invoke(app, ["network", "create", "new-network", "10.2.0.0/24"])
64 assert result.exit_code == 0
65 mock_post.assert_called_once()
66 call_args = mock_post.call_args
67 assert call_args[0][0] == "http://testserver/api/v1/networks"
68 assert call_args[1]["headers"] == {"Authorization": "Bearer fake-token"}
69 assert "new-network" in result.stdout
72def test_create_network_server_error(mocker, mock_access_token, mock_context_config):
73 mock_response = httpx.Response(
74 status_code=400,
75 request=httpx.Request("POST", "http://testserver/api/v1/networks"),
76 )
77 mocker.patch("httpx.post", return_value=mock_response)
78 result = runner.invoke(app, ["network", "create", "new-network", "invalid-cidr"])
79 assert result.exit_code == 1
80 assert "could not create network" in result.stdout
83def test_create_network_auth_failure(mock_access_token, mock_context_config):
84 mock_access_token.side_effect = Exception("Auth failed")
85 result = runner.invoke(app, ["network", "create", "new-network", "10.2.0.0/24"])
86 assert result.exit_code == 1
87 assert "failed to get access token" in result.stdout