mirror of
https://github.com/iflytek/skillhub.git
synced 2026-10-07 02:57:51 +00:00
test(search): cover latest-version reindex flow
This commit is contained in:
parent
b10a9f76db
commit
aa8f7afc8b
2 changed files with 90 additions and 0 deletions
|
|
@ -0,0 +1,36 @@
|
|||
package com.iflytek.skillhub.search.event;
|
||||
|
||||
import com.iflytek.skillhub.domain.event.SkillPublishedEvent;
|
||||
import com.iflytek.skillhub.domain.event.SkillStatusChangedEvent;
|
||||
import com.iflytek.skillhub.domain.skill.SkillStatus;
|
||||
import com.iflytek.skillhub.search.SearchIndexService;
|
||||
import com.iflytek.skillhub.search.SearchRebuildService;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
class SearchIndexEventListenerTest {
|
||||
|
||||
@Test
|
||||
void skillPublishedEventShouldTriggerSkillRebuild() {
|
||||
SearchRebuildService searchRebuildService = mock(SearchRebuildService.class);
|
||||
SearchIndexService searchIndexService = mock(SearchIndexService.class);
|
||||
SearchIndexEventListener listener = new SearchIndexEventListener(searchRebuildService, searchIndexService);
|
||||
|
||||
listener.onSkillPublished(new SkillPublishedEvent(42L, 100L, "reviewer-1"));
|
||||
|
||||
verify(searchRebuildService).rebuildBySkill(42L);
|
||||
}
|
||||
|
||||
@Test
|
||||
void archivedStatusShouldRemoveSearchDocument() {
|
||||
SearchRebuildService searchRebuildService = mock(SearchRebuildService.class);
|
||||
SearchIndexService searchIndexService = mock(SearchIndexService.class);
|
||||
SearchIndexEventListener listener = new SearchIndexEventListener(searchRebuildService, searchIndexService);
|
||||
|
||||
listener.onSkillStatusChanged(new SkillStatusChangedEvent(42L, SkillStatus.ACTIVE, SkillStatus.ARCHIVED));
|
||||
|
||||
verify(searchIndexService).remove(42L);
|
||||
}
|
||||
}
|
||||
|
|
@ -91,4 +91,58 @@ class PostgresSearchRebuildServiceTest {
|
|||
assertThat(document.searchText()).contains("openai");
|
||||
assertThat(document.searchText()).doesNotContain("# ignored");
|
||||
}
|
||||
|
||||
@Test
|
||||
void rebuildBySkill_shouldUseLatestVersionMetadataWhenPublishedVersionAdvances() {
|
||||
SkillRepository skillRepository = mock(SkillRepository.class);
|
||||
NamespaceRepository namespaceRepository = mock(NamespaceRepository.class);
|
||||
SkillVersionRepository skillVersionRepository = mock(SkillVersionRepository.class);
|
||||
SearchIndexService searchIndexService = mock(SearchIndexService.class);
|
||||
|
||||
Skill skill = new Skill(7L, "smart-agent", "owner-1", SkillVisibility.PUBLIC);
|
||||
skill.setDisplayName("Smart Agent");
|
||||
skill.setSummary("Builds workflows");
|
||||
skill.setLatestVersionId(100L);
|
||||
|
||||
Namespace namespace = new Namespace("team-ai", "Team AI", "owner-1");
|
||||
|
||||
SkillVersion latestVersion = new SkillVersion(1L, "1.3.0", "owner-1");
|
||||
latestVersion.setParsedMetadataJson("""
|
||||
{
|
||||
"name": "Smart Agent",
|
||||
"description": "Builds workflows",
|
||||
"version": "1.3.0",
|
||||
"frontmatter": {
|
||||
"tags": ["中文搜索"],
|
||||
"keywords": ["智能体"],
|
||||
"maintainer": "新版维护者"
|
||||
}
|
||||
}
|
||||
""");
|
||||
|
||||
when(skillRepository.findById(1L)).thenReturn(Optional.of(skill));
|
||||
when(namespaceRepository.findById(7L)).thenReturn(Optional.of(namespace));
|
||||
when(skillVersionRepository.findById(100L)).thenReturn(Optional.of(latestVersion));
|
||||
|
||||
PostgresSearchRebuildService service = new PostgresSearchRebuildService(
|
||||
skillRepository,
|
||||
namespaceRepository,
|
||||
skillVersionRepository,
|
||||
searchIndexService,
|
||||
new SearchTextTokenizer()
|
||||
);
|
||||
|
||||
service.rebuildBySkill(1L);
|
||||
|
||||
ArgumentCaptor<SkillSearchDocument> captor = ArgumentCaptor.forClass(SkillSearchDocument.class);
|
||||
verify(searchIndexService).index(captor.capture());
|
||||
|
||||
SkillSearchDocument document = captor.getValue();
|
||||
assertThat(document.keywords()).contains("中文搜索");
|
||||
assertThat(document.keywords()).contains("中文");
|
||||
assertThat(document.keywords()).contains("搜索");
|
||||
assertThat(document.keywords()).contains("智能体");
|
||||
assertThat(document.searchText()).contains("maintainer");
|
||||
assertThat(document.searchText()).contains("新版维护者");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue