| |
@@ -2,7 +2,8 @@
|
| |
|
| |
import json
|
| |
|
| |
- from mock import Mock, patch
|
| |
+ import pymongo
|
| |
+ from mock import MagicMock, Mock, patch
|
| |
|
| |
from hubs.app import app
|
| |
from hubs.models import User, Hub, Association
|
| |
@@ -24,14 +25,33 @@
|
| |
def tearDown(self):
|
| |
super(FeedTest, self).tearDown()
|
| |
|
| |
+ @patch("hubs.feed.pymongo")
|
| |
+ def test_connect(self, pymongo_mock):
|
| |
+ client = MagicMock()
|
| |
+ pymongo_mock.MongoClient.return_value = client
|
| |
+ for feed_class, msgtype in self.feed_classes:
|
| |
+ database = Mock()
|
| |
+ database.collection_names.return_value = []
|
| |
+ database.create_collection.return_value = db = object()
|
| |
+ client.__getitem__.return_value = database
|
| |
+ db_name = "feed|%s|testuser" % msgtype
|
| |
+ feed = feed_class("testuser")
|
| |
+ feed.connect()
|
| |
+ pymongo_mock.MongoClient.assert_called_with(None)
|
| |
+ client.__getitem__.assert_called_with("hubs")
|
| |
+ database.create_collection.assert_called_with(
|
| |
+ db_name, capped=True, size=5242880, max=100
|
| |
+ )
|
| |
+ self.assertIs(feed.db, db)
|
| |
+
|
| |
def test_get(self):
|
| |
for feed_class, msgtype in self.feed_classes:
|
| |
feed = feed_class("testuser")
|
| |
feed.db = Mock()
|
| |
- feed.db.lrange.return_value = []
|
| |
+ feed.db.find.return_value = []
|
| |
feed.get()
|
| |
- feed.db.lrange.assert_called_once_with(
|
| |
- "feed|{}|testuser".format(msgtype), 0, -1)
|
| |
+ feed.db.find.assert_called_once_with(
|
| |
+ sort=[('$natural', pymongo.DESCENDING)])
|
| |
|
| |
def test_add(self):
|
| |
msg = {
|
| |
@@ -43,34 +63,30 @@
|
| |
for feed_class, msgtype in self.feed_classes:
|
| |
feed = feed_class("testuser")
|
| |
feed.db = Mock()
|
| |
- key = "feed|{}|testuser".format(msgtype)
|
| |
feed.add(msg)
|
| |
- feed.db.lpush.assert_called_once()
|
| |
- lpush_call_args = feed.db.lpush.call_args_list[0][0]
|
| |
- self.assertEqual(lpush_call_args[0], key)
|
| |
+ feed.db.insert_one.assert_called_once()
|
| |
+ insert_call_args = feed.db.insert_one.call_args_list[0][0]
|
| |
+ inserted_msg = json.loads(insert_call_args[0]["msg"])
|
| |
if feed_class == Notifications:
|
| |
- self.assertIn("msg_ids", json.loads(lpush_call_args[1]))
|
| |
+ self.assertIn("msg_ids", inserted_msg)
|
| |
elif feed_class == Activity:
|
| |
- self.assertEqual(json.loads(lpush_call_args[1]), msg)
|
| |
- feed.db.ltrim.assert_called_once_with(key, 0, 100)
|
| |
+ self.assertEqual(inserted_msg, msg)
|
| |
|
| |
def test_length(self):
|
| |
for feed_class, msgtype in self.feed_classes:
|
| |
feed = feed_class("testuser")
|
| |
feed.db = Mock()
|
| |
- feed.db.llen.return_value = 42
|
| |
+ feed.db.count.return_value = 42
|
| |
self.assertEqual(feed.length(), 42)
|
| |
- feed.db.llen.assert_called_once_with(
|
| |
- "feed|{}|testuser".format(msgtype))
|
| |
+ feed.db.count.assert_called_once_with()
|
| |
|
| |
def test_close(self):
|
| |
for feed_class, msgtype in self.feed_classes:
|
| |
feed = feed_class("testuser")
|
| |
- redis_mock = feed.db = Mock()
|
| |
+ db_mock = feed.db = Mock()
|
| |
feed.close()
|
| |
- redis_mock.close.assert_called_once()
|
| |
+ db_mock.database.client.close.assert_called_once()
|
| |
self.assertIsNone(feed.db)
|
| |
- self.assertIsNone(feed.connection_pool)
|
| |
|
| |
@patch("hubs.feed.Activity")
|
| |
def test_on_new_message(self, mock_activity):
|
| |
This suggestion is likely overkill, but I thought I might as well suggest it anyway just for thought: you might consider using mongoengine, which is an "OM" (like an ORM, but Mongo isn't relational… ☺).
On the other hand, it looks like you are doing something extremely simple here so probably not worth it.