Implement plans
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from unittest.mock import AsyncMock, patch
|
||||
|
||||
from django.test import TestCase
|
||||
from django.urls import reverse
|
||||
|
||||
@@ -73,6 +75,16 @@ class TasksPagesManagementTests(TestCase):
|
||||
).exists()
|
||||
)
|
||||
|
||||
def test_tasks_hub_settings_link_preserves_scope_context(self):
|
||||
response = self.client.get(
|
||||
f"{reverse('tasks_hub')}?person={self.person.id}&service=signal&identifier=147e75bd-91b7-4014-b9e5-12a44b978f7b"
|
||||
)
|
||||
self.assertEqual(200, response.status_code)
|
||||
self.assertContains(
|
||||
response,
|
||||
f"{reverse('tasks_settings')}?person={self.person.id}&service=signal&identifier=147e75bd-91b7-4014-b9e5-12a44b978f7b",
|
||||
)
|
||||
|
||||
def test_project_page_can_create_and_delete_epic(self):
|
||||
project = TaskProject.objects.create(user=self.user, name="Roadmap")
|
||||
create_response = self.client.post(
|
||||
@@ -98,6 +110,81 @@ class TasksPagesManagementTests(TestCase):
|
||||
self.assertEqual(200, delete_response.status_code)
|
||||
self.assertFalse(TaskEpic.objects.filter(project=project, name="Phase 1").exists())
|
||||
|
||||
def test_project_page_can_assign_and_clear_task_epic(self):
|
||||
project = TaskProject.objects.create(user=self.user, name="Roadmap")
|
||||
epic = TaskEpic.objects.create(project=project, name="Sprint A")
|
||||
session = ChatSession.objects.create(user=self.user, identifier=self.pid_signal)
|
||||
origin = Message.objects.create(
|
||||
user=self.user,
|
||||
session=session,
|
||||
ts=1_700_000_000_100,
|
||||
text="task: assign epic",
|
||||
sender_uuid="+15551230000",
|
||||
custom_author="OTHER",
|
||||
source_service="signal",
|
||||
source_chat_id="+15551230000",
|
||||
)
|
||||
task = DerivedTask.objects.create(
|
||||
user=self.user,
|
||||
project=project,
|
||||
title="Assign me",
|
||||
source_service="signal",
|
||||
source_channel="+15551230000",
|
||||
origin_message=origin,
|
||||
reference_code="9",
|
||||
status_snapshot="open",
|
||||
)
|
||||
assign_response = self.client.post(
|
||||
reverse("tasks_project", kwargs={"project_id": str(project.id)}),
|
||||
{
|
||||
"action": "task_set_epic",
|
||||
"task_id": str(task.id),
|
||||
"epic_id": str(epic.id),
|
||||
},
|
||||
follow=True,
|
||||
)
|
||||
self.assertEqual(200, assign_response.status_code)
|
||||
task.refresh_from_db()
|
||||
self.assertEqual(epic.id, task.epic_id)
|
||||
|
||||
clear_response = self.client.post(
|
||||
reverse("tasks_project", kwargs={"project_id": str(project.id)}),
|
||||
{
|
||||
"action": "task_set_epic",
|
||||
"task_id": str(task.id),
|
||||
"epic_id": "",
|
||||
},
|
||||
follow=True,
|
||||
)
|
||||
self.assertEqual(200, clear_response.status_code)
|
||||
task.refresh_from_db()
|
||||
self.assertIsNone(task.epic_id)
|
||||
|
||||
@patch("core.views.tasks.send_message_raw", new_callable=AsyncMock)
|
||||
def test_project_epic_create_announces_to_project_chats(self, mocked_send):
|
||||
project = TaskProject.objects.create(user=self.user, name="Roadmap")
|
||||
ChatTaskSource.objects.create(
|
||||
user=self.user,
|
||||
service="whatsapp",
|
||||
channel_identifier="120363402761690215@g.us",
|
||||
project=project,
|
||||
enabled=True,
|
||||
)
|
||||
response = self.client.post(
|
||||
reverse("tasks_project", kwargs={"project_id": str(project.id)}),
|
||||
{
|
||||
"action": "epic_create",
|
||||
"name": "Phase 2",
|
||||
},
|
||||
follow=True,
|
||||
)
|
||||
self.assertEqual(200, response.status_code)
|
||||
self.assertTrue(TaskEpic.objects.filter(project=project, name="Phase 2").exists())
|
||||
self.assertTrue(mocked_send.await_count >= 1)
|
||||
payloads = [str(call.kwargs.get("text") or "") for call in mocked_send.await_args_list]
|
||||
self.assertTrue(any("whatsapp usage" in row.lower() for row in payloads))
|
||||
self.assertTrue(any("add task to epic" in row.lower() for row in payloads))
|
||||
|
||||
def test_group_page_create_and_map_project(self):
|
||||
response = self.client.post(
|
||||
reverse(
|
||||
@@ -156,6 +243,36 @@ class TasksPagesManagementTests(TestCase):
|
||||
self.assertEqual(200, response.status_code)
|
||||
self.assertContains(response, "Scope Person")
|
||||
|
||||
def test_project_page_creator_column_links_to_compose(self):
|
||||
project = TaskProject.objects.create(user=self.user, name="Creator Link Test")
|
||||
session = ChatSession.objects.create(user=self.user, identifier=self.pid_signal)
|
||||
origin = Message.objects.create(
|
||||
user=self.user,
|
||||
session=session,
|
||||
ts=1_700_000_000_111,
|
||||
text="task: creator link",
|
||||
sender_uuid="+15551230000",
|
||||
custom_author="OTHER",
|
||||
source_service="signal",
|
||||
source_chat_id="+15551230000",
|
||||
)
|
||||
DerivedTask.objects.create(
|
||||
user=self.user,
|
||||
project=project,
|
||||
title="Creator link task",
|
||||
source_service="signal",
|
||||
source_channel="+15551230000",
|
||||
origin_message=origin,
|
||||
reference_code="2",
|
||||
status_snapshot="open",
|
||||
)
|
||||
response = self.client.get(reverse("tasks_project", kwargs={"project_id": str(project.id)}))
|
||||
self.assertEqual(200, response.status_code)
|
||||
self.assertContains(
|
||||
response,
|
||||
f'{reverse("compose_page")}?service=signal&identifier=%2B15551230000&person={self.person.id}',
|
||||
)
|
||||
|
||||
def test_task_detail_renders_payload_summary_and_json(self):
|
||||
project = TaskProject.objects.create(user=self.user, name="Payload Test")
|
||||
session = ChatSession.objects.create(user=self.user, identifier=self.pid_signal)
|
||||
|
||||
Reference in New Issue
Block a user