Fix some task quirks

This commit is contained in:
2026-03-08 23:16:15 +00:00
parent acedc01e83
commit a7421b9350
7 changed files with 312 additions and 34 deletions

View File

@@ -298,6 +298,53 @@ class Phase1CommandEngineTests(TestCase):
self.assertEqual("skipped", results[0].status)
self.assertEqual("reply_required", results[0].error)
def test_eligible_profile_matches_signal_group_alias_variants(self):
self.profile.channel_bindings.all().delete()
canonical = PersonIdentifier.objects.create(
user=self.user,
person=self.person,
service="signal",
identifier="group.canonical-signal-group",
)
self.session.identifier = canonical
self.session.save(update_fields=["identifier"])
CommandChannelBinding.objects.create(
profile=self.profile,
direction="ingress",
service="signal",
channel_identifier="group.canonical-signal-group",
enabled=True,
)
msg = Message.objects.create(
user=self.user,
session=self.session,
sender_uuid="",
text="#bp#",
ts=5500,
source_service="signal",
source_chat_id="signal-internal-group-id",
message_meta={},
)
PersonIdentifier.objects.create(
user=self.user,
person=self.person,
service="signal",
identifier="signal-internal-group-id",
)
results = async_to_sync(process_inbound_message)(
CommandContext(
service="signal",
channel_identifier="signal-internal-group-id",
message_id=str(msg.id),
user_id=self.user.id,
message_text="#bp#",
payload={},
)
)
self.assertEqual(1, len(results))
self.assertEqual("skipped", results[0].status)
self.assertEqual("reply_required", results[0].error)
def test_compose_command_options_show_bp_subcommands(self):
self.profile.channel_bindings.all().delete()
CommandChannelBinding.objects.create(

View File

@@ -223,6 +223,44 @@ class TasksPagesManagementTests(TestCase):
).exists()
)
def test_group_page_does_not_seed_source_for_malformed_whatsapp_asset_path(self):
response = self.client.get(
reverse(
"tasks_group",
kwargs={
"service": "whatsapp",
"identifier": "447777695114/static/js/template_profiler.js",
},
)
)
self.assertEqual(200, response.status_code)
self.assertFalse(
ChatTaskSource.objects.filter(
user=self.user,
service="whatsapp",
channel_identifier__icontains="template_profiler.js",
).exists()
)
def test_group_page_does_not_seed_source_for_malformed_signal_asset_path(self):
response = self.client.get(
reverse(
"tasks_group",
kwargs={
"service": "signal",
"identifier": "group.c0VHQTlGMEhRL2V5/static/js/template_profiler.js",
},
)
)
self.assertEqual(200, response.status_code)
self.assertFalse(
ChatTaskSource.objects.filter(
user=self.user,
service="signal",
channel_identifier__icontains="template_profiler.js",
).exists()
)
def test_tasks_hub_shows_human_creator_label(self):
project = TaskProject.objects.create(user=self.user, name="Creator Test")
session = ChatSession.objects.create(user=self.user, identifier=self.pid_signal)

View File

@@ -236,6 +236,44 @@ class TaskSettingsViewActionsTests(TestCase):
ChatTaskSource.objects.filter(id=self.source.id, user=self.user).exists()
)
def test_source_create_updates_existing_signal_mapping_instead_of_duplicating(self):
signal_project = TaskProject.objects.create(user=self.user, name="Signal A")
signal_source = ChatTaskSource.objects.create(
user=self.user,
service="signal",
channel_identifier="group.c0VHQTlGMEhRL2V5TGdtdkt4MjNoaGE5VnA3bURSaHBxMjMvcm9WU1piST0=",
project=signal_project,
settings={"match_mode": "strict"},
enabled=True,
)
target_project = TaskProject.objects.create(user=self.user, name="Signal B")
response = self.client.post(
reverse("tasks_settings"),
{
"action": "source_create",
"service": "signal",
"channel_identifier": "group.c0VHQTlGMEhRL2V5TGdtdkt4MjNoaGE5VnA3bURSaHBxMjMvcm9WU1piST0=",
"project_id": str(target_project.id),
"source_match_mode": "strict",
"source_require_prefix": "1",
"source_derive_enabled": "1",
"source_completion_enabled": "1",
"source_ai_title_enabled": "1",
},
follow=True,
)
self.assertEqual(200, response.status_code)
self.assertEqual(
1,
ChatTaskSource.objects.filter(
user=self.user,
service="signal",
channel_identifier="group.c0VHQTlGMEhRL2V5TGdtdkt4MjNoaGE5VnA3bURSaHBxMjMvcm9WU1piST0=",
).count(),
)
signal_source.refresh_from_db()
self.assertEqual(target_project.id, signal_source.project_id)
@override_settings(TASK_DERIVATION_USE_AI=False)
class TaskAutoBootstrapTests(TestCase):