Archive Twitch chat badges

This commit is contained in:
Joakim Hellsén 2026-01-16 00:28:25 +01:00
commit 6842581656
No known key found for this signature in database
14 changed files with 1394 additions and 1 deletions

View file

@ -0,0 +1,199 @@
"""Tests for chat badge views."""
from __future__ import annotations
from typing import TYPE_CHECKING
import pytest
from django.urls import reverse
from twitch.models import ChatBadge
from twitch.models import ChatBadgeSet
if TYPE_CHECKING:
from django.test import Client
@pytest.mark.django_db
class TestBadgeListView:
"""Tests for the badge list view."""
def test_badge_list_empty(self, client: Client) -> None:
"""Test badge list view with no badges."""
response = client.get(reverse("twitch:badge_list"))
assert response.status_code == 200
assert "No badge sets found" in response.content.decode()
def test_badge_list_displays_sets(self, client: Client) -> None:
"""Test that badge sets are displayed."""
badge_set1 = ChatBadgeSet.objects.create(set_id="vip")
badge_set2 = ChatBadgeSet.objects.create(set_id="subscriber")
response = client.get(reverse("twitch:badge_list"))
assert response.status_code == 200
content = response.content.decode()
assert badge_set1.set_id in content
assert badge_set2.set_id in content
def test_badge_list_displays_badge_count(self, client: Client) -> None:
"""Test that badge version count is displayed."""
badge_set = ChatBadgeSet.objects.create(set_id="bits")
ChatBadge.objects.create(
badge_set=badge_set,
badge_id="1",
image_url_1x="https://example.com/1x.png",
image_url_2x="https://example.com/2x.png",
image_url_4x="https://example.com/4x.png",
title="Bits 1",
description="1 Bit",
)
ChatBadge.objects.create(
badge_set=badge_set,
badge_id="100",
image_url_1x="https://example.com/1x.png",
image_url_2x="https://example.com/2x.png",
image_url_4x="https://example.com/4x.png",
title="Bits 100",
description="100 Bits",
)
response = client.get(reverse("twitch:badge_list"))
assert response.status_code == 200
content = response.content.decode()
# Should show version count (the template uses "versions" not "version")
assert "2" in content
assert "versions" in content
@pytest.mark.django_db
class TestBadgeSetDetailView:
"""Tests for the badge set detail view."""
def test_badge_set_detail_not_found(self, client: Client) -> None:
"""Test 404 when badge set doesn't exist."""
response = client.get(reverse("twitch:badge_set_detail", kwargs={"set_id": "nonexistent"}))
assert response.status_code == 404
def test_badge_set_detail_displays_badges(self, client: Client) -> None:
"""Test that badge versions are displayed."""
badge_set = ChatBadgeSet.objects.create(set_id="moderator")
badge = ChatBadge.objects.create(
badge_set=badge_set,
badge_id="1",
image_url_1x="https://example.com/1x.png",
image_url_2x="https://example.com/2x.png",
image_url_4x="https://example.com/4x.png",
title="Moderator",
description="Channel Moderator",
click_action="visit_url",
click_url="https://help.twitch.tv",
)
response = client.get(reverse("twitch:badge_set_detail", kwargs={"set_id": "moderator"}))
assert response.status_code == 200
content = response.content.decode()
assert badge.title in content
assert badge.description in content
assert badge.badge_id in content
assert badge.image_url_4x in content
def test_badge_set_detail_displays_metadata(self, client: Client) -> None:
"""Test that badge set metadata is displayed."""
badge_set = ChatBadgeSet.objects.create(set_id="vip")
ChatBadge.objects.create(
badge_set=badge_set,
badge_id="1",
image_url_1x="https://example.com/1x.png",
image_url_2x="https://example.com/2x.png",
image_url_4x="https://example.com/4x.png",
title="VIP",
description="VIP Badge",
)
response = client.get(reverse("twitch:badge_set_detail", kwargs={"set_id": "vip"}))
assert response.status_code == 200
content = response.content.decode()
assert "vip" in content
assert "Total Versions:" in content
assert "1" in content
def test_badge_set_detail_json_data(self, client: Client) -> None:
"""Test that JSON data is displayed."""
badge_set = ChatBadgeSet.objects.create(set_id="test_set")
ChatBadge.objects.create(
badge_set=badge_set,
badge_id="1",
image_url_1x="https://example.com/1x.png",
image_url_2x="https://example.com/2x.png",
image_url_4x="https://example.com/4x.png",
title="Test",
description="Test Badge",
)
response = client.get(reverse("twitch:badge_set_detail", kwargs={"set_id": "test_set"}))
assert response.status_code == 200
content = response.content.decode()
# Should include JSON data section
assert "Badge Set Data (JSON)" in content
assert "test_set" in content
@pytest.mark.django_db
class TestBadgeSearch:
"""Tests for badge search functionality."""
def test_search_finds_badge_sets(self, client: Client) -> None:
"""Test that search finds badge sets."""
ChatBadgeSet.objects.create(set_id="vip")
ChatBadgeSet.objects.create(set_id="subscriber")
response = client.get(reverse("twitch:search"), {"q": "vip"})
assert response.status_code == 200
content = response.content.decode()
assert "Badge Sets" in content
assert "vip" in content
def test_search_finds_badges_by_title(self, client: Client) -> None:
"""Test that search finds badges by title."""
badge_set = ChatBadgeSet.objects.create(set_id="test")
ChatBadge.objects.create(
badge_set=badge_set,
badge_id="1",
image_url_1x="https://example.com/1x.png",
image_url_2x="https://example.com/2x.png",
image_url_4x="https://example.com/4x.png",
title="Moderator Badge",
description="Test description",
)
response = client.get(reverse("twitch:search"), {"q": "Moderator"})
assert response.status_code == 200
content = response.content.decode()
assert "Chat Badges" in content
assert "Moderator Badge" in content
def test_search_finds_badges_by_description(self, client: Client) -> None:
"""Test that search finds badges by description."""
badge_set = ChatBadgeSet.objects.create(set_id="test")
ChatBadge.objects.create(
badge_set=badge_set,
badge_id="1",
image_url_1x="https://example.com/1x.png",
image_url_2x="https://example.com/2x.png",
image_url_4x="https://example.com/4x.png",
title="Test Badge",
description="Unique description text",
)
response = client.get(reverse("twitch:search"), {"q": "Unique description"})
assert response.status_code == 200
content = response.content.decode()
assert "Chat Badges" in content or "Test Badge" in content