def test_do_not_use_folder_as_category(self): settings = get_settings(filenames={}) settings['DEFAULT_CATEGORY'] = 'Default' settings['DEFAULT_DATE'] = (1970, 1, 1) settings['USE_FOLDER_AS_CATEGORY'] = False settings['READERS'] = {'asc': None} settings['filenames'] = {} generator = ArticlesGenerator( context=settings.copy(), settings=settings, path=CONTENT_DIR, theme=settings['THEME'], output_path=None) generator.generate_context() # test for name # categories are grouped by slug; if two categories have the same slug # but different names they will be grouped together, the first one in # terms of process order will define the name for that category categories = [cat.name for cat, _ in generator.categories] categories_alternatives = ( sorted(['Default', 'Yeah', 'test', '指導書']), sorted(['Default', 'yeah', 'test', '指導書']), ) self.assertIn(sorted(categories), categories_alternatives) # test for slug categories = [cat.slug for cat, _ in generator.categories] categories_expected = ['default', 'yeah', 'test', 'zhi-dao-shu'] self.assertEqual(sorted(categories), sorted(categories_expected))
def test_generate_ctags(self): settings = get_settings(filenames={}) settings["GENERATE_CTAGS"] = True context = settings.copy() context["generated_content"] = dict() context["static_links"] = set() generator = ArticlesGenerator( context=context, settings=settings, path=TEST_CONTENT_DIR, theme=settings["THEME"], output_path=TEST_CONTENT_DIR, ) generator.generate_context() writer = Writer(TEST_CONTENT_DIR, settings=settings) generate_ctags(generator, writer) output_path = os.path.join(TEST_CONTENT_DIR, "tags") self.assertTrue(os.path.exists(output_path)) try: # output content is correct with open(output_path, "r") as output_file: ctags = [l.split("\t")[0] for l in output_file.readlines()] self.assertEqual( [ "bar", "bar", "foo", "foo", "foobar", "foobar", "マック", "パイソン" ], ctags, ) finally: os.remove(output_path)
def test_standard_metadata_in_default_metadata(self): settings = get_settings(filenames={}) settings["CACHE_CONTENT"] = False settings["DEFAULT_CATEGORY"] = "Default" settings["DEFAULT_DATE"] = (1970, 1, 1) settings["DEFAULT_METADATA"] = ( ("author", "Blogger"), # category will be ignored in favor of # DEFAULT_CATEGORY ("category", "Random"), ("tags", "general, untagged"), ) generator = ArticlesGenerator( context=settings.copy(), settings=settings, path=CONTENT_DIR, theme=settings["THEME"], output_path=None ) generator.generate_context() authors = sorted([author.name for author, _ in generator.authors]) authors_expected = sorted( ["Alexis Métaireau", "Blogger", "Author, First", "Author, Second", "First Author", "Second Author"] ) self.assertEqual(authors, authors_expected) categories = sorted([category.name for category, _ in generator.categories]) categories_expected = [ sorted(["Default", "TestCategory", "yeah", "test", "指導書"]), sorted(["Default", "TestCategory", "Yeah", "test", "指導書"]), ] self.assertIn(categories, categories_expected) tags = sorted([tag.name for tag in generator.tags]) tags_expected = sorted(["bar", "foo", "foobar", "general", "untagged", "パイソン", "マック"]) self.assertEqual(tags, tags_expected)
def test_do_not_use_folder_as_category(self): settings = get_settings(filenames={}) settings["DEFAULT_CATEGORY"] = "Default" settings["DEFAULT_DATE"] = (1970, 1, 1) settings["USE_FOLDER_AS_CATEGORY"] = False settings["CACHE_PATH"] = self.temp_cache settings["READERS"] = {"asc": None} settings["filenames"] = {} generator = ArticlesGenerator( context=settings.copy(), settings=settings, path=CONTENT_DIR, theme=settings["THEME"], output_path=None ) generator.generate_context() # test for name # categories are grouped by slug; if two categories have the same slug # but different names they will be grouped together, the first one in # terms of process order will define the name for that category categories = [cat.name for cat, _ in generator.categories] categories_alternatives = ( sorted(["Default", "Yeah", "test", "指導書"]), sorted(["Default", "yeah", "test", "指導書"]), ) self.assertIn(sorted(categories), categories_alternatives) # test for slug categories = [cat.slug for cat, _ in generator.categories] categories_expected = ["default", "yeah", "test", "zhi-dao-shu"] self.assertEqual(sorted(categories), sorted(categories_expected))
def _create_generator(tmp_path): series.register() settings = get_settings() settings["CACHE_CONTENT"] = False settings["PLUGINS"] = [series] context = get_context(settings) base_path = os.path.dirname(os.path.abspath(__file__)) test_data_path = os.path.join(base_path, data_path) generator = ArticlesGenerator( context=context, settings=settings, path=test_data_path, theme=settings["THEME"], output_path=tmp_path, ) generator.generate_context() items = generator.articles if sort_key: items = sorted(items, key=sort_key) return generator, items
def test_do_not_use_folder_as_category(self): settings = _DEFAULT_CONFIG.copy() settings['ARTICLE_DIR'] = 'content' settings['DEFAULT_CATEGORY'] = 'Default' settings['DEFAULT_DATE'] = (1970, 1, 1) settings['USE_FOLDER_AS_CATEGORY'] = False settings['filenames'] = {} generator = ArticlesGenerator(settings.copy(), settings, CUR_DIR, _DEFAULT_CONFIG['THEME'], None, _DEFAULT_CONFIG['MARKUP']) generator.generate_context() # test for name # categories are grouped by slug; if two categories have the same slug # but different names they will be grouped together, the first one in # terms of process order will define the name for that category categories = [cat.name for cat, _ in generator.categories] categories_alternatives = ( sorted(['Default', 'Yeah', 'test', '指導書']), sorted(['Default', 'yeah', 'test', '指導書']), ) self.assertTrue(sorted(categories) in categories_alternatives) # test for slug categories = [cat.slug for cat, _ in generator.categories] categories_expected = ['default', 'yeah', 'test', 'zhi-dao-shu'] self.assertEqual(sorted(categories), sorted(categories_expected))
def test_do_not_use_folder_as_category(self): settings = get_settings(filenames={}) settings['DEFAULT_CATEGORY'] = 'Default' settings['DEFAULT_DATE'] = (1970, 1, 1) settings['USE_FOLDER_AS_CATEGORY'] = False settings['CACHE_PATH'] = self.temp_cache settings['READERS'] = {'asc': None} settings['filenames'] = {} generator = ArticlesGenerator(context=settings.copy(), settings=settings, path=CONTENT_DIR, theme=settings['THEME'], output_path=None) generator.generate_context() # test for name # categories are grouped by slug; if two categories have the same slug # but different names they will be grouped together, the first one in # terms of process order will define the name for that category categories = [cat.name for cat, _ in generator.categories] categories_alternatives = ( sorted(['Default', 'Yeah', 'test', '指導書']), sorted(['Default', 'yeah', 'test', '指導書']), ) self.assertIn(sorted(categories), categories_alternatives) # test for slug categories = [cat.slug for cat, _ in generator.categories] categories_expected = ['default', 'yeah', 'test', 'zhi-dao-shu'] self.assertEqual(sorted(categories), sorted(categories_expected))
def test_standard_metadata_in_default_metadata(self): settings = get_settings() settings['CACHE_CONTENT'] = False settings['DEFAULT_CATEGORY'] = 'Default' settings['DEFAULT_DATE'] = (1970, 1, 1) settings['DEFAULT_METADATA'] = (('author', 'Blogger'), # category will be ignored in favor of # DEFAULT_CATEGORY ('category', 'Random'), ('tags', 'general, untagged')) context = get_context(settings) generator = ArticlesGenerator( context=context, settings=settings, path=CONTENT_DIR, theme=settings['THEME'], output_path=None) generator.generate_context() authors = sorted([author.name for author, _ in generator.authors]) authors_expected = sorted(['Alexis Métaireau', 'Blogger', 'Author, First', 'Author, Second', 'First Author', 'Second Author']) self.assertEqual(authors, authors_expected) categories = sorted([category.name for category, _ in generator.categories]) categories_expected = [ sorted(['Default', 'TestCategory', 'yeah', 'test', '指導書']), sorted(['Default', 'TestCategory', 'Yeah', 'test', '指導書'])] self.assertIn(categories, categories_expected) tags = sorted([tag.name for tag in generator.tags]) tags_expected = sorted(['bar', 'foo', 'foobar', 'general', 'untagged', 'パイソン', 'マック']) self.assertEqual(tags, tags_expected)
def test_generate_context(self): settings = _DEFAULT_CONFIG.copy() settings['ARTICLE_DIR'] = 'content' settings['DEFAULT_CATEGORY'] = 'Default' generator = ArticlesGenerator(settings.copy(), settings, CUR_DIR, _DEFAULT_CONFIG['THEME'], None, _DEFAULT_CONFIG['MARKUP']) generator.generate_context() for article in generator.articles: relfilepath = os.path.relpath(article.filename, CUR_DIR) if relfilepath == os.path.join("TestCategory", "article_with_category.rst"): self.assertEquals(article.category.name, 'yeah') elif relfilepath == os.path.join("TestCategory", "article_without_category.rst"): self.assertEquals(article.category.name, 'TestCategory') elif relfilepath == "article_without_category.rst": self.assertEquals(article.category.name, 'Default') categories = [cat.name for cat, _ in generator.categories] # assert that the categories are ordered as expected self.assertEquals( categories, ['Default', 'TestCategory', 'Yeah', 'test', 'yeah'])
def test_standard_metadata_in_default_metadata(self): settings = get_settings(filenames={}) settings['CACHE_CONTENT'] = False settings['DEFAULT_CATEGORY'] = 'Default' settings['DEFAULT_DATE'] = (1970, 1, 1) settings['DEFAULT_METADATA'] = (('author', 'Blogger'), # category will be ignored in favor of # DEFAULT_CATEGORY ('category', 'Random'), ('tags', 'general, untagged')) generator = ArticlesGenerator( context=settings.copy(), settings=settings, path=CONTENT_DIR, theme=settings['THEME'], output_path=None) generator.generate_context() authors = sorted([author.name for author, _ in generator.authors]) authors_expected = sorted(['Alexis Métaireau', 'Blogger', 'Author, First', 'Author, Second', 'First Author', 'Second Author']) self.assertEqual(authors, authors_expected) categories = sorted([category.name for category, _ in generator.categories]) categories_expected = [ sorted(['Default', 'TestCategory', 'yeah', 'test', '指導書']), sorted(['Default', 'TestCategory', 'Yeah', 'test', '指導書'])] self.assertIn(categories, categories_expected) tags = sorted([tag.name for tag in generator.tags]) tags_expected = sorted(['bar', 'foo', 'foobar', 'general', 'untagged', 'パイソン', 'マック']) self.assertEqual(tags, tags_expected)
def test_generate_ctags(self): settings = get_settings(filenames={}) settings['GENERATE_CTAGS'] = True context = settings.copy() context['generated_content'] = dict() context['static_links'] = set() generator = ArticlesGenerator(context=context, settings=settings, path=TEST_CONTENT_DIR, theme=settings['THEME'], output_path=TEST_CONTENT_DIR) generator.generate_context() writer = Writer(TEST_CONTENT_DIR, settings=settings) generate_ctags(generator, writer) output_path = os.path.join(TEST_CONTENT_DIR, 'tags') self.assertTrue(os.path.exists(output_path)) try: # output content is correct with open(output_path, 'r') as output_file: ctags = [l.split('\t')[0] for l in output_file.readlines()] self.assertEqual([ 'bar', 'bar', 'foo', 'foo', 'foobar', 'foobar', 'マック', 'パイソン' ], ctags) finally: os.remove(output_path)
def build_article_generator(settings, content_path, output_path=None): context = settings.copy() context['generated_content'] = dict() context['static_links'] = set() article_generator = ArticlesGenerator( context=context, settings=settings, path=content_path, theme=settings['THEME'], output_path=output_path) article_generator.generate_context() return article_generator
def test_direct_templates_save_as_default(self): settings = get_settings() generator = ArticlesGenerator(settings, settings, None, settings["THEME"], None, settings["MARKUP"]) write = MagicMock() generator.generate_direct_templates(write) write.assert_called_with( "archives.html", generator.get_template("archives"), settings, blog=True, paginated={}, page_name="archives" )
def test_direct_templates_save_as_false(self): settings = get_settings() settings["DIRECT_TEMPLATES"] = ["archives"] settings["ARCHIVES_SAVE_AS"] = "archives/index.html" generator = ArticlesGenerator(settings, settings, None, settings["THEME"], None, settings["MARKUP"]) write = MagicMock() generator.generate_direct_templates(write) write.assert_called_count == 0
def _build_article_generator(content_path, output_path): settings = get_settings(filenames={}) settings['PATH'] = content_path context = settings.copy() context['generated_content'] = dict() context['static_links'] = set() article_generator = ArticlesGenerator( context=context, settings=settings, path=settings['PATH'], theme=settings['THEME'], output_path=output_path) article_generator.generate_context() return article_generator
def test_direct_templates_save_as_false(self): settings = get_settings() settings['DIRECT_TEMPLATES'] = ['archives'] settings['ARCHIVES_SAVE_AS'] = 'archives/index.html' generator = ArticlesGenerator(settings, settings, None, settings['THEME'], None, settings['MARKUP']) write = MagicMock() generator.generate_direct_templates(write) write.assert_called_count == 0
def test_direct_templates_save_as_default(self): settings = get_settings() generator = ArticlesGenerator(settings, settings, None, settings['THEME'], None, settings['MARKUP']) write = MagicMock() generator.generate_direct_templates(write) write.assert_called_with("archives.html", generator.get_template("archives"), settings, blog=True, paginated={}, page_name='archives')
def test_direct_templates_save_as_default(self): settings = get_settings(filenames={}) generator = ArticlesGenerator( context=settings, settings=settings, path=None, theme=settings['THEME'], output_path=None) write = MagicMock() generator.generate_direct_templates(write) write.assert_called_with("archives.html", generator.get_template("archives"), settings, blog=True, paginated={}, page_name='archives')
def test_direct_templates_save_as_default(self): settings = _DEFAULT_CONFIG.copy() settings['DIRECT_TEMPLATES'] = ['archives'] generator = ArticlesGenerator(settings.copy(), settings, None, _DEFAULT_CONFIG['THEME'], None, _DEFAULT_CONFIG['MARKUP']) write = MagicMock() generator.generate_direct_templates(write) write.assert_called_with("archives.html", generator.get_template("archives"), settings, blog=True, paginated={}, page_name='archives')
def test_direct_templates_save_as_false(self): settings = get_settings() settings['DIRECT_TEMPLATES'] = ['archives'] settings['ARCHIVES_SAVE_AS'] = 'archives/index.html' settings['CACHE_DIRECTORY'] = self.temp_cache generator = ArticlesGenerator( context=settings, settings=settings, path=None, theme=settings['THEME'], output_path=None) write = MagicMock() generator.generate_direct_templates(write) write.assert_called_count == 0
def _build_article_generator(content_path, tmpdir, site_url='http://localhost/blog/'): settings = get_settings(filenames={}) _setup_cache_dir(settings['CACHE_PATH']) settings['SITEURL'] = site_url context = settings.copy() context['generated_content'] = {} context['static_links'] = set() article_generator = ArticlesGenerator( context=context, settings=settings, path=content_path, theme=settings['THEME'], output_path=str(tmpdir)) article_generator.generate_context() return article_generator
def test_generate_feeds_override_url(self): settings = get_settings() settings['CACHE_PATH'] = self.temp_cache settings['FEED_ALL_ATOM_URL'] = 'feeds/atom/all/' generator = ArticlesGenerator( context=settings, settings=settings, path=None, theme=settings['THEME'], output_path=None) writer = MagicMock() generator.generate_feeds(writer) writer.write_feed.assert_called_with([], settings, 'feeds/all.atom.xml', 'feeds/atom/all/')
def test_direct_templates_save_as_false(self): settings = get_settings() settings['DIRECT_TEMPLATES'] = ['archives'] settings['ARCHIVES_SAVE_AS'] = False settings['CACHE_PATH'] = self.temp_cache generator = ArticlesGenerator( context=settings, settings=settings, path=None, theme=settings['THEME'], output_path=None) write = MagicMock() generator.generate_direct_templates(write) self.assertEqual(write.call_count, 0)
def test_direct_templates_save_as_default(self): settings = get_settings(filenames={}) settings['CACHE_DIRECTORY'] = self.temp_cache generator = ArticlesGenerator( context=settings, settings=settings, path=None, theme=settings['THEME'], output_path=None) write = MagicMock() generator.generate_direct_templates(write) write.assert_called_with("archives.html", generator.get_template("archives"), settings, blog=True, paginated={}, page_name='archives')
def _build_article_generator(settings, output_path): context = settings.copy() context["generated_content"] = dict() context["static_links"] = set() article_generator = ArticlesGenerator( context=context, settings=settings, path=settings["PATH"], theme=settings["THEME"], output_path=output_path, ) article_generator.generate_context() return article_generator
def test_do_not_use_folder_as_category(self): settings = _DEFAULT_CONFIG.copy() settings["ARTICLE_DIR"] = "content" settings["DEFAULT_CATEGORY"] = "Default" settings["USE_FOLDER_AS_CATEGORY"] = False generator = ArticlesGenerator( settings.copy(), settings, CUR_DIR, _DEFAULT_CONFIG["THEME"], None, _DEFAULT_CONFIG["MARKUP"] ) generator.generate_context() categories = [cat.name for cat, _ in generator.categories] self.assertEquals(categories, ["Default", "Yeah", "test", "yeah"])
def test_do_not_use_folder_as_category(self): settings = _DEFAULT_CONFIG.copy() settings['ARTICLE_DIR'] = 'content' settings['DEFAULT_CATEGORY'] = 'Default' settings['USE_FOLDER_AS_CATEGORY'] = False generator = ArticlesGenerator(settings.copy(), settings, CUR_DIR, _DEFAULT_CONFIG['THEME'], None, _DEFAULT_CONFIG['MARKUP']) generator.generate_context() categories = [cat.name for cat, _ in generator.categories] self.assertEquals(categories, ['Default', 'Yeah', 'test', 'yeah'])
def test_direct_templates_save_as_modified(self): settings = get_settings() settings['DIRECT_TEMPLATES'] = ['archives'] settings['ARCHIVES_SAVE_AS'] = 'archives/index.html' generator = ArticlesGenerator(settings, settings, None, settings['THEME'], None, settings['MARKUP']) write = MagicMock() generator.generate_direct_templates(write) write.assert_called_with("archives/index.html", generator.get_template("archives"), settings, blog=True, paginated={}, page_name='archives/index')
def test_article_reader_content_caching(self): """Test raw article content caching at the reader level""" settings = self._get_cache_enabled_settings() settings['READERS'] = {'asc': None} context = get_context(settings) generator = ArticlesGenerator(context=context.copy(), settings=settings, path=CONTENT_DIR, theme=settings['THEME'], output_path=None) generator.generate_context() self.assertTrue(hasattr(generator.readers, '_cache')) generator = ArticlesGenerator(context=context.copy(), settings=settings, path=CONTENT_DIR, theme=settings['THEME'], output_path=None) readers = generator.readers.readers for reader in readers.values(): reader.read = MagicMock() generator.generate_context() for reader in readers.values(): self.assertEqual(reader.read.call_count, 0)
def test_article_object_caching(self): """Test Article objects caching at the generator level""" settings = self._get_cache_enabled_settings() settings['CONTENT_CACHING_LAYER'] = 'generator' settings['DEFAULT_DATE'] = (1970, 1, 1) settings['READERS'] = {'asc': None} generator = ArticlesGenerator( context=settings.copy(), settings=settings, path=CONTENT_DIR, theme=settings['THEME'], output_path=None) generator.generate_context() self.assertTrue(hasattr(generator, '_cache')) generator = ArticlesGenerator( context=settings.copy(), settings=settings, path=CONTENT_DIR, theme=settings['THEME'], output_path=None) generator.readers.read_file = MagicMock() generator.generate_context() """ 6 files don't get cached because they were not valid - article_with_attributes_containing_double_quotes.html - article_with_comments.html - article_with_null_attributes.html - 2012-11-30_md_w_filename_meta#foo-bar.md - empty.md - empty_with_bom.md """ self.assertEqual(generator.readers.read_file.call_count, 6)
def test_article_ignore_cache(self): """Test that all the articles are read again when not loading cache used in --ignore-cache or autoreload mode""" settings = self._get_cache_enabled_settings() settings['READERS'] = {'asc': None} generator = ArticlesGenerator(context=settings.copy(), settings=settings, path=CONTENT_DIR, theme=settings['THEME'], output_path=None) generator.readers.read_file = MagicMock() generator.generate_context() self.assertTrue(hasattr(generator, '_cache_open')) orig_call_count = generator.readers.read_file.call_count settings['LOAD_CONTENT_CACHE'] = False generator = ArticlesGenerator(context=settings.copy(), settings=settings, path=CONTENT_DIR, theme=settings['THEME'], output_path=None) generator.readers.read_file = MagicMock() generator.generate_context() self.assertEqual(generator.readers.read_file.call_count, orig_call_count)
def test_reader_content_caching(self): """Test raw content caching at the reader level""" settings = get_settings(filenames={}) settings['CACHE_PATH'] = self.temp_cache settings['READERS'] = {'asc': None} generator = ArticlesGenerator(context=settings.copy(), settings=settings, path=CONTENT_DIR, theme=settings['THEME'], output_path=None) generator.generate_context() self.assertTrue(hasattr(generator.readers, '_cache')) generator = ArticlesGenerator(context=settings.copy(), settings=settings, path=CONTENT_DIR, theme=settings['THEME'], output_path=None) readers = generator.readers.readers for reader in readers.values(): reader.read = MagicMock() generator.generate_context() for reader in readers.values(): reader.read.assert_called_count == 0
def get_populated_generator(self): """ We only need to pull all the test articles once, but read from it for each test. """ if self.generator is None: settings = _DEFAULT_CONFIG.copy() settings['ARTICLE_DIR'] = 'content' settings['DEFAULT_CATEGORY'] = 'Default' self.generator = ArticlesGenerator(settings.copy(), settings, CUR_DIR, _DEFAULT_CONFIG['THEME'], None, _DEFAULT_CONFIG['MARKUP']) self.generator.generate_context() return self.generator
def test_direct_templates_save_as_url_default(self): settings = get_settings(filenames={}) settings['CACHE_PATH'] = self.temp_cache generator = ArticlesGenerator( context=settings, settings=settings, path=None, theme=settings['THEME'], output_path=None) write = MagicMock() generator.generate_direct_templates(write) write.assert_called_with("archives.html", generator.get_template("archives"), settings, articles=generator.articles, dates=generator.dates, blog=True, template_name='archives', page_name='archives', url="archives.html")
def test_direct_templates_save_as_modified(self): settings = get_settings() settings['DIRECT_TEMPLATES'] = ['archives'] settings['ARCHIVES_SAVE_AS'] = 'archives/index.html' settings['CACHE_PATH'] = self.temp_cache generator = ArticlesGenerator( context=settings, settings=settings, path=None, theme=settings['THEME'], output_path=None) write = MagicMock() generator.generate_direct_templates(write) write.assert_called_with("archives/index.html", generator.get_template("archives"), settings, blog=True, paginated={}, page_name='archives/index')
def test_direct_templates_save_as_modified(self): settings = get_settings() settings['DIRECT_TEMPLATES'] = ['archives'] settings['ARCHIVES_SAVE_AS'] = 'archives/index.html' settings['CACHE_DIRECTORY'] = self.temp_cache generator = ArticlesGenerator( context=settings, settings=settings, path=None, theme=settings['THEME'], output_path=None) write = MagicMock() generator.generate_direct_templates(write) write.assert_called_with("archives/index.html", generator.get_template("archives"), settings, blog=True, paginated={}, page_name='archives/index')
def test_article_order_by(self): settings = get_settings(filenames={}) settings['DEFAULT_CATEGORY'] = 'Default' settings['DEFAULT_DATE'] = (1970, 1, 1) settings['ARTICLE_ORDER_BY'] = 'title' generator = ArticlesGenerator( context=settings.copy(), settings=settings, path=CONTENT_DIR, theme=settings['THEME'], output_path=None) generator.generate_context() expected = [ 'An Article With Code Block To Test Typogrify Ignore', 'Article title', 'Article with Nonconformant HTML meta tags', 'Article with markdown and summary metadata multi', 'Article with markdown and summary metadata single', 'Article with markdown containing footnotes', 'Article with template', 'Rst with filename metadata', 'Test Markdown extensions', 'Test markdown File', 'Test md File', 'Test mdown File', 'Test metadata duplicates', 'Test mkd File', 'This is a super article !', 'This is a super article !', 'This is a super article !', 'This is a super article !', 'This is a super article !', 'This is a super article !', 'This is an article with category !', ('This is an article with multiple authors in lastname, ' 'firstname format!'), 'This is an article with multiple authors in list format!', 'This is an article with multiple authors!', 'This is an article with multiple authors!', 'This is an article without category !', 'This is an article without category !', 'マックOS X 10.8でパイソンとVirtualenvをインストールと設定'] articles = [article.title for article in generator.articles] self.assertEqual(articles, expected) # reversed title settings = get_settings(filenames={}) settings['DEFAULT_CATEGORY'] = 'Default' settings['DEFAULT_DATE'] = (1970, 1, 1) settings['ARTICLE_ORDER_BY'] = 'reversed-title' generator = ArticlesGenerator( context=settings.copy(), settings=settings, path=CONTENT_DIR, theme=settings['THEME'], output_path=None) generator.generate_context() articles = [article.title for article in generator.articles] self.assertEqual(articles, list(reversed(expected)))
def test_direct_templates_save_as_modified(self): settings = get_settings() settings["DIRECT_TEMPLATES"] = ["archives"] settings["ARCHIVES_SAVE_AS"] = "archives/index.html" generator = ArticlesGenerator(settings, settings, None, settings["THEME"], None, settings["MARKUP"]) write = MagicMock() generator.generate_direct_templates(write) write.assert_called_with( "archives/index.html", generator.get_template("archives"), settings, blog=True, paginated={}, page_name="archives/index", )
def setUpClass(cls): cls.temp_path = mkdtemp(prefix="pelicantests.") settings = get_settings(filenames={}) settings["PATH"] = os.path.join(CUR_DIR, "test_data") settings["AUTHOR"] = "Me" settings["DEFAULT_DATE"] = (1970, 1, 1) settings["DEFAULT_CATEGORY"] = "Default" settings["FILENAME_METADATA"] = "(?P<slug>[^.]+)" settings["PLUGINS"] = [sub_parts] settings["CACHE_CONTENT"] = False context = settings.copy() context["generated_content"] = dict() context["static_links"] = set() cls.generator = ArticlesGenerator( context=context, settings=settings, path=settings["PATH"], theme=settings["THEME"], output_path=cls.temp_path, ) cls.generator.generate_context() cls.all_articles = list(cls.generator.articles) for a in cls.all_articles: a.photo_gallery = [("i.jpg", "i.jpg", "it.jpg", "", "")] sub_parts.patch_subparts(cls.generator)
def test_direct_templates_save_as_url_default(self): settings = get_settings() settings['CACHE_PATH'] = self.temp_cache context = get_context(settings) generator = ArticlesGenerator( context=context, settings=settings, path=None, theme=settings['THEME'], output_path=None) write = MagicMock() generator.generate_direct_templates(write) write.assert_called_with("archives.html", generator.get_template("archives"), context, articles=generator.articles, dates=generator.dates, blog=True, template_name='archives', page_name='archives', url="archives.html")
def test_nonexistent_template(self): """Attempt to load a non-existent template""" settings = get_settings(filenames={}) generator = ArticlesGenerator( context=settings, settings=settings, path=None, theme=settings['THEME'], output_path=None) self.assertRaises(Exception, generator.get_template, "not_a_template")
def setUpClass(cls): cls.temp_path = mkdtemp(prefix='pelicantests.') cls.settings = get_settings(filenames={}) cls.settings['PATH'] = os.path.join(CUR_DIR, 'test_data') cls.settings['PHOTO_LIBRARY'] = os.path.join(CUR_DIR, 'test_data') cls.settings['DEFAULT_DATE'] = (1970, 1, 1) cls.settings['FILENAME_METADATA'] = '(?P<slug>[^.]+)' cls.settings['PLUGINS'] = [photos] cls.settings['CACHE_CONTENT'] = False cls.settings['OUTPUT_PATH'] = cls.temp_path cls.settings['SITEURL'] = 'http://getpelican.com/sub' cls.settings['AUTHOR'] = 'Bob Anonymous' photos.initialized(cls) context = cls.settings.copy() context['generated_content'] = dict() context['static_links'] = set() cls.generator = ArticlesGenerator( context=context, settings=cls.settings, path=cls.settings['PATH'], theme=cls.settings['THEME'], output_path=cls.settings['OUTPUT_PATH']) photos.register() cls.generator.generate_context() for article in cls.generator.articles: photos.detect_image(cls.generator, article) photos.detect_gallery(cls.generator, article)
def test_generate_context(self): settings = _DEFAULT_CONFIG settings['ARTICLE_DIR'] = 'content' settings['DEFAULT_CATEGORY'] = 'Default' generator = ArticlesGenerator(settings.copy(), settings, CUR_DIR, _DEFAULT_CONFIG['THEME'], None, _DEFAULT_CONFIG['MARKUP']) generator.generate_context() for article in generator.articles: relfilepath = os.path.relpath(article.filename, CUR_DIR) if relfilepath == os.path.join("TestCategory", "article_with_category.rst"): self.assertEquals(article.category.name, 'yeah') elif relfilepath == os.path.join("TestCategory", "article_without_category.rst"): self.assertEquals(article.category.name, 'TestCategory') elif relfilepath == "article_without_category.rst": self.assertEquals(article.category.name, 'Default')
def test_article_object_caching(self): """Test Article objects caching at the generator level""" settings = self._get_cache_enabled_settings() settings["CONTENT_CACHING_LAYER"] = "generator" settings["DEFAULT_DATE"] = (1970, 1, 1) settings["READERS"] = {"asc": None} generator = ArticlesGenerator( context=settings.copy(), settings=settings, path=CONTENT_DIR, theme=settings["THEME"], output_path=None ) generator.generate_context() self.assertTrue(hasattr(generator, "_cache")) generator = ArticlesGenerator( context=settings.copy(), settings=settings, path=CONTENT_DIR, theme=settings["THEME"], output_path=None ) generator.readers.read_file = MagicMock() generator.generate_context() """ 3 Files don't get cached because they were not valid - article_with_comments.html - article_with_null_attributes.html - 2012-11-30_md_w_filename_meta#foo-bar.md """ self.assertEqual(generator.readers.read_file.call_count, 3)
def test_article_ignore_cache(self): """Test that all the articles are read again when not loading cache used in --ignore-cache or autoreload mode""" settings = self._get_cache_enabled_settings() settings['READERS'] = {'asc': None} context = get_context(settings) generator = ArticlesGenerator( context=context.copy(), settings=settings, path=CONTENT_DIR, theme=settings['THEME'], output_path=None) generator.readers.read_file = MagicMock() generator.generate_context() self.assertTrue(hasattr(generator, '_cache_open')) orig_call_count = generator.readers.read_file.call_count settings['LOAD_CONTENT_CACHE'] = False generator = ArticlesGenerator( context=context.copy(), settings=settings, path=CONTENT_DIR, theme=settings['THEME'], output_path=None) generator.readers.read_file = MagicMock() generator.generate_context() self.assertEqual( generator.readers.read_file.call_count, orig_call_count)
def test_generate_ctags(self): settings = get_settings(filenames={}) settings['GENERATE_CTAGS'] = True generator = ArticlesGenerator( context=settings.copy(), settings=settings, path=TEST_CONTENT_DIR, theme=settings['THEME'], output_path=None) generator.generate_context() writer = Writer(None, settings=settings) generate_ctags(generator, writer) output_path = os.path.join(TEST_CONTENT_DIR, 'tags') self.assertTrue(os.path.exists(output_path)) try: # output content is correct with open(output_path, 'r') as output_file: ctags = [l.split('\t')[0] for l in output_file.readlines()] self.assertEqual(['bar', 'bar', 'foo', 'foo', 'foobar', 'foobar', 'マック', 'パイソン'], ctags) finally: os.remove(output_path)
def get_populated_generator(self): """ We only need to pull all the test articles once, but read from it for each test. """ if self.generator is None: settings = get_settings(filenames={}) settings['DEFAULT_CATEGORY'] = 'Default' settings['DEFAULT_DATE'] = (1970, 1, 1) self.generator = ArticlesGenerator(settings.copy(), settings, CONTENT_DIR, settings['THEME'], None, settings['MARKUP']) self.generator.generate_context() return self.generator
def test_article_order_by(self): settings = get_settings(filenames={}) settings["DEFAULT_CATEGORY"] = "Default" settings["DEFAULT_DATE"] = (1970, 1, 1) settings["ARTICLE_ORDER_BY"] = "title" generator = ArticlesGenerator( context=settings.copy(), settings=settings, path=CONTENT_DIR, theme=settings["THEME"], output_path=None ) generator.generate_context() expected = [ "An Article With Code Block To Test Typogrify Ignore", "Article title", "Article with Nonconformant HTML meta tags", "Article with markdown and summary metadata multi", "Article with markdown and summary metadata single", "Article with markdown containing footnotes", "Article with template", "Rst with filename metadata", "Test Markdown extensions", "Test markdown File", "Test md File", "Test mdown File", "Test metadata duplicates", "Test mkd File", "This is a super article !", "This is a super article !", "This is a super article !", "This is a super article !", "This is a super article !", "This is a super article !", "This is an article with category !", ("This is an article with multiple authors in lastname, " "firstname format!"), "This is an article with multiple authors in list format!", "This is an article with multiple authors!", "This is an article with multiple authors!", "This is an article without category !", "This is an article without category !", "マックOS X 10.8でパイソンとVirtualenvをインストールと設定", ] articles = [article.title for article in generator.articles] self.assertEqual(articles, expected) # reversed title settings = get_settings(filenames={}) settings["DEFAULT_CATEGORY"] = "Default" settings["DEFAULT_DATE"] = (1970, 1, 1) settings["ARTICLE_ORDER_BY"] = "reversed-title" generator = ArticlesGenerator( context=settings.copy(), settings=settings, path=CONTENT_DIR, theme=settings["THEME"], output_path=None ) generator.generate_context() articles = [article.title for article in generator.articles] self.assertEqual(articles, list(reversed(expected)))
def test_article_order_by(self): settings = get_settings(filenames={}) settings['DEFAULT_CATEGORY'] = 'Default' settings['DEFAULT_DATE'] = (1970, 1, 1) settings['CACHE_CONTENT'] = False # cache not needed for this logic tests settings['ARTICLE_ORDER_BY'] = 'title' generator = ArticlesGenerator( context=settings.copy(), settings=settings, path=CONTENT_DIR, theme=settings['THEME'], output_path=None) generator.generate_context() expected = [ 'An Article With Code Block To Test Typogrify Ignore', 'Article title', 'Article with Nonconformant HTML meta tags', 'Article with markdown and summary metadata multi', 'Article with markdown and summary metadata single', 'Article with markdown containing footnotes', 'Article with template', 'Rst with filename metadata', 'Test Markdown extensions', 'Test markdown File', 'Test md File', 'Test mdown File', 'Test mkd File', 'This is a super article !', 'This is a super article !', 'This is a super article !', 'This is a super article !', 'This is a super article !', 'This is a super article !', 'This is an article with category !', 'This is an article with multiple authors in lastname, firstname format!', 'This is an article with multiple authors in list format!', 'This is an article with multiple authors!', 'This is an article with multiple authors!', 'This is an article without category !', 'This is an article without category !', 'マックOS X 10.8でパイソンとVirtualenvをインストールと設定'] articles = [article.title for article in generator.articles] self.assertEqual(articles, expected) # reversed title settings = get_settings(filenames={}) settings['DEFAULT_CATEGORY'] = 'Default' settings['DEFAULT_DATE'] = (1970, 1, 1) settings['CACHE_CONTENT'] = False # cache not needed for this logic tests settings['ARTICLE_ORDER_BY'] = 'reversed-title' generator = ArticlesGenerator( context=settings.copy(), settings=settings, path=CONTENT_DIR, theme=settings['THEME'], output_path=None) generator.generate_context() articles = [article.title for article in generator.articles] self.assertEqual(articles, list(reversed(expected)))
def get_populated_generator(self): """ We only need to pull all the test articles once, but read from it for each test. """ if self.generator is None: settings = _DEFAULT_CONFIG.copy() settings["ARTICLE_DIR"] = "content" settings["DEFAULT_CATEGORY"] = "Default" self.generator = ArticlesGenerator( settings.copy(), settings, CUR_DIR, _DEFAULT_CONFIG["THEME"], None, _DEFAULT_CONFIG["MARKUP"] ) self.generator.generate_context() return self.generator
def test_generate_feeds(self): settings = get_settings() generator = ArticlesGenerator( settings, {"FEED_ALL_ATOM": settings["FEED_ALL_ATOM"]}, None, settings["THEME"], None, settings["MARKUP"] ) writer = MagicMock() generator.generate_feeds(writer) writer.write_feed.assert_called_with([], settings, "feeds/all.atom.xml") generator = ArticlesGenerator(settings, {"FEED_ALL_ATOM": None}, None, settings["THEME"], None, None) writer = MagicMock() generator.generate_feeds(writer) self.assertFalse(writer.write_feed.called)