test_bacnet_api.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import unittest
  2. from common import assert_bacnet_device, assert_response_contract, device_payload, post_json
  3. class BacnetApiIntegrationTest(unittest.TestCase):
  4. def test_validation_error_returns_http_200_contract(self):
  5. status, data = post_json(
  6. "/api/dc-debugtool/bacnet/read_points",
  7. {**device_payload(), "points": []},
  8. )
  9. assert_response_contract(self, status, data)
  10. self.assertEqual(1, data["code"], data)
  11. self.assertIn("points", data["msg"])
  12. self.assertEqual([], data["data"]["points"])
  13. def test_search_points_returns_bacnet_points(self):
  14. payload = device_payload()
  15. status, data = post_json("/api/dc-debugtool/bacnet/search_points", payload)
  16. assert_response_contract(self, status, data)
  17. self.assertEqual(0, data["code"], data)
  18. assert_bacnet_device(self, payload, data)
  19. points = data["data"]["points"]
  20. self.assertIsInstance(points, list)
  21. self.assertTrue(points, data)
  22. for point in points:
  23. self.assertIn("name", point)
  24. self.assertIn("description", point)
  25. self.assertIn("object_type", point)
  26. self.assertIn("object_id", point)
  27. self.assertIn("present_value", point)
  28. def test_read_points_uses_search_result(self):
  29. payload = device_payload()
  30. status, search_data = post_json("/api/dc-debugtool/bacnet/search_points", payload)
  31. assert_response_contract(self, status, search_data)
  32. self.assertEqual(0, search_data["code"], search_data)
  33. points = search_data["data"]["points"]
  34. self.assertTrue(points, search_data)
  35. source_point = next((point for point in points if point.get("present_value") is not None), points[0])
  36. read_payload = {
  37. **payload,
  38. "points": [
  39. {
  40. "object_type": source_point["object_type"],
  41. "object_id": source_point["object_id"],
  42. }
  43. ],
  44. }
  45. status, data = post_json("/api/dc-debugtool/bacnet/read_points", read_payload)
  46. assert_response_contract(self, status, data)
  47. self.assertEqual(0, data["code"], data)
  48. assert_bacnet_device(self, payload, data)
  49. self.assertEqual(1, len(data["data"]["points"]))
  50. point = data["data"]["points"][0]
  51. self.assertEqual(source_point["object_type"], point["object_type"])
  52. self.assertEqual(source_point["object_id"], point["object_id"])
  53. self.assertIn("present_value", point)
  54. if __name__ == "__main__":
  55. unittest.main()