Esempio n. 1
0
    def test_add_resources_add_views(self):
        from pyramid_rest.resource import (
            ResourceConfigurator,
            Resource,
            not_allowed_view,
            )

        dad_index = mock.Mock(spec=not_allowed_view)
        dad_show = mock.Mock(spec=not_allowed_view)

        kid_index = mock.Mock(spec=not_allowed_view)
        kid_show = mock.Mock(spec=not_allowed_view)

        kid = Resource('dad.kid')
        dad = Resource('dad')

        config = self._get_config()

        ru = ResourceConfigurator()
        ru._validate_views_args_name = lambda a: a

        # simulate decorating methods:
        dad.index()(dad_index)
        dad.show()(dad_show)
        kid.index()(kid_index)
        kid.show()(kid_show)

        ru._add(config, dad)
        ru._add(config, kid)

        self.assertEqual(14, config.add_view.call_count)

        # check dad views:

        self._check_add_view(dad_index, 'index', 'GET', 'dad_collection', config.add_view.call_args_list[0])
        self._check_add_view(dad_show, 'show', 'GET', 'dad_item', config.add_view.call_args_list[1])

        self._check_add_not_allowed(not_allowed_view, 'edit', 'GET', 'dad_edit', config.add_view.call_args_list[2])
        self._check_add_not_allowed(not_allowed_view, 'new', 'GET', 'dad_new', config.add_view.call_args_list[3])
        self._check_add_not_allowed(not_allowed_view, 'create', 'POST', 'dad_collection', config.add_view.call_args_list[4])
        self._check_add_not_allowed(not_allowed_view, 'update', 'PUT', 'dad_item', config.add_view.call_args_list[5])
        self._check_add_not_allowed(not_allowed_view, 'delete', 'DELETE', 'dad_item', config.add_view.call_args_list[6])

        # check kid views:

        self._check_add_view(kid_index, 'index', 'GET', 'dad.kid_collection', config.add_view.call_args_list[7])
        self._check_add_view(kid_show, 'show', 'GET', 'dad.kid_item', config.add_view.call_args_list[8])

        self._check_add_not_allowed(not_allowed_view, 'edit', 'GET', 'dad.kid_edit', config.add_view.call_args_list[9])
        self._check_add_not_allowed(not_allowed_view, 'new', 'GET', 'dad.kid_new', config.add_view.call_args_list[10])
        self._check_add_not_allowed(not_allowed_view, 'create', 'POST', 'dad.kid_collection', config.add_view.call_args_list[11])
        self._check_add_not_allowed(not_allowed_view, 'update', 'PUT', 'dad.kid_item', config.add_view.call_args_list[12])
        self._check_add_not_allowed(not_allowed_view, 'delete', 'DELETE', 'dad.kid_item', config.add_view.call_args_list[13])
Esempio n. 2
0
    def test_add_sub_resource(self):
        from pyramid_rest.resource import ResourceConfigurator, Resource

        dad = Resource('dad')
        kid = Resource('dad.kid')

        config = self._get_config()

        # kid is a sub resource:
        # Resource utility must defer processing until parent resource is added
        ru = ResourceConfigurator()
        ru._add(config, kid)

        self.assertEqual({'dad.kid': kid}, ru.deferred)

        ru._add(config, dad)
Esempio n. 3
0
    def test_add_sub_resource(self):
        from pyramid_rest.resource import ResourceConfigurator, Resource

        dad = Resource('dad')
        kid = Resource('dad.kid')

        config = self._get_config()

        # kid is a sub resource:
        # Resource utility must defer processing until parent resource is added
        ru = ResourceConfigurator()
        ru._add(config, kid)

        self.assertEqual({'dad.kid': kid}, ru.deferred)

        ru._add(config, dad)
Esempio n. 4
0
    def test_lineage_ids(self):
        from pyramid.config import Configurator
        from pyramid_rest.resource import Resource, ResourceConfigurator

        config = Configurator(settings={})
        ru = ResourceConfigurator()

        dad = Resource('dad')
        kid = Resource('dad.kid')
        grandchild = Resource('dad.kid.grandchild')

        ru._add(config, dad)
        ru._add(config, kid)
        ru._add(config, grandchild)

        self.assertEqual(['dad_id'], dad.lineage_ids)
        self.assertEqual(['dad_id', 'kid_id'], kid.lineage_ids)
        self.assertEqual(['dad_id', 'kid_id', 'grandchild_id'], grandchild.lineage_ids)

        self.assertEqual(['id'], dad.ids)
        self.assertEqual(['dad_id', 'id'], kid.ids)
        self.assertEqual(['dad_id', 'kid_id', 'id'], grandchild.ids)
Esempio n. 5
0
    def test_lineage_ids(self):
        from pyramid.config import Configurator
        from pyramid_rest.resource import Resource, ResourceConfigurator

        config = Configurator(settings={})
        ru = ResourceConfigurator()

        dad = Resource('dad')
        kid = Resource('dad.kid')
        grandchild = Resource('dad.kid.grandchild')

        ru._add(config, dad)
        ru._add(config, kid)
        ru._add(config, grandchild)

        self.assertEqual(['dad_id'], dad.lineage_ids)
        self.assertEqual(['dad_id', 'kid_id'], kid.lineage_ids)
        self.assertEqual(['dad_id', 'kid_id', 'grandchild_id'],
                         grandchild.lineage_ids)

        self.assertEqual(['id'], dad.ids)
        self.assertEqual(['dad_id', 'id'], kid.ids)
        self.assertEqual(['dad_id', 'kid_id', 'id'], grandchild.ids)
Esempio n. 6
0
    def test_wrong_parent_id_names(self):
        from pyramid_rest.resource import Resource, ResourceConfigurator

        config = self._get_config()
        ru = ResourceConfigurator()

        # add parents:
        ru._add(config, Resource('application'))
        ru._add(config, Resource('application.user'))

        res = Resource('application.user.message')
        # decorate view function
        res.show()(wrong_ids_show)

        with self.assertRaises(TypeError):
            # simulate venusian callback
            ru._add(config, res)
Esempio n. 7
0
    def test_add_resources_route(self, m_functools):
        from pyramid_rest.resource import ResourceConfigurator, Resource

        kid = Resource('dad.kid')
        dad = Resource('dad')

        config = self._get_config()

        ru = ResourceConfigurator()

        ru._add(config, dad)

        self.assertEqual({'dad': dad}, ru.resources)
        self.assertEqual({'dad': dad}, ru.parent_resources)

        self.assertEqual(
            mock.call(
                pattern='/dads/new',
                name='dad_new',
                factory=m_functools.partial.return_value,
            ), config.add_route.call_args_list[0])
        self.assertEqual(
            mock.call(
                pattern='/dads/{id}',
                name='dad_item',
                factory=m_functools.partial.return_value,
            ), config.add_route.call_args_list[1])
        self.assertEqual(
            mock.call(
                pattern='/dads/{id}/edit',
                name='dad_edit',
                factory=m_functools.partial.return_value,
            ), config.add_route.call_args_list[2])
        self.assertEqual(
            mock.call(
                pattern='/dads',
                name='dad_collection',
                factory=m_functools.partial.return_value,
            ), config.add_route.call_args_list[3])
        ru._add(config, kid)
        self.assertEqual({'dad': dad, 'dad.kid': kid}, ru.resources)
        self.assertEqual({'dad': dad}, ru.parent_resources)

        self.assertEqual(
            mock.call(
                pattern='/dads/{dad_id}/kids/new',
                name='dad.kid_new',
                factory=m_functools.partial.return_value,
            ), config.add_route.call_args_list[4])
        self.assertEqual(
            mock.call(
                pattern='/dads/{dad_id}/kids/{id}',
                name='dad.kid_item',
                factory=m_functools.partial.return_value,
            ), config.add_route.call_args_list[5])
        self.assertEqual(
            mock.call(
                pattern='/dads/{dad_id}/kids/{id}/edit',
                name='dad.kid_edit',
                factory=m_functools.partial.return_value,
            ), config.add_route.call_args_list[6])
        self.assertEqual(
            mock.call(
                pattern='/dads/{dad_id}/kids',
                name='dad.kid_collection',
                factory=m_functools.partial.return_value,
            ), config.add_route.call_args_list[7])
Esempio n. 8
0
    def test_add_resources_add_views(self):
        from pyramid_rest.resource import (
            ResourceConfigurator,
            Resource,
            not_allowed_view,
        )

        dad_index = mock.Mock(spec=not_allowed_view)
        dad_show = mock.Mock(spec=not_allowed_view)

        kid_index = mock.Mock(spec=not_allowed_view)
        kid_show = mock.Mock(spec=not_allowed_view)

        kid = Resource('dad.kid')
        dad = Resource('dad')

        config = self._get_config()

        ru = ResourceConfigurator()
        ru._validate_views_args_name = lambda a: a

        # simulate decorating methods:
        dad.index()(dad_index)
        dad.show()(dad_show)
        kid.index()(kid_index)
        kid.show()(kid_show)

        ru._add(config, dad)
        ru._add(config, kid)

        self.assertEqual(14, config.add_view.call_count)

        # check dad views:

        self._check_add_view(dad_index, 'index', 'GET', 'dad_collection',
                             config.add_view.call_args_list[0])
        self._check_add_view(dad_show, 'show', 'GET', 'dad_item',
                             config.add_view.call_args_list[1])

        self._check_add_not_allowed(not_allowed_view, 'edit', 'GET',
                                    'dad_edit',
                                    config.add_view.call_args_list[2])
        self._check_add_not_allowed(not_allowed_view, 'new', 'GET', 'dad_new',
                                    config.add_view.call_args_list[3])
        self._check_add_not_allowed(not_allowed_view, 'create', 'POST',
                                    'dad_collection',
                                    config.add_view.call_args_list[4])
        self._check_add_not_allowed(not_allowed_view, 'update', 'PUT',
                                    'dad_item',
                                    config.add_view.call_args_list[5])
        self._check_add_not_allowed(not_allowed_view, 'delete', 'DELETE',
                                    'dad_item',
                                    config.add_view.call_args_list[6])

        # check kid views:

        self._check_add_view(kid_index, 'index', 'GET', 'dad.kid_collection',
                             config.add_view.call_args_list[7])
        self._check_add_view(kid_show, 'show', 'GET', 'dad.kid_item',
                             config.add_view.call_args_list[8])

        self._check_add_not_allowed(not_allowed_view, 'edit', 'GET',
                                    'dad.kid_edit',
                                    config.add_view.call_args_list[9])
        self._check_add_not_allowed(not_allowed_view, 'new', 'GET',
                                    'dad.kid_new',
                                    config.add_view.call_args_list[10])
        self._check_add_not_allowed(not_allowed_view, 'create', 'POST',
                                    'dad.kid_collection',
                                    config.add_view.call_args_list[11])
        self._check_add_not_allowed(not_allowed_view, 'update', 'PUT',
                                    'dad.kid_item',
                                    config.add_view.call_args_list[12])
        self._check_add_not_allowed(not_allowed_view, 'delete', 'DELETE',
                                    'dad.kid_item',
                                    config.add_view.call_args_list[13])
Esempio n. 9
0
    def test_add_resources_route(self, m_functools):
        from pyramid_rest.resource import ResourceConfigurator, Resource

        kid = Resource('dad.kid')
        dad = Resource('dad')

        config = self._get_config()

        ru = ResourceConfigurator()

        ru._add(config, dad)

        self.assertEqual({'dad': dad}, ru.resources)
        self.assertEqual({'dad': dad}, ru.parent_resources)

        self.assertEqual(
            mock.call(
                pattern='/dads/new',
                name='dad_new',
                factory=m_functools.partial.return_value,
                ),
            config.add_route.call_args_list[0]
            )
        self.assertEqual(
            mock.call(
                pattern='/dads/{id}',
                name='dad_item',
                factory=m_functools.partial.return_value,
                ),
            config.add_route.call_args_list[1]
            )
        self.assertEqual(
            mock.call(
                pattern='/dads/{id}/edit',
                name='dad_edit',
                factory=m_functools.partial.return_value,
                ),
            config.add_route.call_args_list[2]
            )
        self.assertEqual(
            mock.call(
                pattern='/dads',
                name='dad_collection',
                factory=m_functools.partial.return_value,
                ),
            config.add_route.call_args_list[3]
            )
        ru._add(config, kid)
        self.assertEqual({'dad': dad, 'dad.kid': kid}, ru.resources)
        self.assertEqual({'dad': dad}, ru.parent_resources)

        self.assertEqual(
            mock.call(
                pattern='/dads/{dad_id}/kids/new',
                name='dad.kid_new',
                factory=m_functools.partial.return_value,
                ),
            config.add_route.call_args_list[4]
            )
        self.assertEqual(
            mock.call(
                pattern='/dads/{dad_id}/kids/{id}',
                name='dad.kid_item',
                factory=m_functools.partial.return_value,
                ),
            config.add_route.call_args_list[5]
            )
        self.assertEqual(
            mock.call(
                pattern='/dads/{dad_id}/kids/{id}/edit',
                name='dad.kid_edit',
                factory=m_functools.partial.return_value,
                ),
            config.add_route.call_args_list[6]
            )
        self.assertEqual(
            mock.call(
                pattern='/dads/{dad_id}/kids',
                name='dad.kid_collection',
                factory=m_functools.partial.return_value,
                ),
            config.add_route.call_args_list[7]
            )