This is an automated email from the ASF dual-hosted git repository.

voidmatcha pushed a commit to branch temp/seung-00/assistant-transport-base
in repository https://gitbox.apache.org/repos/asf/zeppelin.git

commit 2b7b903f055046e924c3be5ff31ce0f42efd1099
Author: YONGJAE LEE <[email protected]>
AuthorDate: Thu Oct 8 19:13:42 2026 +0900

    Return not found for missing assistant conversations
---
 .../service/assistant/AssistantService.java        |  2 +-
 .../service/assistant/AssistantServiceTest.java    | 30 ++++++++++++++++++++++
 2 files changed, 31 insertions(+), 1 deletion(-)

diff --git 
a/zeppelin-server/src/main/java/org/apache/zeppelin/service/assistant/AssistantService.java
 
b/zeppelin-server/src/main/java/org/apache/zeppelin/service/assistant/AssistantService.java
index b259855ba6..eae06d9acd 100644
--- 
a/zeppelin-server/src/main/java/org/apache/zeppelin/service/assistant/AssistantService.java
+++ 
b/zeppelin-server/src/main/java/org/apache/zeppelin/service/assistant/AssistantService.java
@@ -129,7 +129,7 @@ public class AssistantService {
 
     return notebook.processNote(noteId, note -> {
       if (note == null) throw new NoteNotFoundException(noteId);
-      return conversationRepository.find(noteId, conversationId).orElseThrow();
+      return conversationRepository.find(noteId, 
conversationId).orElseThrow(NotFoundException::new);
     });
   }
 
diff --git 
a/zeppelin-server/src/test/java/org/apache/zeppelin/service/assistant/AssistantServiceTest.java
 
b/zeppelin-server/src/test/java/org/apache/zeppelin/service/assistant/AssistantServiceTest.java
index cb4b5630e7..6d8fb618ae 100644
--- 
a/zeppelin-server/src/test/java/org/apache/zeppelin/service/assistant/AssistantServiceTest.java
+++ 
b/zeppelin-server/src/test/java/org/apache/zeppelin/service/assistant/AssistantServiceTest.java
@@ -34,6 +34,7 @@ import java.util.function.Consumer;
 import jakarta.ws.rs.BadRequestException;
 import jakarta.ws.rs.ClientErrorException;
 import jakarta.ws.rs.ForbiddenException;
+import jakarta.ws.rs.NotFoundException;
 import jakarta.ws.rs.ServiceUnavailableException;
 import org.apache.zeppelin.notebook.AuthorizationService;
 import org.apache.zeppelin.notebook.Note;
@@ -129,6 +130,35 @@ class AssistantServiceTest {
     verifyNoInteractions(repository);
   }
 
+  @Test
+  void rejectsMissingConversation() throws Exception {
+    var notebook = mock(Notebook.class);
+    when(notebook.processNote(eq("noteId"), any()))
+        .thenAnswer(invocation -> ((NoteProcessor<?>) 
invocation.getArgument(1)).process(new Note()));
+    var authorization = mock(AuthorizationService.class);
+    when(authorization.isReader("noteId", userAndRoles)).thenReturn(true);
+    var repository = mock(ConversationRepository.class);
+    when(repository.find("noteId", "missing")).thenReturn(Optional.empty());
+    var sut = new AssistantService(true, notebook, null, null, authorization, 
repository);
+
+    assertThrows(NotFoundException.class,
+        () -> sut.getConversation("noteId", "missing", userAndRoles));
+    assertThrows(NotFoundException.class,
+        () -> sut.listMessages("noteId", "missing", null, 10, userAndRoles));
+    assertThrows(NotFoundException.class,
+        () -> sut.updateTitle("noteId", "missing", "title", 
authInfo.getUser(), userAndRoles));
+    assertThrows(NotFoundException.class,
+        () -> sut.deleteConversation("noteId", "missing", authInfo.getUser(), 
userAndRoles));
+
+    var events = new ArrayList<AssistantEventPayload>();
+    sut.sendMessage("noteId", "missing", "hi", authInfo, userAndRoles,
+        (type, payload) -> events.add(payload));
+    assertEquals(1, events.size());
+    assertEquals(404, ((AssistantEventPayload.RunFailed) 
events.get(0)).error.status);
+    verify(repository, never()).update(any(), any());
+    verify(repository, never()).delete(anyString(), anyString());
+  }
+
   @Test
   void releasesSlotAfterFailure() throws Exception {
     var notebook = mock(Notebook.class);

Reply via email to