Skip to content

Commit af25526

Browse files
committed
PYTHON-2553 Test document validation error details
1 parent aeb0d41 commit af25526

File tree

1 file changed

+23
-1
lines changed

1 file changed

+23
-1
lines changed

test/test_read_write_concern_spec.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@
2525
from pymongo.errors import (BulkWriteError,
2626
ConfigurationError,
2727
WTimeoutError,
28-
WriteConcernError)
28+
WriteConcernError,
29+
WriteError)
2930
from pymongo.mongo_client import MongoClient
3031
from pymongo.operations import IndexModel, InsertOne
3132
from pymongo.read_concern import ReadConcern
@@ -210,6 +211,27 @@ def test_error_includes_errInfo(self):
210211
'nRemoved': 0, 'upserted': []}
211212
self.assertEqual(ctx.exception.details, expected_details)
212213

214+
@client_context.require_version_min(4, 9)
215+
def test_write_error_details_exposes_errinfo(self):
216+
listener = EventListener()
217+
client = rs_or_single_client(event_listeners=[listener])
218+
db = client.errinfotest
219+
self.addCleanup(client.drop_database, "errinfotest")
220+
validator = {"x": {"$type": "string"}}
221+
db.create_collection("test", validator=validator)
222+
with self.assertRaises(WriteError) as ctx:
223+
db.test.insert_one({'x': 1})
224+
self.assertEqual(ctx.exception.code, 121)
225+
self.assertIsNotNone(ctx.exception.details)
226+
self.assertIsNotNone(ctx.exception.details.get('errInfo'))
227+
for event in listener.results['succeeded']:
228+
if event.command_name == 'insert':
229+
self.assertEqual(
230+
event.reply['writeErrors'][0], ctx.exception.details)
231+
break
232+
else:
233+
self.fail("Couldn't find insert event.")
234+
213235

214236
def normalize_write_concern(concern):
215237
result = {}

0 commit comments

Comments
 (0)