import pytest import requests from unittest.mock import MagicMock, patch from server import PlankaClient @pytest.fixture def client(): return PlankaClient("https://planka.test", "fake-token") def test_get_projects_nested(client): mock_response = { "items": [ {"id": "1", "name": "Project 1"}, {"id": "2", "name": "Project 2"} ] } with patch("requests.get") as mock_get: mock_get.return_value.json.return_value = mock_response mock_get.return_value.status_code = 200 projects = client.get_projects() assert len(projects) == 2 assert projects[0]["name"] == "Project 1" def test_get_boards_included(client): mock_response = { "included": { "boards": [ {"id": "b1", "name": "Board 1"} ] } } with patch("requests.get") as mock_get: mock_get.return_value.json.return_value = mock_response mock_get.return_value.status_code = 200 boards = client.get_boards("p1") assert len(boards) == 1 assert boards[0]["name"] == "Board 1" def test_get_boards_empty(client): mock_response = {"item": {"id": "p1"}, "included": {}} with patch("requests.get") as mock_get: mock_get.return_value.json.return_value = mock_response mock_get.return_value.status_code = 200 boards = client.get_boards("p1") assert boards == [] def test_get_cards_nested(client): mock_response = { "included": { "cards": [ {"id": "c1", "name": "Card 1"} ] } } with patch("requests.get") as mock_get: mock_get.return_value.json.return_value = mock_response mock_get.return_value.status_code = 200 cards = client.get_cards("b1") assert len(cards) == 1 assert cards[0]["name"] == "Card 1" def test_get_cards_empty(client): mock_response = {} with patch("requests.get") as mock_get: mock_get.return_value.json.return_value = mock_response mock_get.return_value.status_code = 200 cards = client.get_cards("b1") assert cards == [] def test_get_board_lists_nested(client): mock_response = { "item": { "lists": [{"id": "l1", "name": "List 1"}] } } with patch("requests.get") as mock_get: mock_get.return_value.json.return_value = mock_response mock_get.return_value.status_code = 200 lists = client.get_board_lists("b1") assert len(lists) == 1 def test_get_boards_flat(client): mock_response = { "boards": [{"id": "b1", "name": "Board 1"}] } with patch("requests.get") as mock_get: mock_get.return_value.json.return_value = mock_response mock_get.return_value.status_code = 200 boards = client.get_boards("p1") assert len(boards) == 1 def test_get_board_lists_flat(client): mock_response = { "lists": [{"id": "l1", "name": "List 1"}] } with patch("requests.get") as mock_get: mock_get.return_value.json.return_value = mock_response mock_get.return_value.status_code = 200 lists = client.get_board_lists("b1") assert len(lists) == 1 def test_get_actions_flat(client): mock_response = [{"id": "a1"}] with patch("requests.get") as mock_get: mock_get.return_value.json.return_value = mock_response mock_get.return_value.status_code = 200 actions = client.get_actions("c1") assert len(actions) == 1 def test_get_json_decode_error(client): with patch("requests.get") as mock_get: mock_get.return_value.json.side_effect = requests.exceptions.JSONDecodeError("msg", "doc", 0) mock_get.return_value.status_code = 200 mock_get.return_value.text = "not json" res = client._get("endpoint") assert res is None def test_get_empty_text(client): with patch("requests.get") as mock_get: mock_get.return_value.status_code = 200 mock_get.return_value.text = "" res = client._get("endpoint") assert res is None def test_post_json_decode_error(client): with patch("requests.post") as mock_post: mock_post.return_value.json.side_effect = requests.exceptions.JSONDecodeError("msg", "doc", 0) mock_post.return_value.status_code = 200 mock_post.return_value.text = "not json" res = client._post("endpoint", {}) assert res is None def test_post_empty_text(client): with patch("requests.post") as mock_post: mock_post.return_value.status_code = 200 mock_post.return_value.text = "" res = client._post("endpoint", {}) assert res is None def test_get_boards_nested_item(client): mock_response = { "item": { "boards": [{"id": "b1", "name": "Board 1"}] } } with patch("requests.get") as mock_get: mock_get.return_value.json.return_value = mock_response mock_get.return_value.status_code = 200 boards = client.get_boards("p1") assert len(boards) == 1