### Apache Airflow version

main (development)

### Operating System

Any

### Versions of Apache Airflow Providers

_No response_

### Deployment

Other

### Deployment details

_No response_

### What happened

`tests/core/test_providers_manager.py::TestProviderManager::test_hooks` is broken on 3.6 by #18209 since newer `importlib-resources` versions uses a different implementation and the mocks no longer works. This was actually visible before merging; all and only 3.6 checks in the PR failed. Let’s be more careful identifying CI failure patterns in the future 🙂 

Not exactly sure how to fix yet. I believe the breaking changes were introduced in [importlib-resources 5.2](https://github.com/python/importlib_resources/blob/v5.2.2/CHANGES.rst#v520), but restricting `<5.2` is not a long-term fix since the same version is also in the Python 3.10 stdlib and will bite us again very soon.

### What you expected to happen

_No response_

### How to reproduce

```
$ ./breeze tests -- tests/core/test_providers_manager.py::TestProviderManager::test_hooks
...
tests/core/test_providers_manager.py F                                                                  [100%]

================================================== FAILURES ==================================================
_______________________________________ TestProviderManager.test_hooks _______________________________________

self = <test_providers_manager.TestProviderManager testMethod=test_hooks>
mock_import_module = <MagicMock name='import_module' id='139679504564520'>

    @patch('airflow.providers_manager.importlib.import_module')
    def test_hooks(self, mock_import_module):
        # Compat with importlib_resources
        mock_import_module.return_value.__spec__ = Mock()
        with pytest.warns(expected_warning=None) as warning_records:
            with self._caplog.at_level(logging.WARNING):
>               provider_manager = ProvidersManager()

tests/core/test_providers_manager.py:123:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
airflow/providers_manager.py:242: in __init__
    self._provider_schema_validator = _create_provider_info_schema_validator()
airflow/providers_manager.py:92: in _create_provider_info_schema_validator
    schema = json.loads(importlib_resources.read_text('airflow', 'provider_info.schema.json'))
/usr/local/lib/python3.6/site-packages/importlib_resources/_legacy.py:46: in read_text
    with open_text(package, resource, encoding, errors) as fp:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

package = 'airflow', resource = 'provider_info.schema.json', encoding = 'utf-8', errors = 'strict'

    def open_text(
        package: Package,
        resource: Resource,
        encoding: str = 'utf-8',
        errors: str = 'strict',
    ) -> TextIO:
        """Return a file-like object opened for text reading of the resource."""
>       return (_common.files(package) / _common.normalize_path(resource)).open(
            'r', encoding=encoding, errors=errors
        )
E       TypeError: unsupported operand type(s) for /: 'Mock' and 'str'
```

### Anything else

_No response_

### Are you willing to submit PR?

- [X] Yes I am willing to submit a PR!

### Code of Conduct

- [X] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)

setup.py
"""
    Replaces extra requirement with provider package. The intention here is that when
    the provider is added as dependency of extra, there is no need to add the dependencies
    separately. This is not needed and even harmful, because in case of future versions of
    the provider, the requirements might change, so hard-coding requirements from the version
    that was available at the release time might cause dependency conflicts in the future.
    Say for example that you have salesforce provider with those deps:
    { 'salesforce': ['simple-salesforce>=1.0.0', 'tableauserverclient'] }
    Initially ['salesforce'] extra has those requirements and it works like that when you install
    it when INSTALL_PROVIDERS_FROM_SOURCES is set to `true` (during the development). However, when
    the production installation is used, The dependencies are changed:
    { 'salesforce': ['apache-airflow-providers-salesforce'] }
    And then, 'apache-airflow-providers-salesforce' package has those 'install_requires' dependencies:
            ['simple-salesforce>=1.0.0', 'tableauserverclient']
    So transitively 'salesforce' extra has all the requirements it needs and in case the provider
    changes it's dependencies, they will transitively change as well.
    In the constraint mechanism we save both - provider versions and it's dependencies
    version, which means that installation using constraints is repeatable.
    :param extra: Name of the extra to add providers to
    :param providers: list of provider ids
    """
    EXTRAS_REQUIREMENTS[extra] = [
        get_provider_package_from_package_id(package_name) for package_name in providers
    ]
def add_provider_packages_to_extra_requirements(extra: str, providers: List[str]) -> None: