text: from mock import patch
  
  import storage.common
  
  class MockStorage:
      PATCH_METHODS = ("get", "set", "delete")
  
      def __init__(self):
          self.namespace = {}
          self.patches = [
              patch(storage.common, method, getattr(self, method))
              for method in self.PATCH_METHODS
          ]
  
      def set(self, app: int, key: int, data: bytes, public: bool = False) -> None:
          self.namespace.setdefault(app, {})
          self.namespace[app][key] = data
  
      def get(self, app: int, key: int, public: bool = False) -> Optional[bytes]:
          self.namespace.setdefault(app, {})
          return self.namespace[app].get(key)
  
      def delete(self, app: int, key: int, public: bool = False) -> None:
          self.namespace.setdefault(app, {})
          self.namespace[app].pop(key, None)
  
      def __enter__(self):
          for patch in self.patches:
              patch.__enter__()
          return self
  
      def __exit__(self, exc_type, exc_value, tb):
          for patch in self.patches:
              patch.__exit__(exc_type, exc_value, tb)
  
  
  def mock_storage(func):
      def inner(*args, **kwargs):
          with MockStorage():
              return func(*args, **kwargs)
  
      return inner
  