tests.py 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. from tokenize import Token
  2. from django.test import TestCase
  3. from .models import ProgrammedReport
  4. import json
  5. # Setear con un token valido antes de ejecutar los tests.
  6. TOKEN = "335049bcd9936452b436efb61b91eeabbede8a03"
  7. USER_ID = "1"
  8. # Tests simples de los endpoints del microservicio.
  9. # No deben ser usados unicamente para garantizar la funcionalidad del sistema.
  10. # Son dificiles de mantener,lentos de desarollar y no proveen mucha informacion mas haya de lo basico.
  11. class ProgrammedReportTest(TestCase):
  12. # Setup some Programmed Reports for testing.
  13. def setUp(self):
  14. ProgrammedReport(user_id=USER_ID, report_type="Report Type!", modules=[
  15. "module1!"], notified_emails=["email@email.com"]).save()
  16. ProgrammedReport(user_id=USER_ID, report_type="Report Type 2!", modules=[
  17. "module1!"], notified_emails=["email@email.com"]).save()
  18. ProgrammedReport(user_id=USER_ID, report_type="Report Type 3!", modules=[
  19. "module1!"], notified_emails=["email@email.com"]).save()
  20. ProgrammedReport(user_id="99999", report_type="Report Type 4!", modules=[
  21. "module1!", "module2!"], notified_emails=["email@email.com"]).save()
  22. pass
  23. # Test GET (list) request on a particular Programmed Report. URL: /api/preports
  24. def test_list_programmed_reports(self):
  25. # Retrieve all Programmed Reports and parse them.
  26. response = self.client.get(
  27. '/api/preports/', HTTP_AUTHORIZATION=TOKEN)
  28. self.assertEqual(response.status_code, 200)
  29. data = json.loads(response.content)
  30. # Check if all user_id=123 reports only where retrieved.
  31. self.assertEqual(len(data), 3)
  32. # Check integrity of all the Programmed Reports
  33. for item in data:
  34. self.assertEqual(
  35. check_programmed_report_data_integrity(item, USER_ID), True)
  36. return True
  37. # Test GET (retrieve) request on a particular Programmed Report. URL: /api/preports/{id}/
  38. def test_retrieve_programmed_report(self):
  39. # Retrieve all Programmed Reports and parse them.
  40. response = self.client.get(
  41. '/api/preports/', HTTP_AUTHORIZATION=TOKEN)
  42. self.assertEqual(response.status_code, 200)
  43. data = json.loads(response.content)
  44. self.assertGreater(len(data), 0)
  45. # Use the ID of the first one to retrieve only that report.
  46. response = self.client.get(
  47. '/api/preports/' + str(data[0]["id"]) + '/',
  48. CONTENT_TYPE='application/json', HTTP_AUTHORIZATION=TOKEN)
  49. # Check if all went okey, including data integrity.
  50. self.assertEqual(response.status_code, 200)
  51. data = json.loads(response.content)
  52. self.assertEqual(
  53. check_programmed_report_data_integrity(data, USER_ID), True)
  54. return True
  55. def test_create_programmed_report(self):
  56. response = self.client.post('/api/preports/', {
  57. "user_id": USER_ID,
  58. "report_type": "sometype",
  59. "modules": json.dumps(["module1"]),
  60. "notified_emails": json.dumps(["test@email.com"])
  61. }, HTTP_AUTHORIZATION=TOKEN)
  62. self.assertEqual(response.status_code, 201)
  63. pass
  64. def check_programmed_report_data_integrity(data, user_id=None):
  65. result = True
  66. if (user_id != None):
  67. result = data["user_id"] == user_id
  68. result = result and len(data["modules"]) > 0 and isinstance(
  69. data["modules"][0], str)
  70. result = result and len(data["notified_emails"]) > 0 and isinstance(
  71. data["notified_emails"][0], str)
  72. return result