コード例 #1
0
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)
コード例 #2
0
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)