Beispiel #1
0
    def test_iterable_factory_outgoing(self):
        values = [Mock(name="value1", bar=1), Mock(name="value2", bar=2), Mock(name="value3", bar=3)]
        iterable = MagicMock(name="iterable")
        iterable.__iter__.return_value = iter(values)

        class MockResource(ModelResource):
            model_class = Mock()
            fields = [AttributeField(attribute="bar", type=int)]

        iterable_factory = Mock(name="iterable_factory", return_value=iterable)

        source_object = Mock(name="source_object")
        target_dict = {}

        field = IterableField(attribute="foo", resource_class=MockResource, iterable_factory=iterable_factory)

        field.handle_outgoing(mock_context(), source_object, target_dict)

        self.assertEqual(
            target_dict["foo"],
            [
                {"bar": 1, "_id": str(values[0].pk)},
                {"bar": 2, "_id": str(values[1].pk)},
                {"bar": 3, "_id": str(values[2].pk)},
            ],
        )

        iterable_factory.assert_called_with(source_object.foo)
Beispiel #2
0
    def test_handle_outgoing_multi_level(self):

        # TODO: Need to alter savory_pie.fields.IterableField.handle_outgoing to not use manager.all()
        from savory_pie.tests.django import mock_orm

        class ORMModelMock(mock_orm.Model):
            pass

        class MockResource(ModelResource):
            model_class = mock_orm.Model
            fields = [AttributeField(attribute="bar", type=int)]

        field = IterableField(attribute="foo.fu", resource_class=MockResource)

        source_object = mock_orm.Model()
        related_manager = mock_orm.Manager()
        related_manager.all = Mock(return_value=mock_orm.QuerySet(ORMModelMock(pk=4, bar=14)))

        class InterimObject(object):
            pass

        source_object.foo = InterimObject()
        source_object.foo.fu = related_manager

        target_dict = {}
        field.handle_outgoing(mock_context(), source_object, target_dict)
        self.assertEqual([{"_id": "4", "bar": 14}], target_dict["foo.fu"])
Beispiel #3
0
    def test_handle_outgoing_multi_level(self):

        # TODO: Need to alter savory_pie.fields.IterableField.handle_outgoing to not use manager.all()
        from savory_pie.tests.django import mock_orm

        class ORMModelMock(mock_orm.Model):
            pass

        class MockResource(ModelResource):
            model_class = mock_orm.Model
            fields = [
                AttributeField(attribute='bar', type=int),
            ]

        field = IterableField(attribute='foo.fu', resource_class=MockResource)

        source_object = mock_orm.Model()
        related_manager = mock_orm.Manager()
        related_manager.all = Mock(return_value=mock_orm.QuerySet(
            ORMModelMock(pk=4, bar=14)
        ))

        class InterimObject(object):
            pass

        source_object.foo = InterimObject()
        source_object.foo.fu = related_manager

        target_dict = {}
        field.handle_outgoing(mock_context(), source_object, target_dict)
        self.assertEqual([{'_id': '4', 'bar': 14}], target_dict['foo.fu'])
Beispiel #4
0
    def test_incoming_push_pop(self):
        Resource = Mock(name="resource")
        ctx = mock_context()

        field = IterableField(attribute="foo", resource_class=Resource)

        source_dict = {"foo": {"bar": 20}}

        target_object = MagicMock()
        target_object.__iter__ = iter([])
        field.handle_incoming(ctx, source_dict, target_object)

        ctx.assert_has_calls([mock.call.push(target_object), mock.call.pop()])
Beispiel #5
0
    def test_incoming_push_pop(self):
        Resource = Mock(name='resource')
        ctx = mock_context()

        field = IterableField(attribute='foo', resource_class=Resource)

        source_dict = {
            'foo': {'bar': 20},
        }

        target_object = MagicMock()
        target_object.__iter__ = iter([])
        field.handle_incoming(ctx, source_dict, target_object)

        ctx.assert_has_calls([
            mock.call.push(target_object),
            mock.call.pop(),
        ])
Beispiel #6
0
    def test_iterable_factory_outgoing(self):
        values = [
            Mock(name='value1', bar=1),
            Mock(name='value2', bar=2),
            Mock(name='value3', bar=3),
        ]
        iterable = MagicMock(name='iterable')
        iterable.__iter__.return_value = iter(values)

        class MockResource(ModelResource):
            model_class = Mock()
            fields = [
                AttributeField(attribute='bar', type=int),
            ]

        iterable_factory = Mock(name='iterable_factory', return_value=iterable)

        source_object = Mock(name='source_object')
        target_dict = {}

        field = IterableField(attribute='foo', resource_class=MockResource, iterable_factory=iterable_factory)

        field.handle_outgoing(mock_context(), source_object, target_dict)

        self.assertEqual(
            target_dict['foo'],
            [
                {
                    'bar': 1,
                    '_id': str(values[0].pk),
                },
                {
                    'bar': 2,
                    '_id': str(values[1].pk),
                },
                {
                    'bar': 3,
                    '_id': str(values[2].pk),
                },
            ]
        )

        iterable_factory.assert_called_with(source_object.foo)