Add tests for content parser
This commit is contained in:
parent
538685e5b2
commit
58e825c43b
3 changed files with 70 additions and 7 deletions
|
@ -19,7 +19,7 @@ def fix_references_title(content, config):
|
|||
return soup.prettify()
|
||||
|
||||
|
||||
def add_base_tag(doc, config):
|
||||
def make_images_relative(doc, config):
|
||||
logger.debug("Adding Base Tag...")
|
||||
soup = BeautifulSoup(doc, 'html.parser')
|
||||
for img in soup.findAll('img'):
|
||||
|
@ -32,6 +32,8 @@ def add_base_tag(doc, config):
|
|||
def add_body_class(doc, config):
|
||||
logger.debug("Adding Body Class...")
|
||||
soup = BeautifulSoup(doc, 'html.parser')
|
||||
if not soup.body:
|
||||
return doc
|
||||
soup.body['class'] = 'content'
|
||||
return soup.prettify()
|
||||
|
||||
|
@ -47,7 +49,7 @@ def parse_template(doc, config):
|
|||
parsed_doc = doc
|
||||
for parser in [
|
||||
fix_references_title,
|
||||
add_base_tag,
|
||||
make_images_relative,
|
||||
add_body_class,
|
||||
]:
|
||||
parsed_doc = parser(parsed_doc, config)
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import unittest
|
||||
import os
|
||||
from md_pdf.consts import TEMPLATES_DIR, STATIC_DIR
|
||||
from bs4 import BeautifulSoup
|
||||
|
||||
|
||||
class BaseTestCase(unittest.TestCase):
|
||||
|
@ -16,22 +17,25 @@ class BaseTestCase(unittest.TestCase):
|
|||
|
||||
}
|
||||
|
||||
def removeFile(self, file):
|
||||
def parse_html(self, html):
|
||||
return BeautifulSoup(html, 'html.parser')
|
||||
|
||||
def remove_file(self, file):
|
||||
try:
|
||||
os.remove(file)
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
def deleteTemplates(self):
|
||||
def delete_templates(self):
|
||||
for template in [
|
||||
'header.html',
|
||||
'footer.html',
|
||||
'cover.html',
|
||||
'toc.xsl',
|
||||
]:
|
||||
self.removeFile(os.path.join(TEMPLATES_DIR, template))
|
||||
self.remove_file(os.path.join(TEMPLATES_DIR, template))
|
||||
|
||||
def tearDown(self):
|
||||
self.deleteTemplates()
|
||||
self.removeFile(os.path.join(STATIC_DIR, 'style.css'))
|
||||
self.delete_templates()
|
||||
self.remove_file(os.path.join(STATIC_DIR, 'style.css'))
|
||||
|
||||
|
|
57
tests/test_parser.py
Normal file
57
tests/test_parser.py
Normal file
|
@ -0,0 +1,57 @@
|
|||
from tests import BaseTestCase
|
||||
from md_pdf.build import content
|
||||
import os
|
||||
|
||||
|
||||
class FixReferencesTitleTestCase(BaseTestCase):
|
||||
def test_adds_reference_title(self):
|
||||
html = '<div class="references"></div>'
|
||||
output = content.fix_references_title(html, self.BASE_VALID_CONFIG)
|
||||
self.assertIn('references-title', output)
|
||||
self.assertIn('References', output)
|
||||
|
||||
def test_doesnt_modify_if_no_references(self):
|
||||
html = 'test text'
|
||||
output = content.fix_references_title(html, self.BASE_VALID_CONFIG)
|
||||
self.assertNotIn('references-title', output)
|
||||
self.assertNotIn('References', output)
|
||||
|
||||
|
||||
class RelativeImageTestCase(BaseTestCase):
|
||||
def test_makes_image_relative(self):
|
||||
html = '<img src="test-files/test-image.png" />'
|
||||
output = self.parse_html(content.make_images_relative(html, self.BASE_VALID_CONFIG))
|
||||
self.assertEqual(output.find('img').attrs['src'], os.path.abspath('test-files/test-image.png'))
|
||||
|
||||
def test_leaves_remote_images(self):
|
||||
html = '<img src="http://example.com/image.png" />'
|
||||
output = self.parse_html(content.make_images_relative(html, self.BASE_VALID_CONFIG))
|
||||
self.assertEqual(output.find('img').attrs['src'], 'http://example.com/image.png')
|
||||
|
||||
|
||||
class AddBodyClassTestCase(BaseTestCase):
|
||||
def test_adds_class(self):
|
||||
html = '<body></body>'
|
||||
output = self.parse_html(content.add_body_class(html, self.BASE_VALID_CONFIG))
|
||||
self.assertEqual(output.body.attrs['class'], ['content'])
|
||||
|
||||
def test_doesnt_change(self):
|
||||
html = 'test content'
|
||||
output = content.add_body_class(html, self.BASE_VALID_CONFIG)
|
||||
self.assertEqual(output, html)
|
||||
|
||||
|
||||
class RenderTemplateTestCase(BaseTestCase):
|
||||
def test_renders_template(self):
|
||||
html = 'test {{ test }}'
|
||||
output = content.render_template(html, dict(self.BASE_VALID_CONFIG, **{
|
||||
'test': 'content'
|
||||
}))
|
||||
self.assertEqual(output, 'test content')
|
||||
|
||||
def test_changes_nothing(self):
|
||||
html = 'test test'
|
||||
output = content.render_template(html, dict(self.BASE_VALID_CONFIG, **{
|
||||
'test': 'content'
|
||||
}))
|
||||
self.assertEqual(output, html)
|
Reference in a new issue