68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
from __future__ import annotations
|
|
|
|
from django.test import TestCase
|
|
|
|
from core.models import ContactAvailabilitySettings, Person, PersonIdentifier, User
|
|
from core.presence.engine import (
|
|
AvailabilitySignal,
|
|
ensure_fading_state,
|
|
record_inferred_signal,
|
|
record_native_signal,
|
|
)
|
|
|
|
|
|
class PresenceEngineTests(TestCase):
|
|
def setUp(self):
|
|
self.user = User.objects.create_user(
|
|
"presence-user", "presence@example.com", "x"
|
|
)
|
|
self.person = Person.objects.create(user=self.user, name="Presence Person")
|
|
self.identifier = PersonIdentifier.objects.create(
|
|
user=self.user,
|
|
person=self.person,
|
|
service="signal",
|
|
identifier="+15550001111",
|
|
)
|
|
|
|
def test_record_native_signal_is_a_compatibility_noop(self):
|
|
signal = AvailabilitySignal(
|
|
user=self.user,
|
|
person=self.person,
|
|
person_identifier=self.identifier,
|
|
service="signal",
|
|
source_kind="read_receipt",
|
|
availability_state="available",
|
|
confidence=0.95,
|
|
ts=1234,
|
|
payload={"origin": "test"},
|
|
)
|
|
result = record_native_signal(signal)
|
|
self.assertIs(result, signal)
|
|
|
|
def test_record_inferred_signal_respects_settings(self):
|
|
ContactAvailabilitySettings.objects.update_or_create(
|
|
user=self.user,
|
|
defaults={"enabled": True, "inference_enabled": False},
|
|
)
|
|
signal = AvailabilitySignal(
|
|
user=self.user,
|
|
person=self.person,
|
|
person_identifier=self.identifier,
|
|
service="signal",
|
|
source_kind="typing_stop",
|
|
availability_state="fading",
|
|
ts=1234,
|
|
)
|
|
self.assertIsNone(record_inferred_signal(signal))
|
|
|
|
def test_ensure_fading_state_no_longer_persists_shadow_rows(self):
|
|
self.assertIsNone(
|
|
ensure_fading_state(
|
|
user=self.user,
|
|
person=self.person,
|
|
person_identifier=self.identifier,
|
|
service="signal",
|
|
at_ts=1234,
|
|
)
|
|
)
|