diff --git a/pynetbox/core/response.py b/pynetbox/core/response.py index 0caa05a3..6d777345 100644 --- a/pynetbox/core/response.py +++ b/pynetbox/core/response.py @@ -313,7 +313,12 @@ def __getitem__(self, k): return dict(self)[k] def __str__(self): - return getattr(self, "name", None) or getattr(self, "label", None) or "" + return ( + getattr(self, "name", None) + or getattr(self, "label", None) + or getattr(self, "display", None) + or "" + ) def __repr__(self): return str(self) diff --git a/tests/fixtures/users/unknown_model.json b/tests/fixtures/users/unknown_model.json new file mode 100644 index 00000000..cfbd5f9c --- /dev/null +++ b/tests/fixtures/users/unknown_model.json @@ -0,0 +1,4 @@ +{ + "id": 1, + "display": "Unknown object" +} diff --git a/tests/test_users.py b/tests/test_users.py index 6dc79ddd..1b5ae140 100644 --- a/tests/test_users.py +++ b/tests/test_users.py @@ -86,6 +86,7 @@ class UsersTestCase(Generic.Tests): ) def test_repr(self, _): test = nb.users.get(1) + self.assertEqual(type(test), pynetbox.models.users.Users) self.assertEqual(str(test), "user1") @@ -105,3 +106,19 @@ def test_username(self, _): self.assertEqual(len(permission.users), 1) user = permission.users[0] self.assertEqual(str(user), "user1") + + +class UnknownModelTestCase(unittest.TestCase): + """ This test validates that an unknown model is returned as Record object + and that the __str__() method correctly uses the 'display' field of the + object (introduced as a standard field in NetBox 2.11.0). + """ + + @patch( + "requests.sessions.Session.get", + return_value=Response(fixture="users/unknown_model.json"), + ) + def test_unknown_model(self, _): + unknown_obj = nb.unknown_model.get(1) + self.assertEqual(type(unknown_obj), pynetbox.core.response.Record) + self.assertEqual(str(unknown_obj), "Unknown object")