from __future__ import annotations from django.test import TestCase from django.urls import reverse from core.models import ChatTaskSource, Person, PersonIdentifier, TaskEpic, TaskProject, User class TasksPagesManagementTests(TestCase): def setUp(self): self.user = User.objects.create_user( "tasks-pages-user", "tasks-pages@example.com", "x" ) self.client.force_login(self.user) self.person = Person.objects.create(user=self.user, name="Scope Person") self.pid_whatsapp = PersonIdentifier.objects.create( user=self.user, person=self.person, service="whatsapp", identifier="120363402761690215@g.us", ) self.pid_signal = PersonIdentifier.objects.create( user=self.user, person=self.person, service="signal", identifier="+15551230000", ) def test_tasks_hub_can_create_project_name_only(self): response = self.client.post( reverse("tasks_hub"), {"action": "project_create", "name": "Ops"}, follow=True, ) self.assertEqual(200, response.status_code) project = TaskProject.objects.get(user=self.user, name="Ops") self.assertIsNotNone(project) self.assertFalse(ChatTaskSource.objects.filter(user=self.user, project=project).exists()) def test_tasks_hub_can_map_identifier_to_selected_project(self): project = TaskProject.objects.create(user=self.user, name="Mapped") response = self.client.post( reverse("tasks_hub"), { "action": "project_map_identifier", "project_id": str(project.id), "person_identifier_id": str(self.pid_signal.id), "person": str(self.person.id), "service": "whatsapp", "identifier": "120363402761690215@g.us", }, follow=True, ) self.assertEqual(200, response.status_code) self.assertTrue( ChatTaskSource.objects.filter( user=self.user, project=project, service="signal", channel_identifier="+15551230000", enabled=True, ).exists() ) def test_project_page_can_create_and_delete_epic(self): project = TaskProject.objects.create(user=self.user, name="Roadmap") create_response = self.client.post( reverse("tasks_project", kwargs={"project_id": str(project.id)}), { "action": "epic_create", "name": "Phase 1", }, follow=True, ) self.assertEqual(200, create_response.status_code) epic = TaskEpic.objects.get(project=project, name="Phase 1") self.assertIsNotNone(epic) delete_response = self.client.post( reverse("tasks_project", kwargs={"project_id": str(project.id)}), { "action": "epic_delete", "epic_id": str(epic.id), }, follow=True, ) self.assertEqual(200, delete_response.status_code) self.assertFalse(TaskEpic.objects.filter(project=project, name="Phase 1").exists()) def test_group_page_create_and_map_project(self): response = self.client.post( reverse( "tasks_group", kwargs={ "service": "whatsapp", "identifier": "120363402761690215@g.us", }, ), { "action": "group_project_create", "project_name": "Group Project", "epic_name": "Sprint A", }, follow=True, ) self.assertEqual(200, response.status_code) project = TaskProject.objects.get(user=self.user, name="Group Project") epic = TaskEpic.objects.get(project=project, name="Sprint A") self.assertTrue( ChatTaskSource.objects.filter( user=self.user, service="whatsapp", channel_identifier="120363402761690215@g.us", project=project, epic=epic, enabled=True, ).exists() )