Ejemplo n.º 1
0
    def test_deploy_ignore_version_default(self, mock_import, check_version, get_remote, get_sha, is_repo):

        config = load_config(
            remote_branch='test',
        )
        gh_deploy.gh_deploy(config)
        self.assert_mock_called_once(check_version)
Ejemplo n.º 2
0
 def test_context_base_url_nested_page(self):
     nav_cfg = [
         {
             'Home': 'index.md'
         },
         {
             'Nested': 'foo/bar.md'
         },
     ]
     cfg = load_config(nav=nav_cfg, use_directory_urls=False)
     files = Files([
         File(
             'index.md',
             cfg['docs_dir'],
             cfg['site_dir'],
             cfg['use_directory_urls'],
         ),
         File(
             'foo/bar.md',
             cfg['docs_dir'],
             cfg['site_dir'],
             cfg['use_directory_urls'],
         ),
     ])
     nav = get_navigation(files, cfg)
     context = build.get_context(nav, files, cfg, nav.pages[1])
     self.assertEqual(context['base_url'], '..')
Ejemplo n.º 3
0
 def test_build_page_dirty_not_modified(self, site_dir, mock_write_file):
     cfg = load_config(site_dir=site_dir, nav=['testing.md'], plugins=[])
     files = Files([
         File(
             'testing.md',
             cfg['docs_dir'],
             cfg['site_dir'],
             cfg['use_directory_urls'],
         ),
     ])
     nav = get_navigation(files, cfg)
     page = files.documentation_pages()[0].page
     # Fake populate page
     page.title = 'Title'
     page.source = 'page content'
     page.content = '<p>page content</p>'
     build._build_page(
         page,
         cfg,
         files,
         nav,
         cfg['theme'].get_env(),
         dirty=True,
     )
     self.assert_mock_called_once(mock_write_file)
Ejemplo n.º 4
0
 def test_build_page_error(self, site_dir, mock_write_file):
     cfg = load_config(site_dir=site_dir, nav=['index.md'], plugins=[])
     files = Files([
         File(
             'index.md',
             cfg['docs_dir'],
             cfg['site_dir'],
             cfg['use_directory_urls'],
         ),
     ])
     nav = get_navigation(files, cfg)
     page = files.documentation_pages()[0].page
     # Fake populate page
     page.title = 'Title'
     page.source = 'page content'
     page.content = '<p>page content</p>'
     with self.assertLogs('mkdocs', level='ERROR') as cm:
         self.assertRaises(
             OSError,
             build._build_page,
             page,
             cfg,
             files,
             nav,
             cfg['theme'].get_env(),
         )
     self.assertEqual(
         cm.output,
         [
             "ERROR:mkdocs.commands.build:Error building page 'index.md': Error message."
         ],
     )
     self.assert_mock_called_once(mock_write_file)
Ejemplo n.º 5
0
 def test_get_files_exclude_readme_with_index(self, tdir):
     config = load_config(docs_dir=tdir)
     files = get_files(config)
     expected = ['index.md', 'foo.md']
     self.assertIsInstance(files, Files)
     self.assertEqual(len(files), len(expected))
     self.assertEqual([f.src_path for f in files], expected)
Ejemplo n.º 6
0
 def test_populate_page_read_error(self, docs_dir, mock_open):
     cfg = load_config(docs_dir=docs_dir)
     file = File(
         'missing.md',
         cfg['docs_dir'],
         cfg['site_dir'],
         cfg['use_directory_urls'],
     )
     page = Page('Foo', file, cfg)
     with self.assertLogs('mkdocs', level='ERROR') as cm:
         self.assertRaises(
             OSError,
             build._populate_page,
             page,
             cfg,
             Files([file]),
         )
     self.assertEqual(
         cm.output,
         [
             'ERROR:mkdocs.structure.pages:File not found: missing.md',
             "ERROR:mkdocs.commands.build:Error reading page 'missing.md': Error message.",
         ],
     )
     self.assert_mock_called_once(mock_open)
Ejemplo n.º 7
0
 def test_nested_ungrouped_nav(self):
     nav_cfg = [
         {
             'Home': 'index.md'
         },
         {
             'Contact': 'about/contact.md'
         },
         {
             'License Title': 'about/sub/license.md'
         },
     ]
     expected = dedent("""
     Page(title='Home', url='/')
     Page(title='Contact', url='/about/contact/')
     Page(title='License Title', url='/about/sub/license/')
     """)
     cfg = load_config(nav=nav_cfg, site_url='http://example.com/')
     files = Files([
         File(
             list(item.values())[0], cfg['docs_dir'], cfg['site_dir'],
             cfg['use_directory_urls']) for item in nav_cfg
     ])
     site_navigation = get_navigation(files, cfg)
     self.assertEqual(str(site_navigation).strip(), expected)
     self.assertEqual(len(site_navigation.items), 3)
     self.assertEqual(len(site_navigation.pages), 3)
Ejemplo n.º 8
0
 def test_nav_bad_links(self):
     nav_cfg = [{
         'Home': 'index.md'
     }, {
         'Missing': 'missing.html'
     }, {
         'Bad External': 'example.com'
     }]
     expected = dedent("""
     Page(title='Home', url='/')
     Link(title='Missing', url='missing.html')
     Link(title='Bad External', url='example.com')
     """)
     cfg = load_config(nav=nav_cfg, site_url='http://example.com/')
     files = Files([
         File('index.md', cfg['docs_dir'], cfg['site_dir'],
              cfg['use_directory_urls'])
     ])
     with self.assertLogs('mkdocs', level='WARNING') as cm:
         site_navigation = get_navigation(files, cfg)
     self.assertEqual(cm.output, [
         "WARNING:mkdocs.structure.nav:A relative path to 'missing.html' is included "
         "in the 'nav' configuration, which is not found in the documentation files",
         "WARNING:mkdocs.structure.nav:A relative path to 'example.com' is included "
         "in the 'nav' configuration, which is not found in the documentation files"
     ])
     self.assertEqual(str(site_navigation).strip(), expected)
     self.assertEqual(len(site_navigation.items), 3)
     self.assertEqual(len(site_navigation.pages), 1)
Ejemplo n.º 9
0
 def test_nav_external_links(self):
     nav_cfg = [{
         'Home': 'index.md'
     }, {
         'Local': '/local.html'
     }, {
         'External': 'http://example.com/external.html'
     }]
     expected = dedent("""
     Page(title='Home', url='/')
     Link(title='Local', url='/local.html')
     Link(title='External', url='http://example.com/external.html')
     """)
     cfg = load_config(nav=nav_cfg, site_url='http://example.com/')
     files = Files([
         File('index.md', cfg['docs_dir'], cfg['site_dir'],
              cfg['use_directory_urls'])
     ])
     with self.assertLogs('mkdocs', level='DEBUG') as cm:
         site_navigation = get_navigation(files, cfg)
     self.assertEqual(cm.output, [
         "DEBUG:mkdocs.structure.nav:An absolute path to '/local.html' is included in the "
         "'nav' configuration, which presumably points to an external resource.",
         "DEBUG:mkdocs.structure.nav:An external link to 'http://example.com/external.html' "
         "is included in the 'nav' configuration."
     ])
     self.assertEqual(str(site_navigation).strip(), expected)
     self.assertEqual(len(site_navigation.items), 3)
     self.assertEqual(len(site_navigation.pages), 1)
Ejemplo n.º 10
0
 def test_homepage(self):
     cfg = load_config(docs_dir=self.DOCS_DIR)
     fl = File('index.md', cfg['docs_dir'], cfg['site_dir'],
               cfg['use_directory_urls'])
     self.assertIsNone(fl.page)
     pg = Page('Foo', fl, cfg)
     self.assertEqual(fl.page, pg)
     self.assertEqual(pg.url, '')
     self.assertEqual(pg.abs_url, None)
     self.assertEqual(pg.canonical_url, None)
     self.assertEqual(pg.edit_url, None)
     self.assertEqual(pg.file, fl)
     self.assertEqual(pg.content, None)
     self.assertTrue(pg.is_homepage)
     self.assertTrue(pg.is_index)
     self.assertTrue(pg.is_page)
     self.assertFalse(pg.is_section)
     self.assertTrue(pg.is_top_level)
     self.assertEqual(pg.source, None)
     self.assertEqual(pg.meta, {})
     self.assertEqual(pg.next_page, None)
     self.assertEqual(pg.parent, None)
     self.assertEqual(pg.previous_page, None)
     self.assertEqual(pg.title, 'Foo')
     self.assertEqual(pg.toc, [])
Ejemplo n.º 11
0
 def test_context_extra_css_js_from_nested_page_use_directory_urls(self):
     nav_cfg = [
         {
             'Home': 'index.md'
         },
         {
             'Nested': 'foo/bar.md'
         },
     ]
     cfg = load_config(
         nav=nav_cfg,
         extra_css=['style.css'],
         extra_javascript=['script.js'],
     )
     files = Files([
         File(
             'index.md',
             cfg['docs_dir'],
             cfg['site_dir'],
             cfg['use_directory_urls'],
         ),
         File(
             'foo/bar.md',
             cfg['docs_dir'],
             cfg['site_dir'],
             cfg['use_directory_urls'],
         ),
     ])
     nav = get_navigation(files, cfg)
     context = build.get_context(nav, files, cfg, nav.pages[1])
     self.assertEqual(context['extra_css'], ['../../style.css'])
     self.assertEqual(context['extra_javascript'], ['../../script.js'])
Ejemplo n.º 12
0
    def test_deploy_ignore_version(self, mock_import, check_version, get_remote, get_sha, is_repo):

        config = load_config(
            remote_branch='test',
        )
        gh_deploy.gh_deploy(config, ignore_version=True)
        check_version.assert_not_called()
Ejemplo n.º 13
0
    def test_deploy_no_cname(
        self, mock_isfile, mock_import, check_version, get_remote,
        get_sha, is_repo,
    ):

        config = load_config(
            remote_branch='test',
        )
        gh_deploy.gh_deploy(config)
Ejemplo n.º 14
0
 def test_context_base_url_relative_no_page_use_directory_urls(self):
     cfg = load_config()
     context = build.get_context(
         mock.Mock(),
         mock.Mock(),
         cfg,
         base_url='..',
     )
     self.assertEqual(context['base_url'], '..')
Ejemplo n.º 15
0
 def test_event_on_post_build_multi_lang(self, mock_copy_file,
                                         mock_write_file):
     plugin = search.SearchPlugin()
     plugin.load_config({'lang': ['es', 'fr']})
     config = load_config(theme='mkdocs')
     plugin.on_pre_build(config)
     plugin.on_post_build(config)
     self.assertEqual(mock_copy_file.call_count, 4)
     self.assertEqual(mock_write_file.call_count, 1)
Ejemplo n.º 16
0
 def test_get_by_type_nested_sections(self):
     nav_cfg = [{'Section 1': [{'Section 2': [{'Page': 'page.md'}]}]}]
     cfg = load_config(nav=nav_cfg, site_url='http://example.com/')
     files = Files([
         File('page.md', cfg['docs_dir'], cfg['site_dir'],
              cfg['use_directory_urls'])
     ])
     site_navigation = get_navigation(files, cfg)
     self.assertEqual(len(_get_by_type(site_navigation, Section)), 2)
Ejemplo n.º 17
0
 def test_event_on_post_build_defaults(self, mock_copy_file,
                                       mock_write_file):
     plugin = search.SearchPlugin()
     plugin.load_config({})
     config = load_config(theme='mkdocs')
     plugin.on_pre_build(config)
     plugin.on_post_build(config)
     self.assertEqual(mock_copy_file.call_count, 0)
     self.assertEqual(mock_write_file.call_count, 1)
Ejemplo n.º 18
0
 def test_context_base_url_absolute_nested_no_page(self):
     cfg = load_config(use_directory_urls=False)
     context = build.get_context(
         mock.Mock(),
         mock.Mock(),
         cfg,
         base_url='/foo/',
     )
     self.assertEqual(context['base_url'], '/foo/')
Ejemplo n.º 19
0
    def test_create_media_urls_use_directory_urls(self):

        expected_results = {
            'https://media.cdn.org/jq.js': [
                'https://media.cdn.org/jq.js', 'https://media.cdn.org/jq.js',
                'https://media.cdn.org/jq.js'
            ],
            'http://media.cdn.org/jquery.js': [
                'http://media.cdn.org/jquery.js',
                'http://media.cdn.org/jquery.js',
                'http://media.cdn.org/jquery.js'
            ],
            '//media.cdn.org/jquery.js': [
                '//media.cdn.org/jquery.js', '//media.cdn.org/jquery.js',
                '//media.cdn.org/jquery.js'
            ],
            'media.cdn.org/jquery.js': [
                'media.cdn.org/jquery.js', '../media.cdn.org/jquery.js',
                '../../media.cdn.org/jquery.js'
            ],
            'local/file/jquery.js': [
                'local/file/jquery.js', '../local/file/jquery.js',
                '../../local/file/jquery.js'
            ],
            'local\\windows\\file\\jquery.js': [
                'local/windows/file/jquery.js',
                '../local/windows/file/jquery.js',
                '../../local/windows/file/jquery.js'
            ],
            'image.png': ['image.png', '../image.png', '../../image.png'],
            'style.css?v=20180308c': [
                'style.css?v=20180308c', '../style.css?v=20180308c',
                '../../style.css?v=20180308c'
            ],
            '#some_id': ['#some_id', '#some_id', '#some_id']
        }

        cfg = load_config(use_directory_urls=True)
        pages = [
            Page(
                'Home',
                File('index.md', cfg['docs_dir'], cfg['site_dir'],
                     cfg['use_directory_urls']), cfg),
            Page(
                'About',
                File('about.md', cfg['docs_dir'], cfg['site_dir'],
                     cfg['use_directory_urls']), cfg),
            Page(
                'FooBar',
                File('foo/bar.md', cfg['docs_dir'], cfg['site_dir'],
                     cfg['use_directory_urls']), cfg)
        ]

        for i, page in enumerate(pages):
            urls = utils.create_media_urls(expected_results.keys(), page)
            self.assertEqual([v[i] for v in expected_results.values()], urls)
Ejemplo n.º 20
0
 def get_rendered_result(self, files):
     cfg = load_config(docs_dir=self.DOCS_DIR)
     fs = []
     for f in files:
         fs.append(
             File(f.replace('/', os.sep), cfg['docs_dir'], cfg['site_dir'],
                  cfg['use_directory_urls']))
     pg = Page('Foo', fs[0], cfg)
     pg.read_source(cfg)
     pg.render(cfg, Files(fs))
     return pg.content
Ejemplo n.º 21
0
 def test_page_ne(self):
     cfg = load_config()
     f1 = File('testing.md', cfg['docs_dir'], cfg['site_dir'],
               cfg['use_directory_urls'])
     f2 = File('index.md', cfg['docs_dir'], cfg['site_dir'],
               cfg['use_directory_urls'])
     pg = Page('Foo', f1, cfg)
     # Different Title
     self.assertTrue(pg != Page('Bar', f1, cfg))
     # Different File
     self.assertTrue(pg != Page('Foo', f2, cfg))
Ejemplo n.º 22
0
 def test_build_extra_template(self):
     cfg = load_config()
     files = Files([
         File(
             'foo.html',
             cfg['docs_dir'],
             cfg['site_dir'],
             cfg['use_directory_urls'],
         ),
     ])
     build._build_extra_template('foo.html', files, cfg, mock.Mock())
Ejemplo n.º 23
0
 def test_populate_page(self, docs_dir):
     cfg = load_config(docs_dir=docs_dir)
     file = File(
         'index.md',
         cfg['docs_dir'],
         cfg['site_dir'],
         cfg['use_directory_urls'],
     )
     page = Page('Foo', file, cfg)
     build._populate_page(page, cfg, Files([file]))
     self.assertEqual(page.content, '<p>page content</p>')
Ejemplo n.º 24
0
 def test_get_files(self, tdir):
     config = load_config(docs_dir=tdir,
                          extra_css=['bar.css'],
                          extra_javascript=['bar.js'])
     files = get_files(config)
     expected = [
         'index.md', 'bar.css', 'bar.html', 'bar.jpg', 'bar.js', 'bar.md'
     ]
     self.assertIsInstance(files, Files)
     self.assertEqual(len(files), len(expected))
     self.assertEqual([f.src_path for f in files], expected)
Ejemplo n.º 25
0
    def test_copying_media(self, site_dir, docs_dir):
        cfg = load_config(docs_dir=docs_dir, site_dir=site_dir)
        build.build(cfg)

        # Verify that only non-empty md file (coverted to html), static HTML file and image are copied.
        self.assertPathIsFile(site_dir, 'index.html')
        self.assertPathIsFile(site_dir, 'img.jpg')
        self.assertPathIsFile(site_dir, 'static.html')
        self.assertPathNotExists(site_dir, 'empty.md')
        self.assertPathNotExists(site_dir, '.hidden')
        self.assertPathNotExists(site_dir, '.git/hidden')
Ejemplo n.º 26
0
 def test_event_on_post_build_search_index_only(self, mock_copy_file,
                                                mock_write_file):
     plugin = search.SearchPlugin()
     plugin.load_config({'lang': ['es']})
     config = load_config(theme={
         'name': 'mkdocs',
         'search_index_only': True
     }, )
     plugin.on_pre_build(config)
     plugin.on_post_build(config)
     self.assertEqual(mock_copy_file.call_count, 0)
     self.assertEqual(mock_write_file.call_count, 1)
Ejemplo n.º 27
0
 def test_build_theme_template(self, mock_build_template, mock_write_file):
     cfg = load_config()
     env = cfg['theme'].get_env()
     build._build_theme_template(
         'main.html',
         env,
         mock.Mock(),
         cfg,
         mock.Mock(),
     )
     self.assert_mock_called_once(mock_write_file)
     self.assert_mock_called_once(mock_build_template)
Ejemplo n.º 28
0
    def test_deploy_error(self, mock_log, mock_import, check_version, get_sha, is_repo):
        error_string = 'TestError123'
        mock_import.side_effect = GhpError(error_string)

        config = load_config(
            remote_branch='test',
        )

        self.assertRaises(SystemExit, gh_deploy.gh_deploy, config)
        mock_log.error.assert_called_once_with(
            'Failed to deploy to GitHub with error: \n{}'.format(error_string),
        )
Ejemplo n.º 29
0
 def test_context_extra_css_js_no_page(self):
     cfg = load_config(
         extra_css=['style.css'],
         extra_javascript=['script.js'],
     )
     context = build.get_context(
         mock.Mock(),
         mock.Mock(),
         cfg,
         base_url='..',
     )
     self.assertEqual(context['extra_css'], ['../style.css'])
     self.assertEqual(context['extra_javascript'], ['../script.js'])
Ejemplo n.º 30
0
 def test_populate_page_dirty_not_modified(self, site_dir, docs_dir):
     cfg = load_config(docs_dir=docs_dir, site_dir=site_dir)
     file = File(
         'index.md',
         cfg['docs_dir'],
         cfg['site_dir'],
         cfg['use_directory_urls'],
     )
     page = Page('Foo', file, cfg)
     build._populate_page(page, cfg, Files([file]), dirty=True)
     # Content is empty as file read was skipped
     self.assertEqual(page.source, None)
     self.assertEqual(page.content, None)