feat: prevent duplicate cards, merge contexts, and display star badge when word is in library
This commit is contained in:
@@ -811,3 +811,60 @@ def test_gzip_compression():
|
||||
resp_raw = client.get("/static/js/app.js", headers={"Accept-Encoding": "identity"})
|
||||
assert resp_raw.status_code == 200
|
||||
assert resp_raw.headers.get("content-encoding") is None
|
||||
|
||||
|
||||
def test_duplicate_prevention_and_in_library_flag():
|
||||
# Login as testadmin
|
||||
client.post("/api/login", json={"username": "testadmin", "password": "testpass12345"})
|
||||
|
||||
# 1. Create initial card for 'admired'
|
||||
resp1 = client.post("/api/cards", json={
|
||||
"term": "admired",
|
||||
"translation": "восхищались",
|
||||
"context_sentence": "People admired his courage.",
|
||||
"tags": "jfk, book:kennedy",
|
||||
"collection": "Literature",
|
||||
})
|
||||
assert resp1.status_code == 200
|
||||
card1 = resp1.json()
|
||||
card_id = card1["id"]
|
||||
|
||||
# 2. Try adding same term with different case ('Admired') and new context
|
||||
resp2 = client.post("/api/cards", json={
|
||||
"term": "Admired",
|
||||
"translation": "восхищались",
|
||||
"context_sentence": "He admired his older brother.",
|
||||
"tags": "history, reader",
|
||||
"collection": "General",
|
||||
})
|
||||
assert resp2.status_code == 200
|
||||
card2 = resp2.json()
|
||||
|
||||
# Must be same card ID (no duplicate created!)
|
||||
assert card2["id"] == card_id
|
||||
assert card2.get("already_exists") is True
|
||||
|
||||
# Both contexts should be present and tags merged
|
||||
assert "People admired his courage." in card2["context_sentence"]
|
||||
assert "He admired his older brother." in card2["context_sentence"]
|
||||
assert "book:kennedy" in card2["tags"]
|
||||
assert "history" in card2["tags"]
|
||||
|
||||
# Verify database count has only 1 card for 'admired'
|
||||
cards_list = client.get("/api/cards?search=admired").json()["cards"]
|
||||
assert len(cards_list) == 1
|
||||
assert cards_list[0]["id"] == card_id
|
||||
|
||||
# 3. Test /api/lookup returns in_library: True for existing word
|
||||
resp_lookup_existing = client.get("/api/lookup?term=admired")
|
||||
assert resp_lookup_existing.status_code == 200
|
||||
data_existing = resp_lookup_existing.json()
|
||||
assert data_existing["in_library"] is True
|
||||
assert data_existing["library_card"]["id"] == card_id
|
||||
|
||||
# Test /api/lookup returns in_library: False for word not in user library
|
||||
resp_lookup_new = client.get("/api/lookup?term=xylophone_unseen_xyz")
|
||||
assert resp_lookup_new.status_code == 200
|
||||
data_new = resp_lookup_new.json()
|
||||
assert data_new["in_library"] is False
|
||||
assert data_new["library_card"] is None
|
||||
|
||||
Reference in New Issue
Block a user