import logging import unittest from flask import Flask, make_response from pymongo import MongoClient from pymongo.errors import ConnectionFailure from mockupdb import go, MockupDB, Command logging.basicConfig() def make_app(mongodb_uri): app = Flask("my app") db = MongoClient(mongodb_uri) @app.route("/pages/") def page(page_name): try: doc = db.content.pages.find_one({'name': page_name}) except ConnectionFailure: return make_response('Closed for renovations') return make_response(doc['contents']) return app class MockupDBFlaskTest(unittest.TestCase): def setUp(self): self.server = MockupDB(auto_ismaster=True, verbose=True) self.server.run() self.app = make_app(self.server.uri).test_client() def tearDown(self): self.server.stop() def test(self): future = go(self.app.get, "/pages/my_page_name") request = self.server.receives( Command('find', 'pages', filter={'name': 'my_page_name'})) request.ok(cursor={'id': 0, 'firstBatch': [{'contents': 'foo'}]}) http_response = future() self.assertEqual("foo", http_response.get_data(as_text=True)) def test_hangup(self): future = go(self.app.get, "/pages/my_page_name") request = self.server.receives( Command('find', 'pages', filter={'name': 'my_page_name'})) request.hangup() http_response = future() self.assertIn("renovations", http_response.get_data(as_text=True)) if __name__ == '__main__': unittest.main()