kanban-app/backend/tests/routes/test_labels.py
2026-02-25 21:51:27 +03:00

184 lines
5.9 KiB
Python

import pytest
from app import db
from app.models import Board, Card, CardLabel, Label, List
@pytest.mark.integration
class TestLabelRoutes:
"""Test Label API routes"""
def test_get_board_labels_success(
self, client, db_session, regular_user, auth_headers
):
"""Test getting all labels for a board"""
board = Board(name="Test Board", user_id=regular_user.id)
db_session.add(board)
db_session.flush()
label1 = Label(name="Urgent", color="red", board_id=board.id)
label2 = Label(name="Low Priority", color="green", board_id=board.id)
db_session.add_all([label1, label2])
db_session.commit()
response = client.get(f"/api/boards/{board.id}/labels", headers=auth_headers)
assert response.status_code == 200
data = response.get_json()
assert len(data) == 2
assert data[0]["name"] == "Urgent"
assert data[1]["name"] == "Low Priority"
def test_get_board_labels_unauthorized(self, client, db_session, regular_user):
"""Test getting labels without authentication"""
board = Board(name="Test Board", user_id=regular_user.id)
db_session.add(board)
db_session.commit()
response = client.get(f"/api/boards/{board.id}/labels")
assert response.status_code == 401
def test_create_label_success(self, client, db_session, regular_user, auth_headers):
"""Test creating a new label in a board"""
board = Board(name="Test Board", user_id=regular_user.id)
db_session.add(board)
db_session.commit()
response = client.post(
f"/api/boards/{board.id}/labels",
headers=auth_headers,
json={"name": "Urgent", "color": "red"},
)
assert response.status_code == 201
data = response.get_json()
assert data["name"] == "Urgent"
assert data["color"] == "red"
assert data["board_id"] == board.id
def test_create_label_missing_name(
self, client, db_session, regular_user, auth_headers
):
"""Test creating a label without name"""
board = Board(name="Test Board", user_id=regular_user.id)
db_session.add(board)
db_session.commit()
response = client.post(
f"/api/boards/{board.id}/labels",
headers=auth_headers,
json={"color": "red"},
)
assert response.status_code == 400
def test_create_label_unauthorized(self, client, db_session, regular_user):
"""Test creating a label without authentication"""
board = Board(name="Test Board", user_id=regular_user.id)
db_session.add(board)
db_session.commit()
response = client.post(
f"/api/boards/{board.id}/labels",
json={"name": "Urgent", "color": "red"},
)
assert response.status_code == 401
def test_add_label_to_card_success(
self, client, db_session, regular_user, auth_headers
):
"""Test adding a label to a card"""
board = Board(name="Test Board", user_id=regular_user.id)
db_session.add(board)
db_session.flush()
lst = List(name="To Do", board_id=board.id, pos=0)
db_session.add(lst)
db_session.flush()
card = Card(name="Test Card", board_id=board.id, list_id=lst.id, pos=0)
db_session.add(card)
db_session.flush()
label = Label(name="Urgent", color="red", board_id=board.id)
db_session.add(label)
db_session.commit()
response = client.post(
f"/api/cards/{card.id}/labels",
headers=auth_headers,
json={"label_id": label.id},
)
assert response.status_code == 201
data = response.get_json()
assert data["card_id"] == card.id
assert data["label_id"] == label.id
def test_add_label_to_card_unauthorized(self, client, db_session, regular_user):
"""Test adding a label to card without authentication"""
board = Board(name="Test Board", user_id=regular_user.id)
db_session.add(board)
db_session.flush()
lst = List(name="To Do", board_id=board.id, pos=0)
db_session.add(lst)
db_session.flush()
card = Card(name="Test Card", board_id=board.id, list_id=lst.id, pos=0)
db_session.add(card)
db_session.flush()
label = Label(name="Urgent", color="red", board_id=board.id)
db_session.add(label)
db_session.commit()
response = client.post(
f"/api/cards/{card.id}/labels",
json={"label_id": label.id},
)
assert response.status_code == 401
def test_remove_label_from_card_success(
self, client, db_session, regular_user, auth_headers
):
"""Test removing a label from a card"""
board = Board(name="Test Board", user_id=regular_user.id)
db_session.add(board)
db_session.flush()
lst = List(name="To Do", board_id=board.id, pos=0)
db_session.add(lst)
db_session.flush()
card = Card(name="Test Card", board_id=board.id, list_id=lst.id, pos=0)
db_session.add(card)
db_session.flush()
label = Label(name="Urgent", color="red", board_id=board.id)
db_session.add(label)
db_session.flush()
card_label = CardLabel(card_id=card.id, label_id=label.id)
db_session.add(card_label)
db_session.commit()
response = client.delete(
f"/api/cards/{card.id}/labels/{label.id}",
headers=auth_headers,
)
assert response.status_code == 200
data = response.get_json()
assert "message" in data
# Verify card-label association is deleted
deleted_card_label = (
db.session.query(CardLabel)
.filter_by(card_id=card.id, label_id=label.id)
.first()
)
assert deleted_card_label is None