From 5634a6ea503d6221efa974f57bc29b5c49079621 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Mon, 2 Nov 2026 12:01:06 +0100 Subject: [PATCH] update(tests): switch fixtures to MaterialX --- ...materialx_item_image_social_cards_blog.yml | 4 +- ...cial_cards_blog_directory_url_disabled.yml | 19 +++ ..._item_image_social_cards_disabled_site.yml | 12 ++ ...cards_enabled_but_integration_disabled.yml | 13 ++ ...x_item_image_social_cards_enabled_site.yml | 12 ++ ...mage_social_enabled_but_cards_disabled.yml | 12 ++ .../mkdocs_materialx_items_blog_enabled.yml | 12 ++ ..._blog_enabled_but_integration_disabled.yml | 13 ++ .../mkdocs_materialx_language_specific.yml | 11 ++ tests/fixtures/test-build-material.dockerfile | 2 +- tests/test_build.py | 26 ++++ tests/test_integrations_material.py | 12 ++ tests/test_integrations_material_blog.py | 57 ++++++++ ...test_integrations_material_social_cards.py | 124 ++++++++++++++++++ tests/test_no_material.py | 6 + 15 files changed, 332 insertions(+), 3 deletions(-) create mode 100644 tests/fixtures/mkdocs_materialx_item_image_social_cards_blog_directory_url_disabled.yml create mode 100644 tests/fixtures/mkdocs_materialx_item_image_social_cards_disabled_site.yml create mode 100644 tests/fixtures/mkdocs_materialx_item_image_social_cards_enabled_but_integration_disabled.yml create mode 100644 tests/fixtures/mkdocs_materialx_item_image_social_cards_enabled_site.yml create mode 100644 tests/fixtures/mkdocs_materialx_item_image_social_enabled_but_cards_disabled.yml create mode 100644 tests/fixtures/mkdocs_materialx_items_blog_enabled.yml create mode 100644 tests/fixtures/mkdocs_materialx_items_blog_enabled_but_integration_disabled.yml create mode 100644 tests/fixtures/mkdocs_materialx_language_specific.yml diff --git a/tests/fixtures/mkdocs_materialx_item_image_social_cards_blog.yml b/tests/fixtures/mkdocs_materialx_item_image_social_cards_blog.yml index dbb18ddc..ced63240 100644 --- a/tests/fixtures/mkdocs_materialx_item_image_social_cards_blog.yml +++ b/tests/fixtures/mkdocs_materialx_item_image_social_cards_blog.yml @@ -3,12 +3,12 @@ site_description: Test social cards support in RSS with blog plugin also enabled site_url: https://guts.github.io/mkdocs-rss-plugin plugins: - - blog: + - materialx/blog: blog_dir: blog - rss: match_path: blog/posts/.* pretty_print: true - - social: + - materialx/social: enabled: true cards: true diff --git a/tests/fixtures/mkdocs_materialx_item_image_social_cards_blog_directory_url_disabled.yml b/tests/fixtures/mkdocs_materialx_item_image_social_cards_blog_directory_url_disabled.yml new file mode 100644 index 00000000..03693c98 --- /dev/null +++ b/tests/fixtures/mkdocs_materialx_item_image_social_cards_blog_directory_url_disabled.yml @@ -0,0 +1,19 @@ +site_name: Test RSS Plugin with social cards, blog plugin and directory URL disabled +site_description: Test RSS with social and blog plugins enabled but directory URLS disabled. Related to https://github.com/Guts/mkdocs-rss-plugin/issues/319. +site_url: https://guts.github.io/mkdocs-rss-plugin + +use_directory_urls: false + +plugins: + - materialx/blog: + blog_dir: blog + authors_profiles: true + - rss: + match_path: blog/posts/.* + pretty_print: true + - materialx/social: + enabled: true + cards: true + +theme: + name: materialx diff --git a/tests/fixtures/mkdocs_materialx_item_image_social_cards_disabled_site.yml b/tests/fixtures/mkdocs_materialx_item_image_social_cards_disabled_site.yml new file mode 100644 index 00000000..6916c3a3 --- /dev/null +++ b/tests/fixtures/mkdocs_materialx_item_image_social_cards_disabled_site.yml @@ -0,0 +1,12 @@ +site_name: Test RSS Plugin +site_description: Test a language code set in with territory +site_url: https://guts.github.io/mkdocs-rss-plugin + +plugins: + - rss + - materialx/social: + enabled: false + cards: true + +theme: + name: materialx diff --git a/tests/fixtures/mkdocs_materialx_item_image_social_cards_enabled_but_integration_disabled.yml b/tests/fixtures/mkdocs_materialx_item_image_social_cards_enabled_but_integration_disabled.yml new file mode 100644 index 00000000..48c389ff --- /dev/null +++ b/tests/fixtures/mkdocs_materialx_item_image_social_cards_enabled_but_integration_disabled.yml @@ -0,0 +1,13 @@ +site_name: Test RSS Plugin +site_description: Test a language code set in with territory +site_url: https://guts.github.io/mkdocs-rss-plugin + +plugins: + - rss: + use_material_social_cards: false + - materialx/social: + enabled: true + cards: true + +theme: + name: materialx diff --git a/tests/fixtures/mkdocs_materialx_item_image_social_cards_enabled_site.yml b/tests/fixtures/mkdocs_materialx_item_image_social_cards_enabled_site.yml new file mode 100644 index 00000000..85647904 --- /dev/null +++ b/tests/fixtures/mkdocs_materialx_item_image_social_cards_enabled_site.yml @@ -0,0 +1,12 @@ +site_name: Test RSS Plugin +site_description: Test a language code set in with territory +site_url: https://guts.github.io/mkdocs-rss-plugin + +plugins: + - rss + - materialx/social: + enabled: true + cards: true + +theme: + name: materialx diff --git a/tests/fixtures/mkdocs_materialx_item_image_social_enabled_but_cards_disabled.yml b/tests/fixtures/mkdocs_materialx_item_image_social_enabled_but_cards_disabled.yml new file mode 100644 index 00000000..8e3bda54 --- /dev/null +++ b/tests/fixtures/mkdocs_materialx_item_image_social_enabled_but_cards_disabled.yml @@ -0,0 +1,12 @@ +site_name: Test RSS Plugin +site_description: Test a language code set in with territory +site_url: https://guts.github.io/mkdocs-rss-plugin + +plugins: + - rss + - materialx/social: + enabled: true + cards: false + +theme: + name: materialx diff --git a/tests/fixtures/mkdocs_materialx_items_blog_enabled.yml b/tests/fixtures/mkdocs_materialx_items_blog_enabled.yml new file mode 100644 index 00000000..f2263e55 --- /dev/null +++ b/tests/fixtures/mkdocs_materialx_items_blog_enabled.yml @@ -0,0 +1,12 @@ +site_name: Test RSS Plugin +site_description: Test RSS with blog plugin also enabled +site_url: https://guts.github.io/mkdocs-rss-plugin + +plugins: + - materialx/blog: + blog_dir: blog + authors_profiles: true + - rss + +theme: + name: materialx diff --git a/tests/fixtures/mkdocs_materialx_items_blog_enabled_but_integration_disabled.yml b/tests/fixtures/mkdocs_materialx_items_blog_enabled_but_integration_disabled.yml new file mode 100644 index 00000000..1755b6ac --- /dev/null +++ b/tests/fixtures/mkdocs_materialx_items_blog_enabled_but_integration_disabled.yml @@ -0,0 +1,13 @@ +site_name: Test RSS Plugin +site_description: Test RSS with blog plugin also enabled +site_url: https://guts.github.io/mkdocs-rss-plugin + +plugins: + - materialx/blog: + blog_dir: blog + authors_profiles: true + - rss: + use_material_blog: false + +theme: + name: materialx diff --git a/tests/fixtures/mkdocs_materialx_language_specific.yml b/tests/fixtures/mkdocs_materialx_language_specific.yml new file mode 100644 index 00000000..6b6cb60b --- /dev/null +++ b/tests/fixtures/mkdocs_materialx_language_specific.yml @@ -0,0 +1,11 @@ +site_name: Test RSS Plugin +site_description: Test a language code set in with territory +site_url: https://guts.github.io/mkdocs-rss-plugin + +plugins: + - rss + +theme: + name: materialx + locale: en_US + language: fr # custom setting for historical reason - see: https://github.com/squidfunk/mkdocs-material/discussions/6453 diff --git a/tests/fixtures/test-build-material.dockerfile b/tests/fixtures/test-build-material.dockerfile index 9cd3839a..35833b3c 100644 --- a/tests/fixtures/test-build-material.dockerfile +++ b/tests/fixtures/test-build-material.dockerfile @@ -1,5 +1,5 @@ # Reference: https://squidfunk.github.io/mkdocs-material/getting-started/#with-docker -FROM squidfunk/mkdocs-material +FROM jaywhj/mkdocs-materialx COPY . . diff --git a/tests/test_build.py b/tests/test_build.py index 9b4876a0..13434c30 100644 --- a/tests/test_build.py +++ b/tests/test_build.py @@ -590,6 +590,32 @@ def test_simple_build_language_specific_material(self): feed_parsed = feedparser.parse(Path(tmpdirname) / OUTPUT_RSS_FEED_UPDATED) self.assertEqual(feed_parsed.feed.get("language"), "fr") + def test_simple_build_language_specific_materialx(self): + with tempfile.TemporaryDirectory() as tmpdirname: + cli_result = self.build_docs_setup( + testproject_path="docs", + mkdocs_yml_filepath=Path( + "tests/fixtures/mkdocs_materialx_language_specific.yml" + ), + output_path=tmpdirname, + strict=True, + ) + + if cli_result.exception is not None: + e = cli_result.exception + logger.debug(format_exception(type(e), e, e.__traceback__)) + + self.assertEqual(cli_result.exit_code, 0) + self.assertIsNone(cli_result.exception) + + # created items + feed_parsed = feedparser.parse(Path(tmpdirname) / OUTPUT_RSS_FEED_CREATED) + self.assertEqual(feed_parsed.feed.get("language"), "fr") + + # updated items + feed_parsed = feedparser.parse(Path(tmpdirname) / OUTPUT_RSS_FEED_UPDATED) + self.assertEqual(feed_parsed.feed.get("language"), "fr") + def test_simple_build_custom_output_basename(self): config = self.get_plugin_config_from_mkdocs( mkdocs_yml_filepath=Path( diff --git a/tests/test_integrations_material.py b/tests/test_integrations_material.py index 096e9eeb..bbf47094 100644 --- a/tests/test_integrations_material.py +++ b/tests/test_integrations_material.py @@ -53,6 +53,18 @@ def test_plugin_config_theme_material(self): ) self.assertTrue(integration_social_cards.IS_THEME_MATERIAL) + def test_plugin_config_theme_materialx(self): + # default reference + cfg_mkdocs = load_config( + str(Path("tests/fixtures/mkdocs_materialx_language_specific.yml").resolve()) + ) + + integration_social_cards = IntegrationMaterialThemeBase( + mkdocs_config=cfg_mkdocs + ) + self.assertTrue(integration_social_cards.IS_THEME_MATERIAL) + self.assertEqual(integration_social_cards.THEME_NAME, "materialx") + def test_plugin_config_theme_not_material(self): # default reference cfg_mkdocs = load_config( diff --git a/tests/test_integrations_material_blog.py b/tests/test_integrations_material_blog.py index 07ec5d64..a24e8eff 100644 --- a/tests/test_integrations_material_blog.py +++ b/tests/test_integrations_material_blog.py @@ -74,6 +74,63 @@ def test_plugin_config_blog_enabled(self): self.assertTrue(integration_social_cards.IS_BLOG_PLUGIN_ENABLED) self.assertTrue(integration_social_cards.IS_ENABLED) + def test_plugin_config_materialx_blog_enabled_but_integration_disabled(self): + # default reference + cfg_mkdocs = load_config( + str( + Path( + "tests/fixtures/mkdocs_materialx_items_blog_enabled_but_integration_disabled.yml" + ).resolve() + ) + ) + + integration_blog = IntegrationMaterialBlog( + mkdocs_config=cfg_mkdocs, + switch_force=cfg_mkdocs.plugins.get("rss").config.use_material_blog, + ) + self.assertTrue(integration_blog.IS_THEME_MATERIAL) + self.assertTrue(integration_blog.IS_BLOG_PLUGIN_ENABLED) + self.assertFalse(integration_blog.IS_ENABLED) + + def test_plugin_config_materialx_blog_enabled(self): + # default reference + cfg_mkdocs = load_config( + str( + Path("tests/fixtures/mkdocs_materialx_items_blog_enabled.yml").resolve() + ) + ) + + integration_blog = IntegrationMaterialBlog(mkdocs_config=cfg_mkdocs) + self.assertTrue(integration_blog.IS_THEME_MATERIAL) + self.assertTrue(integration_blog.IS_BLOG_PLUGIN_ENABLED) + self.assertTrue(integration_blog.IS_ENABLED) + + def test_simple_build_materialx(self): + with tempfile.TemporaryDirectory() as tmpdirname: + cli_result = self.build_docs_setup( + testproject_path="docs", + mkdocs_yml_filepath=Path( + "tests/fixtures/mkdocs_materialx_items_blog_enabled.yml" + ), + output_path=tmpdirname, + strict=False, + ) + + if cli_result.exception is not None: + e = cli_result.exception + logger.debug(format_exception(type(e), e, e.__traceback__)) + + self.assertEqual(cli_result.exit_code, 0) + self.assertIsNone(cli_result.exception) + + # created items + feed_parsed = feedparser.parse(Path(tmpdirname) / "feed_rss_created.xml") + self.assertEqual(feed_parsed.bozo, 0) + + # updated items + feed_parsed = feedparser.parse(Path(tmpdirname) / "feed_rss_updated.xml") + self.assertEqual(feed_parsed.bozo, 0) + def test_simple_build(self): with tempfile.TemporaryDirectory() as tmpdirname: cli_result = self.build_docs_setup( diff --git a/tests/test_integrations_material_social_cards.py b/tests/test_integrations_material_social_cards.py index c190fd1a..54617379 100644 --- a/tests/test_integrations_material_social_cards.py +++ b/tests/test_integrations_material_social_cards.py @@ -208,6 +208,130 @@ def test_plugin_config_social_cards_enabled_with_directory_urls_disabled(self): feed_parsed = feedparser.parse(Path(tmpdirname) / "feed_rss_updated.xml") self.assertEqual(feed_parsed.bozo, 0) + def test_plugin_config_materialx_social_cards_enabled_but_integration_disabled( + self, + ): + # default reference + cfg_mkdocs = load_config( + str( + Path( + "tests/fixtures/mkdocs_materialx_item_image_social_cards_enabled_but_integration_disabled.yml" + ).resolve() + ) + ) + + integration_social_cards = IntegrationMaterialSocialCards( + mkdocs_config=cfg_mkdocs, + switch_force=cfg_mkdocs.plugins.get("rss").config.use_material_social_cards, + ) + self.assertTrue(integration_social_cards.IS_THEME_MATERIAL) + self.assertTrue(integration_social_cards.IS_SOCIAL_PLUGIN_ENABLED) + self.assertTrue(integration_social_cards.IS_SOCIAL_PLUGIN_CARDS_ENABLED) + self.assertFalse(integration_social_cards.IS_ENABLED) + + def test_plugin_config_materialx_social_cards_enabled(self): + # default reference + cfg_mkdocs = load_config( + str( + Path( + "tests/fixtures/mkdocs_materialx_item_image_social_cards_enabled_site.yml" + ).resolve() + ) + ) + + integration_social_cards = IntegrationMaterialSocialCards( + mkdocs_config=cfg_mkdocs + ) + self.assertTrue(integration_social_cards.IS_THEME_MATERIAL) + self.assertTrue(integration_social_cards.IS_SOCIAL_PLUGIN_ENABLED) + self.assertTrue(integration_social_cards.IS_SOCIAL_PLUGIN_CARDS_ENABLED) + self.assertTrue(integration_social_cards.IS_ENABLED) + + def test_plugin_config_materialx_social_cards_disabled(self): + # default reference + cfg_mkdocs = load_config( + str( + Path( + "tests/fixtures/mkdocs_materialx_item_image_social_cards_disabled_site.yml" + ).resolve() + ) + ) + + integration_social_cards = IntegrationMaterialSocialCards( + mkdocs_config=cfg_mkdocs + ) + self.assertTrue(integration_social_cards.IS_THEME_MATERIAL) + self.assertFalse(integration_social_cards.IS_SOCIAL_PLUGIN_ENABLED) + self.assertFalse(integration_social_cards.IS_SOCIAL_PLUGIN_CARDS_ENABLED) + self.assertFalse(integration_social_cards.IS_ENABLED) + + def test_plugin_config_materialx_social_plugin_enabled_but_cards_disabled(self): + # default reference + cfg_mkdocs = load_config( + str( + Path( + "tests/fixtures/mkdocs_materialx_item_image_social_enabled_but_cards_disabled.yml" + ).resolve() + ) + ) + + integration_social_cards = IntegrationMaterialSocialCards( + mkdocs_config=cfg_mkdocs + ) + self.assertTrue(integration_social_cards.IS_THEME_MATERIAL) + self.assertTrue(integration_social_cards.IS_SOCIAL_PLUGIN_ENABLED) + self.assertFalse(integration_social_cards.IS_SOCIAL_PLUGIN_CARDS_ENABLED) + self.assertFalse(integration_social_cards.IS_ENABLED) + + def test_plugin_config_materialx_social_cards_enabled_with_directory_urls_disabled( + self, + ): + """Test case described in https://github.com/Guts/mkdocs-rss-plugin/issues/319.""" + # default reference + cfg_mkdocs = load_config( + str( + Path( + "tests/fixtures/mkdocs_materialx_item_image_social_cards_blog_directory_url_disabled.yml" + ).resolve() + ) + ) + + integration_social_cards = IntegrationMaterialSocialCards( + mkdocs_config=cfg_mkdocs + ) + self.assertTrue(integration_social_cards.IS_THEME_MATERIAL) + self.assertTrue(integration_social_cards.IS_SOCIAL_PLUGIN_ENABLED) + self.assertTrue(integration_social_cards.IS_SOCIAL_PLUGIN_CARDS_ENABLED) + self.assertIsInstance(integration_social_cards.social_cards_dir, str) + + with tempfile.TemporaryDirectory( + prefix=f"{__title_clean__.lower()}_" + ) as tmpdirname: + cli_result = self.build_docs_setup( + testproject_path="docs", + mkdocs_yml_filepath=Path( + "tests/fixtures/mkdocs_materialx_item_image_social_cards_blog_directory_url_disabled.yml" + ), + output_path=tmpdirname, + strict=False, + ) + if cli_result.exception is not None: + e = cli_result.exception + logger.debug(format_exception(type(e), e, e.__traceback__)) + + self.assertEqual(cli_result.exit_code, 0) + self.assertIsNone(cli_result.exception) + + # created items + feed_parsed = feedparser.parse(Path(tmpdirname) / "feed_rss_created.xml") + self.assertEqual(feed_parsed.bozo, 0) + for feed_item in feed_parsed.entries: + self.assertTrue(hasattr(feed_item, "enclosures")) + + # updated items + feed_parsed = feedparser.parse(Path(tmpdirname) / "feed_rss_updated.xml") + self.assertEqual(feed_parsed.bozo, 0) + def test_simple_build(self): with tempfile.TemporaryDirectory() as tmpdirname: cli_result = self.build_docs_setup( diff --git a/tests/test_no_material.py b/tests/test_no_material.py index 65633f7f..f4ff0b00 100644 --- a/tests/test_no_material.py +++ b/tests/test_no_material.py @@ -81,6 +81,8 @@ def test_build_without_material_theme(self): with patch.dict( sys.modules, { + "materialx": None, + "materialx.emoji": None, "material.plugins": None, "material.plugins.blog": None, "material.plugins.blog.plugin": None, @@ -132,6 +134,8 @@ def test_build_with_material_config_but_theme_not_installed(self): with patch.dict( sys.modules, { + "materialx": None, + "materialx.emoji": None, "material.plugins": None, "material.plugins.blog": None, "material.plugins.blog.plugin": None, @@ -172,6 +176,8 @@ def test_page_processing_without_material(self): with patch.dict( sys.modules, { + "materialx": None, + "materialx.emoji": None, "material.plugins": None, "material.plugins.blog": None, "material.plugins.blog.plugin": None,