mirror of
https://github.com/khoaliber/LetterFeed.git
synced 2026-03-06 05:39:12 +00:00
test: newsletter update, delete, feed
This commit is contained in:
@@ -170,3 +170,42 @@ def test_get_entries_by_newsletter(db_session: Session):
|
||||
entries = get_entries_by_newsletter(db_session, newsletter.id)
|
||||
assert len(entries) == 2
|
||||
assert entries[0].subject == "Entry 1"
|
||||
|
||||
|
||||
def test_update_newsletter(db_session: Session):
|
||||
"""Test updating a newsletter."""
|
||||
unique_email = f"sender_{uuid.uuid4()}@test.com"
|
||||
newsletter_data = NewsletterCreate(
|
||||
name="Newsletter to Update", sender_emails=[unique_email]
|
||||
)
|
||||
newsletter = create_newsletter(db_session, newsletter_data)
|
||||
|
||||
from app.schemas.newsletters import NewsletterUpdate
|
||||
|
||||
updated_email = f"updated_sender_{uuid.uuid4()}@test.com"
|
||||
updated_newsletter_data = NewsletterUpdate(name="Updated Newsletter", sender_emails=[updated_email])
|
||||
from app.crud.newsletters import update_newsletter
|
||||
updated_newsletter = update_newsletter(db_session, newsletter.id, updated_newsletter_data)
|
||||
|
||||
assert updated_newsletter.name == "Updated Newsletter"
|
||||
assert len(updated_newsletter.senders) == 1
|
||||
assert updated_newsletter.senders[0].email == updated_email
|
||||
|
||||
|
||||
def test_delete_newsletter(db_session: Session):
|
||||
"""Test deleting a newsletter."""
|
||||
unique_email = f"sender_{uuid.uuid4()}@test.com"
|
||||
newsletter_data = NewsletterCreate(
|
||||
name="Newsletter to Delete", sender_emails=[unique_email]
|
||||
)
|
||||
newsletter = create_newsletter(db_session, newsletter_data)
|
||||
|
||||
from app.crud.newsletters import delete_newsletter
|
||||
deleted_newsletter = delete_newsletter(db_session, newsletter.id)
|
||||
|
||||
assert deleted_newsletter.id == newsletter.id
|
||||
assert deleted_newsletter.name == "Newsletter to Delete"
|
||||
|
||||
# Verify it's actually deleted
|
||||
from app.crud.newsletters import get_newsletter
|
||||
assert get_newsletter(db_session, newsletter.id) is None
|
||||
|
||||
@@ -145,3 +145,36 @@ def test_get_nonexistent_newsletter(client: TestClient):
|
||||
response = client.get("/newsletters/999")
|
||||
assert response.status_code == 404
|
||||
assert response.json() == {"detail": "Newsletter not found"}
|
||||
|
||||
|
||||
def test_get_newsletter_feed(client: TestClient):
|
||||
"""Test generating a newsletter feed."""
|
||||
unique_email = f"feed_test_{uuid.uuid4()}@example.com"
|
||||
newsletter_data = {"name": "Feed Test Newsletter", "sender_emails": [unique_email]}
|
||||
create_response = client.post("/newsletters/", json=newsletter_data)
|
||||
newsletter_id = create_response.json()["id"]
|
||||
|
||||
# Add some entries to the newsletter
|
||||
entry_data_1 = {"subject": "Test Entry 1", "body": "<p>Content 1</p>"}
|
||||
client.post(f"/newsletters/{newsletter_id}/entries", json=entry_data_1)
|
||||
entry_data_2 = {"subject": "Test Entry 2", "body": "<p>Content 2</p>"}
|
||||
client.post(f"/newsletters/{newsletter_id}/entries", json=entry_data_2)
|
||||
|
||||
response = client.get(f"/feeds/{newsletter_id}")
|
||||
assert response.status_code == 200
|
||||
assert "application/atom+xml" in response.headers["content-type"]
|
||||
assert f"<title>Feed Test Newsletter</title>" in response.text
|
||||
import xml.etree.ElementTree as ET
|
||||
root = ET.fromstring(response.text)
|
||||
# Atom feed uses a namespace, so we need to include it in our tag searches
|
||||
ns = {'atom': 'http://www.w3.org/2005/Atom'}
|
||||
entry_titles = [entry.find('atom:title', ns).text for entry in root.findall('atom:entry', ns)]
|
||||
assert "Test Entry 1" in entry_titles
|
||||
assert "Test Entry 2" in entry_titles
|
||||
|
||||
|
||||
def test_get_newsletter_feed_nonexistent_newsletter(client: TestClient):
|
||||
"""Test generating a feed for a nonexistent newsletter."""
|
||||
response = client.get("/feeds/999")
|
||||
assert response.status_code == 404
|
||||
assert response.json() == {"detail": "Newsletter not found"}
|
||||
|
||||
Reference in New Issue
Block a user