def test_get_source(self, fs_loader):
        ppl = PackagePathLoader()
        ppl.init_paths = mock.Mock()
        fs_loader().get_source.return_value = "fs_load"

        # override exists
        output = ppl.get_source("env", "allura.ext.admin:templates/audit.html")

        assert_equal(output, "fs_load")
        fs_loader().get_source.assert_called_once_with("env", "override/allura/ext/admin/templates/audit.html")

        fs_loader().get_source.reset_mock()
        fs_loader().get_source.side_effect = [jinja2.TemplateNotFound("test"), "fs_load"]

        with mock.patch("pkg_resources.resource_filename") as rf:
            rf.return_value = "resource"
            # no override, ':' in template
            output = ppl.get_source("env", "allura.ext.admin:templates/audit.html")
            rf.assert_called_once_with("allura.ext.admin", "templates/audit.html")

        assert_equal(output, "fs_load")
        assert_equal(fs_loader().get_source.call_count, 2)
        fs_loader().get_source.assert_called_with("env", "resource")

        fs_loader().get_source.reset_mock()
        fs_loader().get_source.side_effect = [jinja2.TemplateNotFound("test"), "fs_load"]

        # no override, ':' not in template
        output = ppl.get_source("env", "templates/audit.html")

        assert_equal(output, "fs_load")
        assert_equal(fs_loader().get_source.call_count, 2)
        fs_loader().get_source.assert_called_with("env", "templates/audit.html")
    def test_fs_loader(self, FileSystemLoader):
        ppl = PackagePathLoader()
        ppl.init_paths = mock.Mock(return_value=["path1", "path2"])
        FileSystemLoader.return_value = "fs_loader"

        output1 = ppl.fs_loader
        output2 = ppl.fs_loader

        ppl.init_paths.assert_called_once_with()
        FileSystemLoader.assert_called_once_with(["path1", "path2"])
        assert_equal(output1, "fs_loader")
        assert output1 is output2
    def test_fs_loader(self, FileSystemLoader):
        ppl = PackagePathLoader()
        ppl.init_paths = mock.Mock(return_value=['path1', 'path2'])
        FileSystemLoader.return_value = 'fs_loader'

        output1 = ppl.fs_loader
        output2 = ppl.fs_loader

        ppl.init_paths.assert_called_once_with()
        FileSystemLoader.assert_called_once_with(['path1', 'path2'])
        assert_equal(output1, 'fs_loader')
        assert output1 is output2
    def test_fs_loader(self, FileSystemLoader):
        ppl = PackagePathLoader()
        ppl.init_paths = mock.Mock(return_value=['path1', 'path2'])
        FileSystemLoader.return_value = 'fs_loader'

        output1 = ppl.fs_loader
        output2 = ppl.fs_loader

        ppl.init_paths.assert_called_once_with()
        FileSystemLoader.assert_called_once_with(['path1', 'path2'])
        assert_equal(output1, 'fs_loader')
        assert output1 is output2
    def test_override_disable(self, fs_loader):
        ppl = PackagePathLoader()
        ppl.init_paths = mock.Mock()
        fs_loader().get_source.side_effect = jinja2.TemplateNotFound('test')

        assert_raises(jinja2.TemplateError, ppl.get_source, 'env',
                      'allura.ext.admin:templates/audit.html')
        assert_equal(fs_loader().get_source.call_count, 1)
        fs_loader().get_source.reset_mock()

        with mock.patch.dict(config, {'disable_template_overrides': False}):
            assert_raises(jinja2.TemplateError, ppl.get_source, 'env',
                          'allura.ext.admin:templates/audit.html')
            assert_equal(fs_loader().get_source.call_count, 2)
    def test_init_paths(self):
        paths = [["root", "/"], ["none", None], ["tail", "/tail"]]
        ppl = PackagePathLoader()
        ppl._load_paths = mock.Mock(return_value=paths)
        ppl._load_rules = mock.Mock(return_value=("order_rules", "repl_rules"))
        ppl._replace_signposts = mock.Mock()
        ppl._sort_paths = mock.Mock()

        output = ppl.init_paths()

        ppl._load_paths.assert_called_once_with()
        ppl._load_rules.assert_called_once_with()
        ppl._sort_paths.assert_called_once_with(paths, "order_rules")
        ppl._replace_signposts.assert_called_once_with(paths, "repl_rules")

        assert_equal(output, ["/", "/tail"])
    def test_override_disable(self, fs_loader):
        ppl = PackagePathLoader()
        ppl.init_paths = mock.Mock()
        fs_loader().get_source.side_effect = jinja2.TemplateNotFound('test')

        assert_raises(
            jinja2.TemplateError,
            ppl.get_source, 'env', 'allura.ext.admin:templates/audit.html')
        assert_equal(fs_loader().get_source.call_count, 1)
        fs_loader().get_source.reset_mock()

        with mock.patch.dict(config, {'disable_template_overrides': False}):
            assert_raises(
                jinja2.TemplateError,
                ppl.get_source, 'env', 'allura.ext.admin:templates/audit.html')
            assert_equal(fs_loader().get_source.call_count, 2)
    def test_init_paths(self):
        paths = [
            ['root', '/'],
            ['none', None],
            ['tail', '/tail'],
        ]
        ppl = PackagePathLoader()
        ppl._load_paths = mock.Mock(return_value=paths)
        ppl._load_rules = mock.Mock(return_value=('order_rules', 'repl_rules'))
        ppl._replace_signposts = mock.Mock()
        ppl._sort_paths = mock.Mock()

        output = ppl.init_paths()

        ppl._load_paths.assert_called_once_with()
        ppl._load_rules.assert_called_once_with()
        ppl._sort_paths.assert_called_once_with(paths, 'order_rules')
        ppl._replace_signposts.assert_called_once_with(paths, 'repl_rules')

        assert_equal(output, ['/', '/tail'])
    def test_init_paths(self):
        paths = [
            ['root', '/'],
            ['none', None],
            ['tail', '/tail'],
        ]
        ppl = PackagePathLoader()
        ppl._load_paths = mock.Mock(return_value=paths)
        ppl._load_rules = mock.Mock(return_value=('order_rules', 'repl_rules'))
        ppl._replace_signposts = mock.Mock()
        ppl._sort_paths = mock.Mock()

        output = ppl.init_paths()

        ppl._load_paths.assert_called_once_with()
        ppl._load_rules.assert_called_once_with()
        ppl._sort_paths.assert_called_once_with(paths, 'order_rules')
        ppl._replace_signposts.assert_called_once_with(paths, 'repl_rules')

        assert_equal(output, ['/', '/tail'])
    def test_get_source(self, fs_loader):
        ppl = PackagePathLoader()
        ppl.init_paths = mock.Mock()
        fs_loader().get_source.return_value = 'fs_load'

        # override exists
        output = ppl.get_source('env', 'allura.ext.admin:templates/audit.html')

        assert_equal(output, 'fs_load')
        fs_loader().get_source.assert_called_once_with(
            'env', 'override/allura/ext/admin/templates/audit.html')

        fs_loader().get_source.reset_mock()
        fs_loader().get_source.side_effect = [
            jinja2.TemplateNotFound('test'), 'fs_load'
        ]

        with mock.patch('pkg_resources.resource_filename') as rf:
            rf.return_value = 'resource'
            # no override, ':' in template
            output = ppl.get_source('env',
                                    'allura.ext.admin:templates/audit.html')
            rf.assert_called_once_with('allura.ext.admin',
                                       'templates/audit.html')

        assert_equal(output, 'fs_load')
        assert_equal(fs_loader().get_source.call_count, 2)
        fs_loader().get_source.assert_called_with('env', 'resource')

        fs_loader().get_source.reset_mock()
        fs_loader().get_source.side_effect = [
            jinja2.TemplateNotFound('test'), 'fs_load'
        ]

        # no override, ':' not in template
        output = ppl.get_source('env', 'templates/audit.html')

        assert_equal(output, 'fs_load')
        assert_equal(fs_loader().get_source.call_count, 2)
        fs_loader().get_source.assert_called_with('env',
                                                  'templates/audit.html')
    def test_get_source(self, fs_loader):
        ppl = PackagePathLoader()
        ppl.init_paths = mock.Mock()
        fs_loader().get_source.return_value = 'fs_load'

        # override exists
        output = ppl.get_source('env', 'allura.ext.admin:templates/audit.html')

        assert_equal(output, 'fs_load')
        fs_loader().get_source.assert_called_once_with(
            'env', 'override/allura/ext/admin/templates/audit.html')

        fs_loader().get_source.reset_mock()
        fs_loader().get_source.side_effect = [
            jinja2.TemplateNotFound('test'), 'fs_load']

        with mock.patch('pkg_resources.resource_filename') as rf:
            rf.return_value = 'resource'
            # no override, ':' in template
            output = ppl.get_source(
                'env', 'allura.ext.admin:templates/audit.html')
            rf.assert_called_once_with(
                'allura.ext.admin', 'templates/audit.html')

        assert_equal(output, 'fs_load')
        assert_equal(fs_loader().get_source.call_count, 2)
        fs_loader().get_source.assert_called_with('env', 'resource')

        fs_loader().get_source.reset_mock()
        fs_loader().get_source.side_effect = [
            jinja2.TemplateNotFound('test'), 'fs_load']

        # no override, ':' not in template
        output = ppl.get_source('env', 'templates/audit.html')

        assert_equal(output, 'fs_load')
        assert_equal(fs_loader().get_source.call_count, 2)
        fs_loader().get_source.assert_called_with(
            'env', 'templates/audit.html')