def METHOD_NAME(
    monkeypatch, mock_alembic, mock_db_file_name
) -> typing.Callable[[typing.List[str], str, bool, bool], None]:
    def _mock_database(
        revision_history: typing.List[str] = None,
        current_revision: str = "",
        db_file_exists: bool = True,
        db_backup_exists: bool = True,
    ):
        revision_history = revision_history or Constants.revision_history
        def _db_file_exists(file_name: str) -> bool:
            if file_name == mock_db_file_name:
                return db_file_exists
            else:
                return db_backup_exists
        monkeypatch.setattr(os.path, "isfile", _db_file_exists)
        def _current_revision(alembic_config: typing.Any):
            if current_revision != "" and current_revision not in revision_history:
                raise Exception(
                    f"Can't locate revision identified by '{current_revision}'"
                )
            alembic_config.print_stdout(current_revision)
        mock_alembic.current = _current_revision
        def _revision_history(alembic_config: typing.Any):
            for revision in revision_history:
                alembic_config.print_stdout(f"none -> {revision}, revision name")
        mock_alembic.history = _revision_history
    return _mock_database