def test_repr(self): self.assertEqual('Request()', repr(Request())) self.assertEqual('Request({})', repr(Request({}))) self.assertEqual('Request({})', repr(Request([{}]))) self.assertEqual('Request(flags=4)', repr(Request(flags=4))) self.assertEqual('OpQuery({})', repr(OpQuery())) self.assertEqual('OpQuery({})', repr(OpQuery({}))) self.assertEqual('OpQuery({})', repr(OpQuery([{}]))) self.assertEqual('OpQuery({}, flags=SlaveOkay)', repr(OpQuery(flags=4))) self.assertEqual('OpQuery({}, flags=SlaveOkay)', repr(OpQuery({}, flags=4))) self.assertEqual('OpQuery({}, flags=TailableCursor|AwaitData)', repr(OpQuery({}, flags=34))) self.assertEqual('Command({})', repr(Command())) self.assertEqual('Command({"foo": 1})', repr(Command('foo'))) son = SON([('b', 1), ('a', 1), ('c', 1)]) self.assertEqual('Command({"b": 1, "a": 1, "c": 1})', repr(Command(son))) self.assertEqual('Command({}, flags=SlaveOkay)', repr(Command(flags=4))) self.assertEqual('OpInsert({}, {})', repr(OpInsert([{}, {}]))) self.assertEqual('OpInsert({}, {})', repr(OpInsert({}, {})))
def test_insert_many(self): collection = self.collection.with_options( write_concern=WriteConcern(0)) flags = INSERT_FLAGS['ContinueOnError'] docs = [{'_id': 1}, {'_id': 2}] with going(collection.insert_many, docs, ordered=False): self.server.receives(OpInsert(docs, flags=flags))
def test_op_insert_manipulate_false(self): # Test three aspects of legacy insert with manipulate=False: # 1. The return value is None, [None], or [None, None] as appropriate. # 2. _id is not set on the passed-in document object. # 3. _id is not sent to server. server = MockupDB(auto_ismaster=True) server.run() self.addCleanup(server.stop) client = MongoClient(server.uri) self.addCleanup(client.close) doc = {} with going(client.db.coll.insert, doc, manipulate=False) as future: server.receives(OpInsert({'_id': absent})) server.receives('getlasterror').replies_to_gle() self.assertFalse('_id' in doc) self.assertIsNone(future()) docs = [{}] # One doc in a list. with going(client.db.coll.insert, docs, manipulate=False) as future: server.receives(OpInsert({'_id': absent})) server.receives('getlasterror').replies_to_gle() self.assertFalse('_id' in docs[0]) self.assertEqual(future(), [None]) docs = [{}, {}] # Two docs. with going(client.db.coll.insert, docs, manipulate=False) as future: server.receives(OpInsert({'_id': absent}, {'_id': absent})) server.receives('getlasterror').replies_to_gle() self.assertFalse('_id' in docs[0]) self.assertFalse('_id' in docs[1]) self.assertEqual(future(), [None, None])
def test_insert_one(self): with going(self.collection.insert_one, {'_id': 1}): self.server.receives(OpInsert({'_id': 1}, flags=0))
def test_op_insert_manipulate_false(self): # Test three aspects of legacy insert with manipulate=False: # 1. The return value is None, [None], or [None, None] as appropriate. # 2. _id is not set on the passed-in document object. # 3. _id is not sent to server. server = MockupDB(auto_ismaster=True) server.run() self.addCleanup(server.stop) client = MongoClient(server.uri) self.addCleanup(client.close) coll = client.db.get_collection('coll', write_concern=WriteConcern(w=0)) doc = {} with going(coll.insert, doc, manipulate=False) as future: if version_tuple >= (3, 7): server.receives( OpMsg(SON([("insert", coll.name), ("ordered", True), ("writeConcern", { "w": 0 }), ("documents", [{}])]), flags=OP_MSG_FLAGS['moreToCome'])) else: server.receives(OpInsert({'_id': absent})) self.assertFalse('_id' in doc) self.assertIsNone(future()) docs = [{}] # One doc in a list. with going(coll.insert, docs, manipulate=False) as future: if version_tuple >= (3, 7): # PyMongo 3.7 ordered bulk w:0 writes use implicit w:1. request = server.receives() request.assert_matches( OpMsg(SON([("insert", coll.name), ("ordered", True), ("documents", [{}])]), flags=0)) request.reply({"n": 1}) else: server.receives(OpInsert({'_id': absent})) self.assertFalse('_id' in docs[0]) self.assertEqual(future(), [None]) docs = [{}, {}] # Two docs. with going(coll.insert, docs, manipulate=False) as future: if version_tuple >= (3, 7): # PyMongo 3.7 ordered bulk w:0 writes use implicit w:1. request = server.receives() request.assert_matches( OpMsg(SON([("insert", coll.name), ("ordered", True), ("documents", [{}, {}])]), flags=0)) request.reply({"n": 2}) else: server.receives(OpInsert({'_id': absent}, {'_id': absent})) self.assertFalse('_id' in docs[0]) self.assertFalse('_id' in docs[1]) self.assertEqual(future(), [None, None])