Sari la conținut
← Toate exercițiile

Tag-uri care trec de la un tichet la altul

Python · Un helper de tag-uri într-un serviciu de tichete de suport · Logică · dificultate 2/3 · ~8 min

Unui asistent AI i s-au cerut helperi de tag-uri pentru un serviciu de tichete de suport:

Scrie add_tags(new_tags, existing), care returnează tag-urile existente plus cele noi, normalizate (litere mici, fără spații la margini, spațiile din interior transformate în cratime) și fără duplicate. existing trebuie să fie opțional. Scrie și tag_ticket(ticket, new_tags), care returnează o copie a tichetului cu tag-urile noi adăugate.

Helperii sunt folosiți de un handler de API care pune tag-uri pe multe tichete la fiecare request și de un job de noapte care pune din nou tag-uri pe tichetele vechi.

Testele vizibile trec. Fă review codului înainte să ajungă în producție: ce se întâmplă la al doilea apel și cu tichetul pe care l-ai trimis?

Repară codul până trec testele ascunse.

code.py

Teste vizibile (trec pe codul primit)
from exercise import Ticket, add_tags, normalize_tag, tag_ticket


def test_normalizes_case_and_spaces():
    assert normalize_tag("  Billing Issue ") == "billing-issue"


def test_adds_new_tags_after_the_existing_ones():
    assert add_tags(["Urgent", "urgent"], ["vip"]) == ["vip", "urgent"]


def test_tagged_copy_has_old_and_new_tags():
    ticket = Ticket(1, "Refund request", ["billing"])
    assert tag_ticket(ticket, ["Refund"]).tags == ["billing", "refund"]