Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 77 additions & 0 deletions src/django_project/tests/unit/web/test_tasks.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
import os
from pathlib import Path
from unittest.mock import patch

import django
from django.test import TestCase

BASE_DIR = Path(__file__).parents[4]
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "core.settings")
os.environ.setdefault("ENV_PATH", f"{BASE_DIR}/envs/.env.test")

django.setup()
from model_bakery import baker
from web.models import Event
from web.tasks import ingest_future_eventbrite_events


class TestIngestFutureEventbriteEvents(TestCase):
def setUp(self):
self.platform = baker.make("web.SocialPlatform", name="Eventbrite")
self.group = baker.make("web.TechGroup", name="Test Eventbrite Group", platform=self.platform)
self.link = baker.make(
"web.Link",
name=f"{self.group.name} {self.group.platform.name} page",
url="https://www.eventbrite.com/o/test-eventbrite-group-12345",
)
self.group.links.add(self.link)

@patch("web.tasks.get_event_details")
@patch("web.tasks.get_events_for_organization")
def test_ingests_event_without_primary_venue(self, mock_get_events_for_organization, mock_get_event_details):
mock_get_events_for_organization.return_value = [
{
"id": "evt_123",
"name": {"text": "Venue-less Event"},
"description": {"text": "Online only."},
"url": "https://example.com/events/evt_123",
"start": {"utc": "2026-07-10T18:00:00Z"},
"end": {"utc": "2026-07-10T19:00:00Z"},
}
]
mock_get_event_details.return_value = {"tags": [{"display_name": "Python"}]}

result = ingest_future_eventbrite_events(self.group.pk)

self.assertEqual(result, f"added 1 new events for {self.group.name}")
event = Event.objects.get(social_platform_id="evt_123")
self.assertEqual(event.location_name, "")
self.assertEqual(event.location_address, "")
self.assertEqual(event.map_link, "")
self.assertEqual(list(event.tags.values_list("value", flat=True)), ["Python"])

@patch("web.tasks.get_event_details")
@patch("web.tasks.get_events_for_organization")
def test_ingests_event_with_null_primary_venue_address(self, mock_get_events_for_organization, mock_get_event_details):
mock_get_events_for_organization.return_value = [
{
"id": "evt_456",
"name": {"text": "Null Address Event"},
"description": {"text": "Venue present, address missing."},
"url": "https://example.com/events/evt_456",
"start": {"utc": "2026-07-11T18:00:00Z"},
"end": {"utc": "2026-07-11T19:00:00Z"},
}
]
mock_get_event_details.return_value = {
"primary_venue": {"name": "Online", "address": None},
"tags": [],
}

result = ingest_future_eventbrite_events(self.group.pk)

self.assertEqual(result, f"added 1 new events for {self.group.name}")
event = Event.objects.get(social_platform_id="evt_456")
self.assertEqual(event.location_name, "Online")
self.assertEqual(event.location_address, "")
self.assertEqual(event.map_link, "")
18 changes: 7 additions & 11 deletions src/django_project/web/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,8 +131,10 @@ def ingest_future_eventbrite_events(group_pk) -> str:
for item in event_list:
event_details: dict = get_event_details(item["id"])
if event_details:
location_data: dict = event_details["primary_venue"]
tag_data: list[dict[str, Any]] = event_details["tags"]
location_data: dict[str, Any] = event_details.get("primary_venue") or {}
tag_data: list[dict[str, Any]] = event_details.get("tags") or []
address_data: dict[str, Any] = location_data.get("address") or {}
location_address: str = address_data.get("localized_address_display", "")

event_data: dict[str, Any] = {
"group": group,
Expand All @@ -142,15 +144,9 @@ def ingest_future_eventbrite_events(group_pk) -> str:
"social_platform_id": item.get("id", ""),
"start_datetime": item["start"].get("utc", "") if item.get("start") else "",
"end_datetime": item["end"].get("utc", "") if item.get("end") else "",
"location_name": location_data.get("name", "") if location_data else "",
"location_address": (
location_data.get("address", {}).get("localized_address_display", "") if location_data else ""
),
"map_link": (
create_google_map_link(location_data.get("address", {}).get("localized_address_display", ""))
if location_data
else ""
),
"location_name": location_data.get("name", ""),
"location_address": location_address,
"map_link": create_google_map_link(location_address) if location_address else "",
}

event, is_new = Event.objects.update_or_create(
Expand Down
Loading