"""Test disqus_shortname config value scenarios.""" import re import py import pytest from docutils.parsers.rst import directives, roles from sphinx import application, errors BASE_CONFIG = """\ import sys sys.path.append('{}') extensions = ['sphinxcontrib.disqus'] master_doc = 'index' nitpicky = True """ PARAMS = [ ("disqus_shortname = 'good'", ''), ('', 'disqus_shortname config value must be set for the disqus extension to work.'), ("disqus_shortname = ''", 'disqus_shortname config value must be set for the disqus extension to work.'), ("disqus_shortname = 'B@D'", 'disqus_shortname config value must be 3-50 letters, numbers, and hyphens only.'), ] @pytest.mark.parametrize('tail,expected_error', PARAMS) def test(monkeypatch, tmpdir, tail, expected_error): """Test valid and invalid values.""" tmpdir.join('conf.py').write(BASE_CONFIG.format(py.path.local(__file__).join('..', '..'))) tmpdir.join('conf.py').write(tail, mode='a') tmpdir.join('index.rst').write('====\nMain\n====\n\n.. toctree::\n :maxdepth: 2\n.. disqus::') monkeypatch.setattr(directives, '_directives', getattr(directives, '_directives').copy()) monkeypatch.setattr(roles, '_roles', getattr(roles, '_roles').copy()) srcdir = confdir = str(tmpdir) outdir = tmpdir.join('_build', 'html') doctreedir = outdir.join('doctrees').ensure(dir=True, rec=True) app = application.Sphinx(srcdir, confdir, str(outdir), str(doctreedir), 'html') if not expected_error: app.builder.build_all() html_body = outdir.join('index.html').read() disqus_div = re.findall(r'(<div[^>]+ id="disqus_thread"[^>]*></div>)', html_body)[0] assert 'data-disqus-shortname="good"' in disqus_div return with pytest.raises(errors.ExtensionError) as exc: app.builder.build_all() assert expected_error == exc.value.args[0]