Example #1
0
    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 = []
Example #2
0
    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 = []
Example #3
0
    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 = []
Example #4
0
 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 = []
Example #5
0
    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 = []
Example #6
0
    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 = []
Example #7
0
    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 = []
Example #8
0
    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 = []
Example #9
0
 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 = []
Example #10
0
    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 = []
Example #11
0
    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 = []
Example #12
0
    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 = []