from __future__ import annotations from django.test import TestCase from django.urls import reverse from core.models import ChatTaskSource, 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) def test_tasks_hub_requires_group_scope_for_project_create(self): create_response = self.client.post( reverse("tasks_hub"), { "action": "project_create", "name": "Ops", }, follow=True, ) self.assertEqual(200, create_response.status_code) self.assertFalse(TaskProject.objects.filter(user=self.user, name="Ops").exists()) def test_tasks_hub_can_create_scoped_project_and_delete(self): create_response = self.client.post( reverse("tasks_hub"), { "action": "project_create", "name": "Ops", "service": "whatsapp", "channel_identifier": "120363402761690215@g.us", }, follow=True, ) self.assertEqual(200, create_response.status_code) project = TaskProject.objects.get(user=self.user, name="Ops") self.assertIsNotNone(project) self.assertTrue( ChatTaskSource.objects.filter( user=self.user, service="whatsapp", channel_identifier="120363402761690215@g.us", project=project, ).exists() ) delete_response = self.client.post( reverse("tasks_hub"), { "action": "project_delete", "project_id": str(project.id), }, follow=True, ) self.assertEqual(200, delete_response.status_code) self.assertFalse(TaskProject.objects.filter(user=self.user, name="Ops").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() )