|
6 | 6 |
|
7 | 7 | class TestSodaDocuments(BaseTestCase): |
8 | 8 |
|
| 9 | + def __testSkip(self, coll, numToSkip, expectedContent): |
| 10 | + filterSpec = {'$orderby': [{'path': 'name', 'order': 'desc'}]} |
| 11 | + doc = coll.find().filter(filterSpec).skip(numToSkip).getOne() |
| 12 | + content = doc.getContent() if doc is not None else None |
| 13 | + self.assertEqual(content, expectedContent) |
| 14 | + |
9 | 15 | def testInvalidJson(self): |
10 | 16 | "test inserting invalid JSON value into SODA collection" |
11 | 17 | invalidJson = "{testKey:testValue}" |
@@ -38,25 +44,24 @@ def testInsertDocuments(self): |
38 | 44 | coll.drop() |
39 | 45 |
|
40 | 46 | def testSkipDocuments(self): |
41 | | - "test skip documents from SODA collection" |
| 47 | + "test skipping documents in a SODA collection" |
42 | 48 | sodaDatabase = self.connection.getSodaDatabase() |
43 | 49 | coll = sodaDatabase.createCollection("cxoSkipDocs") |
44 | 50 | coll.find().remove() |
45 | 51 | valuesToInsert = [ |
46 | | - { "name" : "Matthew", "age" : 28 }, |
47 | | - { "name" : "Martha", "age" : 43 }, |
| 52 | + { "name" : "Anna", "age" : 62 }, |
48 | 53 | { "name" : "Mark", "age" : 37 }, |
49 | | - { "name" : "Anna", "age" : 62 } |
| 54 | + { "name" : "Martha", "age" : 43 }, |
| 55 | + { "name" : "Matthew", "age" : 28 } |
50 | 56 | ] |
51 | 57 | for value in valuesToInsert: |
52 | 58 | coll.insertOne(value) |
53 | 59 | self.connection.commit() |
54 | | - self.assertEqual(coll.find().skip(1).getOne().getContent(), |
55 | | - valuesToInsert[1]) |
56 | | - self.assertEqual(coll.find().skip(3).getOne().getContent(), |
57 | | - valuesToInsert[3]) |
58 | | - self.assertEqual(coll.find().skip(4).getOne(), None) |
59 | | - self.assertEqual(coll.find().skip(125).getOne(), None) |
| 60 | + self.__testSkip(coll, 0, valuesToInsert[3]) |
| 61 | + self.__testSkip(coll, 1, valuesToInsert[2]) |
| 62 | + self.__testSkip(coll, 3, valuesToInsert[0]) |
| 63 | + self.__testSkip(coll, 4, None) |
| 64 | + self.__testSkip(coll, 125, None) |
60 | 65 |
|
61 | 66 | def testReplaceDocument(self): |
62 | 67 | "test replace documents in SODA collection" |
@@ -192,3 +197,77 @@ def testCursor(self): |
192 | 197 | self.assertEqual(fetchedKeys, insertedKeys) |
193 | 198 | coll.drop() |
194 | 199 |
|
| 200 | + def testMultipleDocumentRemove(self): |
| 201 | + "test removing multiple documents using multiple keys" |
| 202 | + sodaDatabase = self.connection.getSodaDatabase() |
| 203 | + coll = sodaDatabase.createCollection("cxoRemoveMultipleDocs") |
| 204 | + coll.find().remove() |
| 205 | + data = [ |
| 206 | + {'name': 'John', 'address': {'city': 'Bangalore'}}, |
| 207 | + {'name': 'Johnson', 'address': {'city': 'Banaras'}}, |
| 208 | + {'name': 'Joseph', 'address': {'city': 'Mangalore'}}, |
| 209 | + {'name': 'Jibin', 'address': {'city': 'Secunderabad'}}, |
| 210 | + {'name': 'Andrew', 'address': {'city': 'Hyderabad'}}, |
| 211 | + {'name': 'Matthew', 'address': {'city': 'Mumbai'}} |
| 212 | + ] |
| 213 | + docs = [coll.insertOneAndGet(v) for v in data] |
| 214 | + keys = [docs[i].key for i in (1, 3, 5)] |
| 215 | + numRemoved = coll.find().keys(keys).remove() |
| 216 | + self.assertEqual(numRemoved, len(keys)) |
| 217 | + self.assertEqual(coll.find().count(), len(data) - len(keys)) |
| 218 | + self.connection.commit() |
| 219 | + coll.drop() |
| 220 | + |
| 221 | + def testDocumentVersion(self): |
| 222 | + "test using version to get documents and remove them" |
| 223 | + sodaDatabase = self.connection.getSodaDatabase() |
| 224 | + coll = sodaDatabase.createCollection("cxoDocumentVersion") |
| 225 | + coll.find().remove() |
| 226 | + content = {'name': 'John', 'address': {'city': 'Bangalore'}} |
| 227 | + insertedDoc = coll.insertOneAndGet(content) |
| 228 | + key = insertedDoc.key |
| 229 | + version = insertedDoc.version |
| 230 | + doc = coll.find().key(key).version(version).getOne() |
| 231 | + self.assertEqual(doc.getContent(), content) |
| 232 | + newContent = {'name': 'James', 'address': {'city': 'Delhi'}} |
| 233 | + replacedDoc = coll.find().key(key).replaceOneAndGet(newContent) |
| 234 | + newVersion = replacedDoc.version |
| 235 | + doc = coll.find().key(key).version(version).getOne() |
| 236 | + self.assertEqual(doc, None) |
| 237 | + doc = coll.find().key(key).version(newVersion).getOne() |
| 238 | + self.assertEqual(doc.getContent(), newContent) |
| 239 | + self.assertEqual(coll.find().key(key).version(version).remove(), 0) |
| 240 | + self.assertEqual(coll.find().key(key).version(newVersion).remove(), 1) |
| 241 | + self.assertEqual(coll.find().count(), 0) |
| 242 | + self.connection.commit() |
| 243 | + coll.drop() |
| 244 | + |
| 245 | + def testGetCursor(self): |
| 246 | + "test keys with GetCursor" |
| 247 | + sodaDatabase = self.connection.getSodaDatabase() |
| 248 | + coll = sodaDatabase.createCollection("cxoKeysWithGetCursor") |
| 249 | + coll.find().remove() |
| 250 | + data = [ |
| 251 | + {'name': 'John', 'address': {'city': 'Bangalore'}}, |
| 252 | + {'name': 'Johnson', 'address': {'city': 'Banaras'}}, |
| 253 | + {'name': 'Joseph', 'address': {'city': 'Mangalore'}}, |
| 254 | + {'name': 'Jibin', 'address': {'city': 'Secunderabad'}}, |
| 255 | + {'name': 'Andrew', 'address': {'city': 'Hyderabad'}}, |
| 256 | + {'name': 'Matthew', 'address': {'city': 'Mumbai'}} |
| 257 | + ] |
| 258 | + docs = [coll.insertOneAndGet(v) for v in data] |
| 259 | + keys = [docs[i].key for i in (2, 4, 5)] |
| 260 | + fetchedKeys = [d.key for d in coll.find().keys(keys).getCursor()] |
| 261 | + self.assertEqual(list(sorted(fetchedKeys)), list(sorted(keys))) |
| 262 | + self.connection.commit() |
| 263 | + coll.drop() |
| 264 | + |
| 265 | + def testCreatedOn(self): |
| 266 | + "test createdOn attribute of Document" |
| 267 | + sodaDatabase = self.connection.getSodaDatabase() |
| 268 | + coll = sodaDatabase.createCollection("cxoCreatedOn") |
| 269 | + coll.find().remove() |
| 270 | + data = {'name': 'John', 'address': {'city': 'Bangalore'}} |
| 271 | + doc = coll.insertOneAndGet(data) |
| 272 | + self.assertEqual(doc.createdOn, doc.lastModified) |
| 273 | + |
0 commit comments