def testSchemaValidation1(self): """Test case - create collection and insert data with schema validation (ext. schema assignment) """ # Example of a Mongo flavor of JsonSchema vexpr = {"$jsonSchema": self.__mongoSchema} query = [("collMod", self.__collectionName), ("validator", vexpr), ("validationLevel", "moderate")] query = OrderedDict(query) try: with Connection(cfgOb=self.__cfgOb, resourceName=self.__resourceName) as client: mg = MongoDbUtil(client) if mg.databaseExists(self.__dbName): ok = mg.dropDatabase(self.__dbName) self.assertTrue(ok) # ok = mg.createDatabase(self.__dbName) self.assertTrue(ok) # ok = mg.createCollection(self.__dbName, self.__collectionName) self.assertTrue(ok) ok = mg.databaseExists(self.__dbName) self.assertTrue(ok) ok = mg.collectionExists(self.__dbName, self.__collectionName) self.assertTrue(ok) # mg.databaseCommand(self.__dbName, query) dObj = {"x": 1} rId = mg.insert(self.__dbName, self.__collectionName, dObj) logger.info("rId is %r", rId) self.assertEqual(rId, None) # s2 = unescapeXmlCharRef( " " Φ Ψ α £ ℅ ☆ 𝕫" ) dObj = { "strField1": "test value", "strField2": s2, "intField1": 50, "enumField1": "v3", "dblField1": 100.1 } rId = mg.insert(self.__dbName, self.__collectionName, dObj) logger.info("rId is %r", rId) rObj = mg.fetchOne(self.__dbName, self.__collectionName, "_id", rId) logger.debug("Return Object %s", pprint.pformat(rObj)) self.assertEqual(len(dObj), len(rObj)) self.assertEqual(dObj, rObj) except Exception as e: logger.exception("Failing with %s", str(e)) self.fail()
def testSchemaValidation3(self): """Test case - create collection and insert data with schema validation (warn mode) (integrated schema assignment) """ try: with Connection(cfgOb=self.__cfgOb, resourceName=self.__resourceName) as client: mg = MongoDbUtil(client) if mg.databaseExists(self.__dbName): ok = mg.dropDatabase(self.__dbName) self.assertTrue(ok) # ok = mg.createDatabase(self.__dbName) self.assertTrue(ok) # ok = mg.createCollection(self.__dbName, self.__collectionName, overWrite=True, bsonSchema=self.__mongoSchema, validationAction="warn") self.assertTrue(ok) ok = mg.databaseExists(self.__dbName) self.assertTrue(ok) ok = mg.collectionExists(self.__dbName, self.__collectionName) self.assertTrue(ok) # dObj = {"x": 1} rId = mg.insert(self.__dbName, self.__collectionName, dObj) logger.info("rId is %r", rId) self.assertNotEqual(rId, None) # s2 = unescapeXmlCharRef( " " Φ Ψ α £ ℅ ☆ 𝕫" ) dObj = { "strField1": "test value", "strField2": s2, "intField1": 50, "enumField1": "v3a", "dblField1": 100.1 } rId = mg.insert(self.__dbName, self.__collectionName, dObj) self.assertNotEqual(rId, None) logger.info("rId is %r", rId) rObj = mg.fetchOne(self.__dbName, self.__collectionName, "_id", rId) logger.debug("Return Object %s", pprint.pformat(rObj)) self.assertEqual(len(dObj), len(rObj)) self.assertEqual(dObj, rObj) except Exception as e: logger.exception("Failing with %s", str(e)) self.fail()
def testInsertSingle(self): """Test case - create collection and insert data - """ try: with Connection(cfgOb=self.__cfgOb, resourceName=self.__resourceName) as client: mg = MongoDbUtil(client) ok = mg.createCollection(self.__dbName, self.__collectionName) self.assertTrue(ok) ok = mg.databaseExists(self.__dbName) self.assertTrue(ok) ok = mg.collectionExists(self.__dbName, self.__collectionName) self.assertTrue(ok) # dObj = self.__makeDataObj(2, 5, 5) rId = mg.insert(self.__dbName, self.__collectionName, dObj) self.assertTrue(rId is not None) # Note that dObj is mutated by additional key '_id' that is added on insert - # rObj = mg.fetchOne(self.__dbName, self.__collectionName, "_id", rId) logger.debug("Return Object %s", pprint.pformat(rObj)) self.assertEqual(len(dObj), len(rObj)) self.assertEqual(dObj, rObj) except Exception as e: logger.exception("Failing with %s", str(e)) self.fail()
def testReplaceSingle(self): """Test case - create collection and insert document and then replace document -""" try: with Connection(cfgOb=self.__cfgOb, resourceName=self.__resourceName) as client: mg = MongoDbUtil(client) ok = mg.createCollection(self.__dbName, self.__collectionName) self.assertTrue(ok) ok = mg.databaseExists(self.__dbName) self.assertTrue(ok) ok = mg.collectionExists(self.__dbName, self.__collectionName) self.assertTrue(ok) # dObj = self.__makeDataObj(2, 5, 5, 1) rId = mg.insert(self.__dbName, self.__collectionName, dObj) self.assertTrue(rId is not None) # Note that dObj is mutated by additional key '_id' that is added on insert - # rObj = mg.fetchOne(self.__dbName, self.__collectionName, "_id", rId) logger.debug("Return Object %s", pprint.pformat(rObj)) self.assertEqual(len(dObj), len(rObj)) self.assertEqual(dObj, rObj) # # Now replace with a new document with the same document id dObj = self.__makeDataObj(3, 2, 2, 1) logger.debug("Replace Object %s", pprint.pformat(dObj)) rId = mg.replace(self.__dbName, self.__collectionName, dObj, {"DOC_ID": "DOC_1"}, upsertFlag=True) # self.assertTrue(rId is not None) rObj = mg.fetchOne(self.__dbName, self.__collectionName, "DOC_ID", "DOC_1") rObj.pop("_id", None) dObj.pop("_id", None) logger.debug("Return Object %s", pprint.pformat(rObj)) self.assertEqual(len(dObj), len(rObj)) self.assertEqual(dObj, rObj) # # Now replace with a new document with a different key dObj2 = self.__makeDataObj(5, 5, 5, 2) logger.debug("Replace Object %s", pprint.pformat(dObj)) # rId = mg.replace(self.__dbName, self.__collectionName, dObj2, {"DOC_ID": "DOC_2"}, upsertFlag=True) rObj = mg.fetchOne(self.__dbName, self.__collectionName, "DOC_ID", "DOC_2") rObj.pop("_id", None) dObj2.pop("_id", None) logger.debug("Return Object %s", pprint.pformat(rObj)) self.assertEqual(len(dObj2), len(rObj)) self.assertEqual(dObj2, rObj) # except Exception as e: logger.exception("Failing with %s", str(e)) self.fail()