Skip to content

Commit 11feed3

Browse files
kangcheolungclaude
andcommitted
fix: 벡터 길이 검증 추가, ArgumentCaptor로 save 인자 검증 강화
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 3997de7 commit 11feed3

2 files changed

Lines changed: 17 additions & 7 deletions

File tree

src/main/java/com/opensource/docgrid/domain/embedding/service/query/QueryEmbeddingService.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,10 @@ public EmbedResult embed(String text) {
4444
throw new DocGridException(ErrorCode.EMBEDDING_SERVER_UNAVAILABLE);
4545
}
4646

47-
if (response == null || response.dimension() != activeModel.getDimension()) {
47+
if (response == null
48+
|| response.vector() == null
49+
|| response.vector().length != activeModel.getDimension()
50+
|| response.dimension() != activeModel.getDimension()) {
4851
log.error("임베딩 차원 불일치: expected={}, actual={}",
4952
activeModel.getDimension(), response == null ? "null" : response.dimension());
5053
throw new DocGridException(ErrorCode.EMBEDDING_DIMENSION_MISMATCH);

src/test/java/com/opensource/docgrid/domain/search/service/command/SearchQueryCommandServiceTest.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.junit.jupiter.api.DisplayName;
1010
import org.junit.jupiter.api.Test;
1111
import org.junit.jupiter.api.extension.ExtendWith;
12+
import org.mockito.ArgumentCaptor;
1213
import org.mockito.InjectMocks;
1314
import org.mockito.Mock;
1415
import org.mockito.junit.jupiter.MockitoExtension;
@@ -17,6 +18,7 @@
1718
import com.opensource.docgrid.domain.embedding.fixture.EmbeddingModelFixture;
1819
import com.opensource.docgrid.domain.search.entity.SearchQuery;
1920
import com.opensource.docgrid.domain.search.enums.ResultStatus;
21+
import com.opensource.docgrid.domain.search.enums.SearchType;
2022
import com.opensource.docgrid.domain.search.fixture.SearchQueryFixture;
2123
import com.opensource.docgrid.domain.search.repository.SearchQueryRepository;
2224

@@ -31,19 +33,24 @@ class SearchQueryCommandServiceTest {
3133
private SearchQueryRepository searchQueryRepository;
3234

3335
@Test
34-
@DisplayName("createProcessing: PROCESSING 상태로 SearchQuery를 저장한다")
36+
@DisplayName("createProcessing: PROCESSING 상태와 VECTOR 타입으로 SearchQuery를 저장한다")
3537
void createProcessing_savesWithProcessingStatus() {
3638
EmbeddingModel model = EmbeddingModelFixture.createDefaultModel();
37-
SearchQuery saved = SearchQueryFixture.createProcessing();
38-
given(searchQueryRepository.save(any(SearchQuery.class))).willReturn(saved);
39+
given(searchQueryRepository.save(any(SearchQuery.class))).willAnswer(i -> i.getArgument(0));
3940

40-
SearchQuery result = searchQueryCommandService.createProcessing(
41+
searchQueryCommandService.createProcessing(
4142
null, null, SearchQueryFixture.QUERY_TEXT,
4243
model, SearchQueryFixture.VECTOR, SearchQueryFixture.TOP_K
4344
);
4445

45-
assertThat(result.getStatus()).isEqualTo(ResultStatus.PROCESSING);
46-
then(searchQueryRepository).should(times(1)).save(any(SearchQuery.class));
46+
ArgumentCaptor<SearchQuery> captor = ArgumentCaptor.forClass(SearchQuery.class);
47+
then(searchQueryRepository).should(times(1)).save(captor.capture());
48+
49+
SearchQuery saved = captor.getValue();
50+
assertThat(saved.getStatus()).isEqualTo(ResultStatus.PROCESSING);
51+
assertThat(saved.getSearchType()).isEqualTo(SearchType.VECTOR);
52+
assertThat(saved.getTopK()).isEqualTo(SearchQueryFixture.TOP_K);
53+
assertThat(saved.getQueryText()).isEqualTo(SearchQueryFixture.QUERY_TEXT);
4754
}
4855

4956
@Test

0 commit comments

Comments
 (0)