from tokenize import Token from django.test import TestCase from .models import ProgrammedReport import json # Setear con un token valido antes de ejecutar los tests. TOKEN = "335049bcd9936452b436efb61b91eeabbede8a03" USER_ID = "1" # Tests simples de los endpoints del microservicio. # No deben ser usados unicamente para garantizar la funcionalidad del sistema. # Son dificiles de mantener,lentos de desarollar y no proveen mucha informacion mas haya de lo basico. class ProgrammedReportTest(TestCase): # Setup some Programmed Reports for testing. def setUp(self): ProgrammedReport(user_id=USER_ID, report_type="Report Type!", modules=[ "module1!"], notified_emails=["email@email.com"]).save() ProgrammedReport(user_id=USER_ID, report_type="Report Type 2!", modules=[ "module1!"], notified_emails=["email@email.com"]).save() ProgrammedReport(user_id=USER_ID, report_type="Report Type 3!", modules=[ "module1!"], notified_emails=["email@email.com"]).save() ProgrammedReport(user_id="99999", report_type="Report Type 4!", modules=[ "module1!", "module2!"], notified_emails=["email@email.com"]).save() pass # Test GET (list) request on a particular Programmed Report. URL: /api/preports def test_list_programmed_reports(self): # Retrieve all Programmed Reports and parse them. response = self.client.get( '/api/preports/', HTTP_AUTHORIZATION=TOKEN) self.assertEqual(response.status_code, 200) data = json.loads(response.content) # Check if all user_id=123 reports only where retrieved. self.assertEqual(len(data), 3) # Check integrity of all the Programmed Reports for item in data: self.assertEqual( check_programmed_report_data_integrity(item, USER_ID), True) return True # Test GET (retrieve) request on a particular Programmed Report. URL: /api/preports/{id}/ def test_retrieve_programmed_report(self): # Retrieve all Programmed Reports and parse them. response = self.client.get( '/api/preports/', HTTP_AUTHORIZATION=TOKEN) self.assertEqual(response.status_code, 200) data = json.loads(response.content) self.assertGreater(len(data), 0) # Use the ID of the first one to retrieve only that report. response = self.client.get( '/api/preports/' + str(data[0]["id"]) + '/', CONTENT_TYPE='application/json', HTTP_AUTHORIZATION=TOKEN) # Check if all went okey, including data integrity. self.assertEqual(response.status_code, 200) data = json.loads(response.content) self.assertEqual( check_programmed_report_data_integrity(data, USER_ID), True) return True def test_create_programmed_report(self): response = self.client.post('/api/preports/', { "user_id": USER_ID, "report_type": "sometype", "modules": json.dumps(["module1"]), "notified_emails": json.dumps(["test@email.com"]) }, HTTP_AUTHORIZATION=TOKEN) self.assertEqual(response.status_code, 201) pass def check_programmed_report_data_integrity(data, user_id=None): result = True if (user_id != None): result = data["user_id"] == user_id result = result and len(data["modules"]) > 0 and isinstance( data["modules"][0], str) result = result and len(data["notified_emails"]) > 0 and isinstance( data["notified_emails"][0], str) return result