test_plugin_manager_handler.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. # Copyright (c) Jupyter Development Team.
  2. # Distributed under the terms of the Modified BSD License.
  3. import json
  4. from jupyterlab_server.config import get_static_page_config
  5. from jupyterlab.commands import get_app_info, lock_extension, unlock_extension
  6. from jupyterlab.extensions.manager import PluginManager
  7. from jupyterlab.handlers.plugin_manager_handler import PluginHandler, plugins_handler_path
  8. def plugin_handler_labapp(jp_serverapp, make_labserver_extension_app):
  9. app = make_labserver_extension_app()
  10. app._link_jupyter_server_extension(jp_serverapp)
  11. # Simulate jupyter_server page config data.
  12. page_config = jp_serverapp.web_app.settings.setdefault("page_config_data", {})
  13. page_config.update(get_static_page_config(level="sys_prefix"))
  14. lock_rules = frozenset(
  15. {rule for rule, value in page_config.get("lockedExtensions", {}).items() if value}
  16. )
  17. app.handlers.extend(
  18. [
  19. (
  20. plugins_handler_path,
  21. PluginHandler,
  22. {
  23. "manager": PluginManager(
  24. ext_options={
  25. "lock_rules": lock_rules,
  26. "all_locked": False,
  27. }
  28. )
  29. },
  30. ),
  31. ]
  32. )
  33. return app
  34. async def test_pluginHandler_lock_extension(jp_serverapp, jp_fetch, make_labserver_extension_app):
  35. extension1 = "@jupyterlab/application-extension:status"
  36. extension2 = "@jupyterlab/theme-dark-extension:plugin"
  37. info = get_app_info()
  38. assert info["locked"].get(extension1, False) is False
  39. lock_extension(extension1)
  40. lock_extension(extension2)
  41. info = get_app_info()
  42. assert info["locked"].get(extension1, False) is True
  43. assert info["locked"].get(extension2, False) is True
  44. # Initialize the labserver
  45. labapp = plugin_handler_labapp(
  46. jp_serverapp=jp_serverapp, make_labserver_extension_app=make_labserver_extension_app
  47. )
  48. labapp.initialize()
  49. # Hit and verify the pluginHandler
  50. response = await jp_fetch("lab", "api", "plugins", method="GET")
  51. payload = json.loads(response.body)
  52. assert response.code == 200
  53. assert sorted(payload["lockRules"]) == sorted([extension1, extension2])
  54. async def test_pluginHandler_unlock_extension(jp_serverapp, jp_fetch, make_labserver_extension_app):
  55. extension = "@jupyterlab/application-extension:status"
  56. lock_extension(extension)
  57. info = get_app_info()
  58. assert info["locked"].get(extension, False) is True
  59. unlock_extension(extension)
  60. info = get_app_info()
  61. assert info["locked"].get(extension, False) is False
  62. # Initialize the labserver
  63. labapp = plugin_handler_labapp(
  64. jp_serverapp=jp_serverapp, make_labserver_extension_app=make_labserver_extension_app
  65. )
  66. labapp.initialize()
  67. # Hit and verify the pluginHandler
  68. response = await jp_fetch("lab", "api", "plugins", method="GET")
  69. payload = json.loads(response.body)
  70. assert response.code == 200
  71. assert payload["lockRules"] == []