|
3 | 3 | """Diode NetBox Plugin - Tests.""" |
4 | 4 |
|
5 | 5 | import logging |
| 6 | +from collections import defaultdict |
6 | 7 | from types import SimpleNamespace |
7 | 8 | from unittest import mock |
8 | 9 | from uuid import uuid4 |
@@ -377,6 +378,39 @@ def test_vlangroup_error(self): |
377 | 378 | } |
378 | 379 | _ = self.send_request(payload) |
379 | 380 |
|
| 381 | + def test_generate_diff_dedupe_different_object_types(self): |
| 382 | + """Test generate diff dedupe different object types with same values.""" |
| 383 | + payload = { |
| 384 | + "timestamp": 1, |
| 385 | + "object_type": "dcim.device", |
| 386 | + "entity": { |
| 387 | + "device": { |
| 388 | + "name": "Cat8000V", |
| 389 | + "role": {"name": "undefined"}, |
| 390 | + "site": {"name": "undefined"}, |
| 391 | + "serial": "9OBXJHNNU5V", |
| 392 | + "status": "active", |
| 393 | + "platform": {"name": "ios", "manufacturer": {"name": "undefined"}}, |
| 394 | + "device_type": {"model": "C8000V", "manufacturer": {"name": "undefined"}} |
| 395 | + }, |
| 396 | + }, |
| 397 | + } |
| 398 | + response = self.send_request(payload) |
| 399 | + self.assertEqual(response.status_code, status.HTTP_200_OK) |
| 400 | + cs = response.json().get("change_set", {}) |
| 401 | + self.assertIsNotNone(cs.get("id")) |
| 402 | + changes = cs.get("changes", []) |
| 403 | + self.assertEqual(len(changes), 6) |
| 404 | + by_object_type = defaultdict(int) |
| 405 | + for change in changes: |
| 406 | + by_object_type[change.get("object_type")] += 1 |
| 407 | + |
| 408 | + self.assertEqual(by_object_type["dcim.device"], 1) |
| 409 | + self.assertEqual(by_object_type["dcim.manufacturer"], 1) |
| 410 | + self.assertEqual(by_object_type["dcim.platform"], 1) |
| 411 | + self.assertEqual(by_object_type["dcim.devicetype"], 1) |
| 412 | + self.assertEqual(by_object_type["dcim.site"], 1) |
| 413 | + self.assertEqual(by_object_type["dcim.devicerole"], 1) |
380 | 414 |
|
381 | 415 | def send_request(self, payload, status_code=status.HTTP_200_OK): |
382 | 416 | """Post the payload to the url and return the response.""" |
|
0 commit comments