class ClientViewTestCase(unittest.TestCase): def setUp(self): self.Server = Server() def tearDown(self): try: self.Server.delete_db("couchdbkit_test") except: pass try: self.Server.delete_db("couchdbkit_test2") except: pass def testView(self): db = self.Server.create_db("couchdbkit_test") # save 2 docs doc1 = {"_id": "test", "string": "test", "number": 4, "docType": "test"} db.save_doc(doc1) doc2 = {"_id": "test2", "string": "test", "number": 2, "docType": "test"} db.save_doc(doc2) design_doc = { "_id": "_design/test", "language": "javascript", "views": { "all": { "map": """function(doc) { if (doc.docType == "test") { emit(doc._id, doc); }}""" } }, } db.save_doc(design_doc) doc3 = db.get_doc("_design/test") self.assert_(doc3 is not None) results = db.view("test/all") self.assert_(len(results) == 2) results = list(results) self.assertEqual(results[0]["key"], "test") results = db.view("test/all", descending=True) self.assertEqual(results.all()[0]["key"], "test2") self.Server.delete_db("couchdbkit_test") def testAllDocs(self): db = self.Server.create_db("couchdbkit_test") # save 2 docs doc1 = {"_id": "test", "string": "test", "number": 4, "docType": "test"} db.save_doc(doc1) doc2 = {"_id": "test2", "string": "test", "number": 2, "docType": "test"} db.save_doc(doc2) self.assert_(db.all_docs().count() == 2) self.assert_(db.all_docs().all() == db.all_docs().all()) self.Server.delete_db("couchdbkit_test") def testCount(self): db = self.Server.create_db("couchdbkit_test") # save 2 docs doc1 = {"_id": "test", "string": "test", "number": 4, "docType": "test"} db.save_doc(doc1) doc2 = {"_id": "test2", "string": "test", "number": 2, "docType": "test"} db.save_doc(doc2) design_doc = { "_id": "_design/test", "language": "javascript", "views": {"all": {"map": """function(doc) { if (doc.docType == "test") { emit(doc._id, doc); }}"""}}, } db.save_doc(design_doc) count = db.view("test/all").count() self.assert_(count == 2) self.Server.delete_db("couchdbkit_test") def testView2(self): db = self.Server.create_db("couchdbkit_test") # save 2 docs doc1 = {"_id": "test1", "string": "test", "number": 4, "docType": "test"} db.save_doc(doc1) doc2 = {"_id": "test2", "string": "test", "number": 2, "docType": "test"} db.save_doc(doc2) doc3 = {"_id": "test3", "string": "test", "number": 2, "docType": "test2"} db.save_doc(doc3) design_doc = { "_id": "_design/test", "language": "javascript", "views": { "with_test": { "map": """function(doc) { if (doc.docType == "test") { emit(doc._id, doc); }}""" }, "with_test2": { "map": """function(doc) { if (doc.docType == "test2") { emit(doc._id, doc); }}""" }, }, } db.save_doc(design_doc) # yo view is callable ! results = db.view("test/with_test") self.assert_(len(results) == 2) results = db.view("test/with_test2") self.assert_(len(results) == 1) self.assertEqual(db.get_view_group_info("test")["name"], "test") self.Server.delete_db("couchdbkit_test") def testViewWithParams(self): db = self.Server.create_db("couchdbkit_test") # save 2 docs doc1 = {"_id": "test1", "string": "test", "number": 4, "docType": "test", "date": "20081107"} db.save_doc(doc1) doc2 = {"_id": "test2", "string": "test", "number": 2, "docType": "test", "date": "20081107"} db.save_doc(doc2) doc3 = {"_id": "test3", "string": "machin", "number": 2, "docType": "test", "date": "20081007"} db.save_doc(doc3) doc4 = {"_id": "test4", "string": "test2", "number": 2, "docType": "test", "date": "20081108"} db.save_doc(doc4) doc5 = {"_id": "test5", "string": "test2", "number": 2, "docType": "test", "date": "20081109"} db.save_doc(doc5) doc6 = {"_id": "test6", "string": "test2", "number": 2, "docType": "test", "date": "20081109"} db.save_doc(doc6) design_doc = { "_id": "_design/test", "language": "javascript", "views": { "test1": { "map": """function(doc) { if (doc.docType == "test") { emit(doc.string, doc); }}""" }, "test2": { "map": """function(doc) { if (doc.docType == "test") { emit(doc.date, doc); }}""" }, "test3": { "map": """function(doc) { if (doc.docType == "test") { emit(doc.string, doc); }}""" }, }, } db.save_doc(design_doc) results = db.view("test/test1") self.assert_(len(results) == 6) results = db.view("test/test3", key="test") self.assert_(len(results) == 2) self.assertEqual(db.compact(), True) self.assertEqual(db.compact_view("test"), True) self.assertRaises(ResourceNotFound, db.compact_view, "doesnotexist") def testReplicate(self): self.Server.create_db("couchdbkit_test") self.Server.create_db("couchdbkit_test2") db1 = self.Server.get_db("couchdbkit_test") db2 = self.Server.get_db("couchdbkit_test2") self.assertRaises(ResourceNotFound, self.Server.get_db, "notfoundcouchdbkit_test") doc1 = {"_id": "test1", "string": "test", "number": 4, "docType": "test", "date": "20081107"} db1.save_doc(doc1) self.Server.replicate(db1.name, db2.name) self.assertEqual(db2.length(), 1) def testAttachmentStreams(self): db = self.Server.create_db("couchdbkit_test") doc1 = {"_id": "test1"} db.save_doc(doc1) with open(path.join(path.dirname(__file__), "data", "text_attachment.txt"), "r+") as f: db.put_attachment(doc1, f, "attachment1", "text/plain") self.assertEqual(doc1["_attachments"].keys(), ["attachment1"]) self.assertEqual(doc1["_attachments"]["attachment1"]["content_type"], "text/plain") content = db.fetch_attachment(doc1, "attachment1") self.assertEqual(content, "Some unicode: î\n") content = db.fetch_attachment(doc1, "attachment1", stream=True) self.assertEqual(content.read(), "Some unicode: î\n") content = db.fetch_attachment(doc1, "attachment1", stream=True) self.assertEqual(content.read(1), "S") self.assertEqual(content.read(2), "om") self.assertEqual(content.read(), "e unicode: î\n") content = db.fetch_attachment(doc1, "attachment1", stream=True, stream_chunk_size=1) self.assertEqual(content.read(1), "S") self.assertEqual(content.read(2), "om") self.assertEqual(content.read(), "e unicode: î\n") db.delete_attachment(doc1, "attachment1") with open(path.join(path.dirname(__file__), "data", "text_attachment.txt"), "r+") as f: db.put_attachment(doc1, f, u"attachment1/a/b/î", "text/plain") self.assertEqual(doc1["_attachments"].keys(), [u"attachment1/a/b/î"]) db.delete_attachment(doc1, u"attachment1/a/b/î") with open(path.join(path.dirname(__file__), "data", "text_attachment.txt"), "r+") as f: db.put_attachment(doc1, f, "attî", "text/plain") db.delete_attachment(doc1, u"att\xee") self.assertEqual(doc1.has_key("_attachments"), False) # WTF ? Couchdb replies with a 200 status db.delete_attachment(doc1, "doesnotexist") data = "A" * 8000 + "B" * 2933 db.put_attachment(doc1, data, "oddsize", "text/plain") doc2 = {"_id": "test2"} db.save_doc(doc2) data = db.fetch_attachment(doc1, "oddsize", stream=True) db.put_attachment(doc2, data.read(), "oddsize2", content_length=10933) stream = db.fetch_attachment(doc2, "oddsize2", stream=True) s = stream.read(8000) self.assertTrue("B" not in s) self.assertEqual(s[0], "A") self.assertEqual(s[-1], "A") self.assertEqual(len(s), 8000) s = stream.read(8000) self.assertTrue("A" not in s) self.assertEqual(s[0], "B") self.assertEqual(s[-1], "B") self.assertEqual(len(s), 2933)
class ClientViewTestCase(unittest.TestCase): def setUp(self): self.Server = Server() def tearDown(self): try: self.Server.delete_db('couchdbkit_test') except: pass try: self.Server.delete_db('couchdbkit_test2') except: pass def testView(self): db = self.Server.create_db('couchdbkit_test') # save 2 docs doc1 = { '_id': 'test', 'string': 'test', 'number': 4, 'docType': 'test' } db.save_doc(doc1) doc2 = { '_id': 'test2', 'string': 'test', 'number': 2, 'docType': 'test'} db.save_doc(doc2) design_doc = { '_id': '_design/test', 'language': 'javascript', 'views': { 'all': { "map": """function(doc) { if (doc.docType == "test") { emit(doc._id, doc); }}""" } } } db.save_doc(design_doc) doc3 = db.get_doc('_design/test') self.assert_(doc3 is not None) results = db.view('test/all') self.assert_(len(results) == 2) results = list(results) self.assertEqual(results[0]['key'], 'test') results = db.view('test/all', descending=True) self.assertEqual(results.all()[0]['key'], 'test2') self.Server.delete_db('couchdbkit_test') def testAllDocs(self): db = self.Server.create_db('couchdbkit_test') # save 2 docs doc1 = { '_id': 'test', 'string': 'test', 'number': 4, 'docType': 'test' } db.save_doc(doc1) doc2 = { '_id': 'test2', 'string': 'test', 'number': 2, 'docType': 'test'} db.save_doc(doc2) self.assert_(db.all_docs().count() == 2 ) self.assert_(db.all_docs().all() == db.all_docs().all()) self.Server.delete_db('couchdbkit_test') def testCount(self): db = self.Server.create_db('couchdbkit_test') # save 2 docs doc1 = { '_id': 'test', 'string': 'test', 'number': 4, 'docType': 'test' } db.save_doc(doc1) doc2 = { '_id': 'test2', 'string': 'test', 'number': 2, 'docType': 'test'} db.save_doc(doc2) design_doc = { '_id': '_design/test', 'language': 'javascript', 'views': { 'all': { "map": """function(doc) { if (doc.docType == "test") { emit(doc._id, doc); }}""" } } } db.save_doc(design_doc) count = db.view('test/all').count() self.assert_(count == 2) self.Server.delete_db('couchdbkit_test') def testView2(self): db = self.Server.create_db('couchdbkit_test') # save 2 docs doc1 = { '_id': 'test1', 'string': 'test', 'number': 4, 'docType': 'test' } db.save_doc(doc1) doc2 = { '_id': 'test2', 'string': 'test', 'number': 2, 'docType': 'test'} db.save_doc(doc2) doc3 = { '_id': 'test3', 'string': 'test', 'number': 2, 'docType': 'test2'} db.save_doc(doc3) design_doc = { '_id': '_design/test', 'language': 'javascript', 'views': { 'with_test': { "map": """function(doc) { if (doc.docType == "test") { emit(doc._id, doc); }}""" }, 'with_test2': { "map": """function(doc) { if (doc.docType == "test2") { emit(doc._id, doc); }}""" } } } db.save_doc(design_doc) # yo view is callable ! results = db.view('test/with_test') self.assert_(len(results) == 2) results = db.view('test/with_test2') self.assert_(len(results) == 1) self.assertEqual(db.get_view_group_info('test')['name'], 'test') self.Server.delete_db('couchdbkit_test') def testViewWithParams(self): db = self.Server.create_db('couchdbkit_test') # save 2 docs doc1 = { '_id': 'test1', 'string': 'test', 'number': 4, 'docType': 'test', 'date': '20081107' } db.save_doc(doc1) doc2 = { '_id': 'test2', 'string': 'test', 'number': 2, 'docType': 'test', 'date': '20081107'} db.save_doc(doc2) doc3 = { '_id': 'test3', 'string': 'machin', 'number': 2, 'docType': 'test', 'date': '20081007'} db.save_doc(doc3) doc4 = { '_id': 'test4', 'string': 'test2', 'number': 2, 'docType': 'test', 'date': '20081108'} db.save_doc(doc4) doc5 = { '_id': 'test5', 'string': 'test2', 'number': 2, 'docType': 'test', 'date': '20081109'} db.save_doc(doc5) doc6 = { '_id': 'test6', 'string': 'test2', 'number': 2, 'docType': 'test', 'date': '20081109'} db.save_doc(doc6) design_doc = { '_id': '_design/test', 'language': 'javascript', 'views': { 'test1': { "map": """function(doc) { if (doc.docType == "test") { emit(doc.string, doc); }}""" }, 'test2': { "map": """function(doc) { if (doc.docType == "test") { emit(doc.date, doc); }}""" }, 'test3': { "map": """function(doc) { if (doc.docType == "test") { emit(doc.string, doc); }}""" } } } db.save_doc(design_doc) results = db.view('test/test1') self.assert_(len(results) == 6) results = db.view('test/test3', key="test") self.assert_(len(results) == 2) self.assertEqual(db.compact(), True) self.assertEqual(db.compact_view('test'), True) self.assertRaises(ResourceNotFound, db.compact_view, 'doesnotexist') def testReplicate(self): self.Server.create_db('couchdbkit_test') self.Server.create_db('couchdbkit_test2') db1 = self.Server.get_db('couchdbkit_test') db2 = self.Server.get_db('couchdbkit_test2') self.assertRaises(ResourceNotFound, self.Server.get_db, 'notfoundcouchdbkit_test') doc1 = { '_id': 'test1', 'string': 'test', 'number': 4, 'docType': 'test', 'date': '20081107' } db1.save_doc(doc1) self.Server.replicate(db1.name, db2.name) self.assertEqual(db2.length(), 1) def testAttachmentStreams(self): db = self.Server.create_db('couchdbkit_test') doc1 = { '_id': 'test1' } db.save_doc(doc1) with open(path.join(path.dirname(__file__), 'data', 'text_attachment.txt'), 'r+') as f: db.put_attachment(doc1, f, 'attachment1', 'text/plain') self.assertEqual(doc1['_attachments'].keys(), ['attachment1']) self.assertEqual(doc1['_attachments']['attachment1']['content_type'], 'text/plain') content = db.fetch_attachment(doc1, 'attachment1') self.assertEqual(content, "Some unicode: î\n") content = db.fetch_attachment(doc1, 'attachment1', stream=True) self.assertEqual(content.read(), "Some unicode: î\n") content = db.fetch_attachment(doc1, 'attachment1', stream=True) self.assertEqual(content.read(1), "S") self.assertEqual(content.read(2), "om") self.assertEqual(content.read(), "e unicode: î\n") content = db.fetch_attachment(doc1, 'attachment1', stream=True, stream_chunk_size=1) self.assertEqual(content.read(1), "S") self.assertEqual(content.read(2), "om") self.assertEqual(content.read(), "e unicode: î\n") db.delete_attachment(doc1, 'attachment1') with open(path.join(path.dirname(__file__), 'data', 'text_attachment.txt'), 'r+') as f: db.put_attachment(doc1, f, u'attachment1/a/b/î', 'text/plain') self.assertEqual(doc1['_attachments'].keys(),[u'attachment1/a/b/î']) db.delete_attachment(doc1, u'attachment1/a/b/î') with open(path.join(path.dirname(__file__), 'data', 'text_attachment.txt'), 'r+') as f: db.put_attachment(doc1, f, 'attî', 'text/plain') db.delete_attachment(doc1, u'att\xee') self.assertEqual(doc1.has_key('_attachments'), False) # WTF ? Couchdb replies with a 200 status db.delete_attachment(doc1, 'doesnotexist') data = 'A' * 8000 + 'B' * 2933 db.put_attachment(doc1, data, 'oddsize', 'text/plain') doc2 = { '_id': 'test2' } db.save_doc(doc2) data = db.fetch_attachment(doc1, 'oddsize', stream=True) db.put_attachment(doc2, data, 'oddsize2', content_length=10933) stream = db.fetch_attachment(doc2, 'oddsize2', stream=True) s = stream.read(8000) self.assertTrue('B' not in s) self.assertEqual(s[0], 'A') self.assertEqual(s[-1], 'A') self.assertEqual(len(s), 8000) s = stream.read(8000) self.assertTrue('A' not in s) self.assertEqual(s[0], 'B') self.assertEqual(s[-1], 'B') self.assertEqual(len(s), 2933)