diff --git a/djblets/extensions/extension.py b/djblets/extensions/extension.py
index cb02ef0b18d44e2a82462dd28977b95890a0f789..fcd8d6c54a743d3f2ea437f4e7d5f9bdc9365a8b 100644
--- a/djblets/extensions/extension.py
+++ b/djblets/extensions/extension.py
@@ -612,7 +612,7 @@ class ExtensionInfo:
         return (
             importlib_resources.files(self.module_name) /
             PosixPath(path)
-        ).is_file()
+        ).exists()
 
     def extract_resource(
         self,
diff --git a/djblets/extensions/manager.py b/djblets/extensions/manager.py
index 0ae05b9e7a62036f35217dab7f5c2be39ce54de2..9816400ee02240721cda808d0e42008f621d25d6 100644
--- a/djblets/extensions/manager.py
+++ b/djblets/extensions/manager.py
@@ -1364,7 +1364,7 @@ class ExtensionManager:
     def _install_extension_media_internal(
         self,
         ext_class: Type[Extension],
-    ):
+    ) -> None:
         """Install static media for an extension.
 
         This performs any installation necessary for an extension. If the
diff --git a/djblets/extensions/tests/test_extension_info.py b/djblets/extensions/tests/test_extension_info.py
index 7971212e7f07f85c715704ebfb34f0d22754d093..87cfb3c4de831bc05fdcaba3161918f73bd5053e 100644
--- a/djblets/extensions/tests/test_extension_info.py
+++ b/djblets/extensions/tests/test_extension_info.py
@@ -4,12 +4,19 @@ import os
 
 from django.conf import settings
 
+import djblets
 from djblets.extensions.extension import Extension, ExtensionInfo
+from djblets.extensions.testing import ExtensionTestCaseMixin
 from djblets.extensions.tests.base import FakeEntryPoint
 from djblets.testing.testcases import TestCase
 
 
-class ExtensionInfoTests(TestCase):
+class DjbletsTestExtension(Extension):
+    __module__ = 'djblets'
+    id = 'djblets:TestExtension',
+
+
+class ExtensionInfoTests(ExtensionTestCaseMixin, TestCase):
     """Unit tests for djblets.extensions.extension.ExtensionInfo."""
 
     def test_create_from_entrypoint(self):
@@ -101,6 +108,54 @@ class ExtensionInfoTests(TestCase):
                                    extension_id=extension_id,
                                    metadata=expected_metadata)
 
+    def test_has_resource_with_file(self) -> None:
+        """Testing ExtensionInfo.has_resource with file"""
+        self.setup_extension(DjbletsTestExtension, enable=False)
+        extension = DjbletsTestExtension(self.extension_mgr)
+
+        self.assertTrue(extension.info.has_resource('deprecation.py'))
+
+    def test_has_resource_with_dir(self) -> None:
+        """Testing ExtensionInfo.has_resource with directory"""
+        self.setup_extension(DjbletsTestExtension, enable=False)
+        extension = DjbletsTestExtension(self.extension_mgr)
+
+        self.assertTrue(extension.info.has_resource('extensions'))
+
+    def test_has_resource_with_not_found(self) -> None:
+        """Testing ExtensionInfo.has_resource with not found"""
+        self.setup_extension(DjbletsTestExtension, enable=False)
+        extension = DjbletsTestExtension(self.extension_mgr)
+
+        self.assertFalse(extension.info.has_resource('blarghy-blargh'))
+
+    def test_extract_resource_with_file(self) -> None:
+        """Testing ExtensionInfo.has_resource with file"""
+        self.setup_extension(DjbletsTestExtension, enable=False)
+        extension = DjbletsTestExtension(self.extension_mgr)
+
+        self.assertEqual(
+            extension.info.extract_resource('deprecation.py'),
+            os.path.abspath(os.path.join(djblets.__file__, '..',
+                                         'deprecation.py')))
+
+    def test_extract_resource_with_dir(self) -> None:
+        """Testing ExtensionInfo.has_resource with directory"""
+        self.setup_extension(DjbletsTestExtension, enable=False)
+        extension = DjbletsTestExtension(self.extension_mgr)
+
+        self.assertEqual(
+            extension.info.extract_resource('extensions'),
+            os.path.abspath(os.path.join(djblets.__file__, '..',
+                                         'extensions')))
+
+    def test_extract_resource_with_not_found(self) -> None:
+        """Testing ExtensionInfo.has_resource with not found"""
+        self.setup_extension(DjbletsTestExtension, enable=False)
+        extension = DjbletsTestExtension(self.extension_mgr)
+
+        self.assertIsNone(extension.info.extract_resource('blarghy-blargh'))
+
     def _check_extension_info(self, extension_info, app_name, package_name,
                               extension_id, metadata):
         htdocs_path = os.path.join(settings.MEDIA_ROOT, 'ext', package_name)
