ttvdrops/twitch/tests/test_sitemaps_lastmod.py
Joakim Hellsén 415dd12fd9
All checks were successful
Deploy to Server / deploy (push) Successful in 9s
Improve sitemaps
2026-02-27 06:02:30 +01:00

113 lines
5.4 KiB
Python

from __future__ import annotations
from datetime import datetime
from datetime import timedelta
from django.test import TestCase
from django.utils import timezone
from twitch.models import Channel
from twitch.models import ChatBadgeSet
from twitch.models import DropBenefit
from twitch.models import DropCampaign
from twitch.models import Game
from twitch.models import Organization
from twitch.models import RewardCampaign
from twitch.models import TimeBasedDrop
from twitch.sitemaps import TwitchSitemapGenerator
class StaticViewSitemapLastModTests(TestCase):
"""Tests for StaticViewSitemap lastmod method."""
def setUp(self) -> None:
"""Set up StaticViewSitemap instance for testing."""
self.sitemap = TwitchSitemapGenerator()
def test_search_is_none(self) -> None:
"""Test that lastmod for search sitemap item is None."""
assert self.sitemap.lastmod("twitch:search") is None
def test_campaigns_latest(self) -> None:
"""Test that lastmod for campaign list sitemap item reflects latest updated_at among DropCampaigns."""
game: Game = Game.objects.create(twitch_id="g1")
older: datetime = timezone.now() - timedelta(days=2)
newer: datetime = timezone.now() - timedelta(days=1)
c1: DropCampaign = DropCampaign.objects.create(twitch_id="dc1", name="c1", game=game)
c2: DropCampaign = DropCampaign.objects.create(twitch_id="dc2", name="c2", game=game)
DropCampaign.objects.filter(pk=c1.pk).update(updated_at=older)
DropCampaign.objects.filter(pk=c2.pk).update(updated_at=newer)
assert self.sitemap.lastmod("twitch:campaign_list") == newer
assert self.sitemap.lastmod("twitch:dashboard") == newer
def test_reward_campaigns_latest(self) -> None:
"""Test that lastmod for reward campaign list sitemap item reflects latest updated_at among RewardCampaigns."""
older: datetime = timezone.now() - timedelta(days=3)
newer: datetime = timezone.now() - timedelta(days=1)
r1: RewardCampaign = RewardCampaign.objects.create(twitch_id="r1", name="r1")
r2: RewardCampaign = RewardCampaign.objects.create(twitch_id="r2", name="r2")
RewardCampaign.objects.filter(pk=r1.pk).update(updated_at=older)
RewardCampaign.objects.filter(pk=r2.pk).update(updated_at=newer)
assert self.sitemap.lastmod("twitch:reward_campaign_list") == newer
def test_games_latest(self) -> None:
"""Test that lastmod for games grid sitemap item reflects latest updated_at among Games."""
older: datetime = timezone.now() - timedelta(days=4)
newer: datetime = timezone.now() - timedelta(days=1)
g1: Game = Game.objects.create(twitch_id="g2")
g2: Game = Game.objects.create(twitch_id="g3")
Game.objects.filter(pk=g1.pk).update(updated_at=older)
Game.objects.filter(pk=g2.pk).update(updated_at=newer)
assert self.sitemap.lastmod("twitch:games_grid") == newer
def test_orgs_latest(self) -> None:
"""Test that lastmod for org list sitemap item reflects latest updated_at among Organizations."""
older: datetime = timezone.now() - timedelta(days=5)
newer: datetime = timezone.now() - timedelta(days=1)
o1: Organization = Organization.objects.create(twitch_id="o1", name="Org1")
o2: Organization = Organization.objects.create(twitch_id="o2", name="Org2")
Organization.objects.filter(pk=o1.pk).update(updated_at=older)
Organization.objects.filter(pk=o2.pk).update(updated_at=newer)
assert self.sitemap.lastmod("twitch:org_list") == newer
def test_channel_list_none(self) -> None:
"""Test that lastmod for channel list sitemap item is None since Channel doesn't have updated_at."""
Channel.objects.create(twitch_id="ch1", name="n1", display_name="D1")
assert self.sitemap.lastmod("twitch:channel_list") is None
def test_badge_list_latest(self) -> None:
"""Test that lastmod for badge list sitemap item reflects latest updated_at among ChatBadgeSets."""
older: datetime = timezone.now() - timedelta(days=6)
newer: datetime = timezone.now() - timedelta(days=1)
b1: ChatBadgeSet = ChatBadgeSet.objects.create(set_id="s1")
b2: ChatBadgeSet = ChatBadgeSet.objects.create(set_id="s2")
ChatBadgeSet.objects.filter(pk=b1.pk).update(updated_at=older)
ChatBadgeSet.objects.filter(pk=b2.pk).update(updated_at=newer)
assert self.sitemap.lastmod("twitch:badge_list") == newer
def test_emote_gallery_uses_campaign_updated(self) -> None:
"""Test that lastmod for emote gallery sitemap item reflects latest updated_at among DropCampaigns associated with emote benefits.""" # noqa: E501
game: Game = Game.objects.create(twitch_id="g_emote")
campaign: DropCampaign = DropCampaign.objects.create(twitch_id="dc_emote", name="em", game=game)
benefit: DropBenefit = DropBenefit.objects.create(
twitch_id="b_emote",
distribution_type="EMOTE",
image_asset_url="http://example.com/e.png",
)
drop: TimeBasedDrop = TimeBasedDrop.objects.create(twitch_id="tbd_emote", name="drop1", campaign=campaign)
drop.benefits.add(benefit)
newer: datetime = timezone.now() - timedelta(hours=1)
DropCampaign.objects.filter(pk=campaign.pk).update(updated_at=newer)
assert self.sitemap.lastmod("twitch:emote_gallery") == newer