You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
3.0 KiB
69 lines
3.0 KiB
from django.test import TestCase
|
|
from django.contrib.auth import get_user_model
|
|
from rest_framework.test import APIClient
|
|
from rest_framework import status
|
|
|
|
from apps.diplomacy.models import RepresentativeReport, ReportStatus
|
|
|
|
User = get_user_model()
|
|
|
|
|
|
class Phase9DiplomacyAPITests(TestCase):
|
|
"""
|
|
Automated test suite for Phase 9: International Diplomacy & Field Reports (Module 6.5)
|
|
- Periodic Report Submission by Field Representative
|
|
- Report Listing & Region Hub Filtering
|
|
- Report Detail Retrieval
|
|
- Headquarters Review, Approval, and Feedback Directives
|
|
"""
|
|
|
|
def setUp(self):
|
|
self.client = APIClient()
|
|
|
|
self.representative = User.objects.create_user(
|
|
email="rep.africa@astan.org",
|
|
password="Password123!",
|
|
fullname="Hujjat al-Islam Seyed Reza",
|
|
user_type=User.UserType.REGIONAL_ADMIN,
|
|
)
|
|
self.hq_admin = User.objects.create_user(
|
|
email="headquarters@astan.ir",
|
|
password="AdminPassword123!",
|
|
fullname="Director of International Relations",
|
|
user_type=User.UserType.SUPER_ADMIN,
|
|
is_staff=True,
|
|
)
|
|
|
|
def test_submit_field_activity_report(self):
|
|
self.client.force_authenticate(user=self.representative)
|
|
|
|
payload = {
|
|
"title": "East Africa Q1 2026 Cultural Mission Report",
|
|
"region_hub": "East Africa Regional Hub (Kenya & Tanzania)",
|
|
"period": "Q1 2026",
|
|
"activities_summary": "Conducted bilateral meetings with 14 community leaders and inspected educational library centers in Nairobi and Dar es Salaam.",
|
|
"centers_visited_count": 14,
|
|
"key_achievements": "Signed preliminary MOU for translation of 5 Razavi books into Swahili.",
|
|
"challenges_and_needs": "Logistical support required for audio recording studio equipment.",
|
|
}
|
|
response = self.client.post("/api/v1/diplomacy/reports/", payload, format="json")
|
|
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
|
self.assertEqual(response.data["status"], ReportStatus.SUBMITTED)
|
|
self.assertEqual(response.data["centers_visited_count"], 14)
|
|
report_id = response.data["id"]
|
|
|
|
# List reports
|
|
list_res = self.client.get("/api/v1/diplomacy/reports/")
|
|
self.assertEqual(list_res.status_code, status.HTTP_200_OK)
|
|
self.assertEqual(len(list_res.data), 1)
|
|
|
|
# Headquarters reviews and approves
|
|
self.client.force_authenticate(user=self.hq_admin)
|
|
review_payload = {
|
|
"status": ReportStatus.APPROVED,
|
|
"feedback_notes": "Commendable mission outcomes. Audio studio budget has been allocated for Q2.",
|
|
}
|
|
review_res = self.client.patch(f"/api/v1/diplomacy/reports/{report_id}/review/", review_payload, format="json")
|
|
self.assertEqual(review_res.status_code, status.HTTP_200_OK)
|
|
self.assertEqual(review_res.data["status"], ReportStatus.APPROVED)
|
|
self.assertEqual(review_res.data["feedback_notes"], review_payload["feedback_notes"])
|