def test_publish_in(self): # Arrange subscriptionmanager.__manager__ = None redis_mock = Mock() publish_mock = Mock() redis_mock.attach_mock(publish_mock, "publish") manager = GetManager() manager.trc = redis_mock condition1 = {"id": {"in": [10, 3]}} resource1 = {"id": 10, "data": "stuff"} resource2 = {"id": 5, "data": "stuff_also"} resource3 = {"id": 3, "data": "stuff_more"} channel1 = manager.createChannel(conditions=condition1, collection="test_coll1", fields=None) # Act manager.publish(resource1, "test_coll1") manager.publish(resource2, "test_coll1") manager.publish(resource3, "test_coll1") # Assert self.assertEqual(redis_mock.publish.call_count, 2) self.assertEqual(redis_mock.publish.call_args[0][0], channel1) self.assertEqual( json.loads(redis_mock.publish.call_args_list[0][0][1]), resource1) self.assertEqual( json.loads(redis_mock.publish.call_args_list[1][0][1]), resource3) manager.subscriptions = []
def test_publish_basic(self): # Arrange subscriptionmanager.__manager__ = None redis_mock = Mock() publish_mock = Mock() redis_mock.attach_mock(publish_mock, "publish") manager = GetManager() manager.trc = redis_mock condition1 = {"id": "test1"} condition2 = {"id": "test2"} resource = {"id": "test1", "data": "stuff"} channel1 = manager.createChannel(conditions=condition1, collection="test_coll1", fields=None) channel2 = manager.createChannel(conditions=condition1, collection="test_coll2", fields=None) channel3 = manager.createChannel(conditions=condition2, collection="test_coll1", fields=None) # Act manager.publish(resource, "test_coll1") # Assert self.assertEqual(redis_mock.publish.call_count, 1) self.assertEqual(redis_mock.publish.call_args[0][0], channel1) self.assertEqual(json.loads(redis_mock.publish.call_args[0][1]), resource) manager.subscriptions = []
def test_publish_in(self): # Arrange subscriptionmanager.__manager__ = None redis_mock = Mock() publish_mock = Mock() redis_mock.attach_mock(publish_mock, "publish") manager = GetManager() manager.trc = redis_mock condition1 = { "id": { "in": [ 10, 3 ] } } resource1 = { "id": 10, "data": "stuff" } resource2 = { "id": 5, "data": "stuff_also" } resource3 = { "id": 3, "data": "stuff_more" } channel1 = manager.createChannel(conditions = condition1, collection = "test_coll1", fields = None) # Act manager.publish(resource1, "test_coll1") manager.publish(resource2, "test_coll1") manager.publish(resource3, "test_coll1") # Assert self.assertEqual(redis_mock.publish.call_count, 2) self.assertEqual(redis_mock.publish.call_args[0][0], channel1) self.assertEqual(json.loads(redis_mock.publish.call_args_list[0][0][1]), resource1) self.assertEqual(json.loads(redis_mock.publish.call_args_list[1][0][1]), resource3) manager.subscriptions = []
def test_query_consistency(self): # Arrange subscriptionmanager.__manager__ = None manager = GetManager() manager.trc = Mock() condition1 = { "id": "test1" } fields = [ "name", "file" ] channel1 = manager.createChannel(conditions = condition1, collection = "test", fields = fields) # Act self.assertEqual(manager.subscriptions[0]["channel"], channel1) self.assertEqual(manager.subscriptions[0]["conditions"], condition1) self.assertEqual(manager.subscriptions[0]["fields"], fields) self.assertEqual(manager.subscriptions[0]["collection"], "test") manager.subscriptions = []
def test_publish_basic(self): # Arrange subscriptionmanager.__manager__ = None redis_mock = Mock() publish_mock = Mock() redis_mock.attach_mock(publish_mock, "publish") manager = GetManager() manager.trc = redis_mock condition1 = { "id": "test1" } condition2 = { "id": "test2" } resource = { "id": "test1", "data": "stuff" } channel1 = manager.createChannel(conditions = condition1, collection = "test_coll1", fields = None) channel2 = manager.createChannel(conditions = condition1, collection = "test_coll2", fields = None) channel3 = manager.createChannel(conditions = condition2, collection = "test_coll1", fields = None) # Act manager.publish(resource, "test_coll1") # Assert self.assertEqual(redis_mock.publish.call_count, 1) self.assertEqual(redis_mock.publish.call_args[0][0], channel1) self.assertEqual(json.loads(redis_mock.publish.call_args[0][1]), resource) manager.subscriptions = []
def test_create_channel(self): # Arrange manager = GetManager() manager.trc = Mock() condition1 = { "id": "test1" } condition2 = { "value": 5 } condition3 = { "con1": condition1, "con2": condition2 } # Act # Test single append self.assertTrue(manager.createChannel(conditions = condition1, collection = "test", fields = None)) self.assertEqual(len(manager.subscriptions), 1) # Test new append self.assertTrue(manager.createChannel(conditions = condition3, collection = "test", fields = None)) self.assertEqual(len(manager.subscriptions), 2) # Test same append self.assertTrue(manager.createChannel(conditions = condition1, collection = "test", fields = None)) self.assertEqual(len(manager.subscriptions), 2) # Test different collection self.assertTrue(manager.createChannel(conditions = condition1, collection = "test2", fields = None)) self.assertEqual(len(manager.subscriptions), 3) manager.subscriptions = []
def test_publish_trim(self): # Arrange subscriptionmanager.__manager__ = None redis_mock = Mock() publish_mock = Mock() redis_mock.attach_mock(publish_mock, "publish") manager = GetManager() manager.trc = redis_mock condition1 = {"id": "test1"} fields = ["name", "file"] resource = { "id": "test1", "name": "test1", "file": "AnnaK", "value": "Tols" } channel1 = manager.createChannel(conditions=condition1, collection="test", fields=fields) # Act manager.publish(resource, "test") # Assert self.assertEqual(json.loads(redis_mock.publish.call_args[0][1]), { "name": "test1", "file": "AnnaK" }) manager.subscriptions = []
def test_query_consistency(self): # Arrange subscriptionmanager.__manager__ = None manager = GetManager() manager.trc = Mock() condition1 = {"id": "test1"} fields = ["name", "file"] channel1 = manager.createChannel(conditions=condition1, collection="test", fields=fields) # Act self.assertEqual(manager.subscriptions[0]["channel"], channel1) self.assertEqual(manager.subscriptions[0]["conditions"], condition1) self.assertEqual(manager.subscriptions[0]["fields"], fields) self.assertEqual(manager.subscriptions[0]["collection"], "test") manager.subscriptions = []
def test_callback_trim(self): def do_trim(resource, fields): return { "name": resource["name"], "file": resource["file"] } # Arrange subscriptionmanager.__manager__ = None redis_mock = Mock() publish_mock = Mock() redis_mock.attach_mock(publish_mock, "publish") manager = GetManager() manager.trc = redis_mock condition1 = { "id": "test1" } resource = { "id": "test1", "name": "test1", "file": "AnnaK", "value": "Tols" } channel1 = manager.createChannel(conditions = condition1, collection = "test", fields = None) # Act manager.publish(resource, "test", do_trim) # Assert self.assertTrue(redis_mock.publish.called) self.assertEqual(json.loads(redis_mock.publish.call_args[0][1]), { "name": "test1", "file": "AnnaK" }) manager.subscriptions = []
def test_create_channel(self): # Arrange manager = GetManager() manager.trc = Mock() condition1 = {"id": "test1"} condition2 = {"value": 5} condition3 = {"con1": condition1, "con2": condition2} # Act # Test single append self.assertTrue( manager.createChannel(conditions=condition1, collection="test", fields=None)) self.assertEqual(len(manager.subscriptions), 1) # Test new append self.assertTrue( manager.createChannel(conditions=condition3, collection="test", fields=None)) self.assertEqual(len(manager.subscriptions), 2) # Test same append self.assertTrue( manager.createChannel(conditions=condition1, collection="test", fields=None)) self.assertEqual(len(manager.subscriptions), 2) # Test different collection self.assertTrue( manager.createChannel(conditions=condition1, collection="test2", fields=None)) self.assertEqual(len(manager.subscriptions), 3) manager.subscriptions = []
def test_remove_channel(self): # Arrange manager = GetManager() manager.trc = Mock() condition1 = { "id": "test1" } condition2 = { "value": 5 } condition3 = { "con1": condition1, "con2": condition2 } channel1 = manager.createChannel(conditions = condition1, collection = "test", fields = None) channel2 = manager.createChannel(conditions = condition2, collection = "test", fields = None) channel3 = manager.createChannel(conditions = condition2, collection = "test", fields = None) # Act self.assertEqual(channel2, channel3) self.assertEqual(manager.subscriptions[1]["subscribers"], 2) manager.removeChannel(channel1) channel1_exists = False for channel in manager.subscriptions: if channel["channel"] == channel1: channel1_exists = True self.assertFalse(channel1_exists) manager.removeChannel(channel2) self.assertEqual(manager.subscriptions[0]["subscribers"], 1) manager.removeChannel(channel2) channel2_exists = False for channel in manager.subscriptions: if channel["channel"] == channel2: channel2_exists = True self.assertFalse(channel2_exists) manager.subscriptions = []
def test_remove_channel(self): # Arrange manager = GetManager() manager.trc = Mock() condition1 = {"id": "test1"} condition2 = {"value": 5} condition3 = {"con1": condition1, "con2": condition2} channel1 = manager.createChannel(conditions=condition1, collection="test", fields=None) channel2 = manager.createChannel(conditions=condition2, collection="test", fields=None) channel3 = manager.createChannel(conditions=condition2, collection="test", fields=None) # Act self.assertEqual(channel2, channel3) self.assertEqual(manager.subscriptions[1]["subscribers"], 2) manager.removeChannel(channel1) channel1_exists = False for channel in manager.subscriptions: if channel["channel"] == channel1: channel1_exists = True self.assertFalse(channel1_exists) manager.removeChannel(channel2) self.assertEqual(manager.subscriptions[0]["subscribers"], 1) manager.removeChannel(channel2) channel2_exists = False for channel in manager.subscriptions: if channel["channel"] == channel2: channel2_exists = True self.assertFalse(channel2_exists) manager.subscriptions = []