67 lines
2.1 KiB
Python
67 lines
2.1 KiB
Python
from __future__ import annotations
|
|
|
|
from django.core.management import call_command
|
|
from django.test import TestCase
|
|
|
|
from core.models import (
|
|
ChatSession,
|
|
ContactAvailabilityEvent,
|
|
Person,
|
|
PersonIdentifier,
|
|
Message,
|
|
User,
|
|
)
|
|
from core.presence.inference import now_ms
|
|
|
|
|
|
class BackfillContactAvailabilityCommandTests(TestCase):
|
|
def setUp(self):
|
|
self.user = User.objects.create_user("backfill-user", "backfill@example.com", "x")
|
|
self.person = Person.objects.create(user=self.user, name="Backfill Person")
|
|
self.identifier = PersonIdentifier.objects.create(
|
|
user=self.user,
|
|
person=self.person,
|
|
service="signal",
|
|
identifier="+15551234567",
|
|
)
|
|
self.session = ChatSession.objects.create(user=self.user, identifier=self.identifier)
|
|
|
|
def test_backfill_creates_message_and_read_receipt_availability_events(self):
|
|
base_ts = now_ms()
|
|
Message.objects.create(
|
|
user=self.user,
|
|
session=self.session,
|
|
ts=base_ts,
|
|
text="hello",
|
|
source_service="signal",
|
|
source_chat_id="+15551234567",
|
|
custom_author="OTHER",
|
|
)
|
|
Message.objects.create(
|
|
user=self.user,
|
|
session=self.session,
|
|
ts=base_ts + 1000,
|
|
text="hey",
|
|
source_service="signal",
|
|
source_chat_id="+15551234567",
|
|
custom_author="USER",
|
|
read_ts=base_ts + 2000,
|
|
read_by_identifier="+15551234567",
|
|
)
|
|
|
|
call_command(
|
|
"backfill_contact_availability",
|
|
"--days",
|
|
"36500",
|
|
"--limit",
|
|
"100",
|
|
)
|
|
|
|
events = list(
|
|
ContactAvailabilityEvent.objects.filter(user=self.user).order_by("ts", "source_kind")
|
|
)
|
|
self.assertEqual(3, len(events))
|
|
self.assertTrue(any(row.source_kind == "message_in" for row in events))
|
|
self.assertTrue(any(row.source_kind == "message_out" for row in events))
|
|
self.assertTrue(any(row.source_kind == "read_receipt" for row in events))
|