コード例 #1
0
class TestRouteManagerJavascriptGeneration(openerp.tests.HttpCase):
    """Test the JavaScript generation powers of the RouteManager class!"""

    def setUp(self):
        super(TestRouteManagerJavascriptGeneration, self).setUp()

        # Create the RouteManager and feed it with some initial data
        self.objects_number = 5
        generated_route_list = _generate_route_objects(self.objects_number)
        self.route_manager = RouteManager()
        for r in generated_route_list:
            self.route_manager.add_route(r)

        # Check that the RouteManager has been properly created and fed
        self.assertEqual(len(self.route_manager.ROUTES), self.objects_number)
        for r in self.route_manager.ROUTES.values():
            self.assertIsInstance(r, Route)

        # Let's start (eventually!)
        self.name_of_template = 'template_test.js'
        self.path_to_template = get_module_path('nh_eobs_mobile') + '/tests/'
        self.all_route_list = self.route_manager.ROUTES.values()
        self.assertIsInstance(self.all_route_list, list)

    def test_jinja_templating_system(self):
        """Test that Jinja can perform simple string template rendering."""
        template = jinja2.Template("Crazy little thing called {{ thing }}")
        rendered_template = template.render(thing="Love")
        expected_string = "Crazy little thing called Love"
        self.assertEqual(
            rendered_template,
            expected_string,
            'Jinja is not working as expected.'
        )

    def test_get_javascript_routes_with_only_template_arguments(self):
        js_string = self.route_manager.get_javascript_routes(
            self.name_of_template,
            self.path_to_template
        )
        for r in self.all_route_list:
            self.assertIn(
                r.name,
                js_string,
                'Route object "{}" was not rendered in the template.'.format(
                    r.name
                )
            )

    def test_get_javascript_routes_passing_full_list_of_routes(self):
        r_list = self.all_route_list
        js_string = self.route_manager.get_javascript_routes(
            self.name_of_template,
            self.path_to_template,
            route_list=r_list
        )
        for r in r_list:
            self.assertIn(
                r.name,
                js_string,
                'Route object "{}" was not rendered in the template.'.format(
                    r.name
                )
            )

    def test_get_javascript_routes_passing_partial_list_of_routes(self):
        r_list = self.all_route_list[2:self.objects_number]
        self.assertLess(len(r_list), len(self.all_route_list))
        js_string = self.route_manager.get_javascript_routes(
            self.name_of_template,
            self.path_to_template,
            route_list=r_list
        )
        for r in r_list:
            self.assertIn(
                r.name,
                js_string,
                'Route object "{}" was not rendered in the template.'.format(
                    r.name
                )
            )

    def test_get_javascript_routes_passing_additional_context(self):
        add_ctx = {'foo': 'BAR'}
        js_string = self.route_manager.get_javascript_routes(
            self.name_of_template,
            self.path_to_template,
            additional_context=add_ctx
        )
        for k in add_ctx:
            self.assertIn(
                add_ctx[k],
                js_string,
                'The key "{}" of the additional context was not '
                'rendered in the template'.format(k)
            )

    def test_get_javascript_routes_passing_wrong_template_name(self):
        with self.assertRaises(jinja2.exceptions.TemplateNotFound):
            self.route_manager.get_javascript_routes(
                'fake_template.js',
                self.path_to_template
            )

    def test_injection_of_javascript_generated_from_rendered_template(self):
        route_name_list = [r.name for r in self.all_route_list]
        javascript_code = self.route_manager.get_javascript_routes(
            'template_script_test.js',
            self.path_to_template,
            additional_context={'route_name_list': route_name_list})
        # the actual test and assertions are inside the injected
        # Javascript code!
        self.phantom_js('/', javascript_code)

    def test_get_javascript_routes_passing_two_url_prefixes(self):
        diffr_prefix_route = Route(
            'prefix',
            '/prefix/',
            url_prefix='/test/url/'
        )
        self.route_manager.add_route(diffr_prefix_route)
        r_list = self.all_route_list
        js_string = self.route_manager.get_javascript_routes(
            self.name_of_template,
            self.path_to_template, route_list=r_list
        )
        # need to make sure url prefix is done properly
        for r in r_list:
            self.assertIn(
                r.name,
                js_string,
                'Route object "{}" was not rendered in the template.'.format(
                    r.name
                )
            )