diff --git a/src/main/java/com/jobdri/jobdri_api/domain/jobposting/service/JobPostingClassificationService.java b/src/main/java/com/jobdri/jobdri_api/domain/jobposting/service/JobPostingClassificationService.java index b48be9c..0e02c6a 100644 --- a/src/main/java/com/jobdri/jobdri_api/domain/jobposting/service/JobPostingClassificationService.java +++ b/src/main/java/com/jobdri/jobdri_api/domain/jobposting/service/JobPostingClassificationService.java @@ -30,8 +30,7 @@ private String buildSearchQuery(JobPostingExtractResponse extracted) { normalize(extracted.jobTitle()), normalize(extracted.task()), normalize(extracted.requirements()), - normalize(extracted.preferredQualifications()), - normalize(extracted.rawText()) + normalize(extracted.preferredQualifications()) ).trim(); } diff --git a/src/main/java/com/jobdri/jobdri_api/domain/user/entity/User.java b/src/main/java/com/jobdri/jobdri_api/domain/user/entity/User.java index e6d4b70..aaccabb 100644 --- a/src/main/java/com/jobdri/jobdri_api/domain/user/entity/User.java +++ b/src/main/java/com/jobdri/jobdri_api/domain/user/entity/User.java @@ -74,7 +74,7 @@ public static User signup( .role(UserRole.USER) .socialType(SocialType.LOCAL) .socialId(null) - .credit(0) + .credit(1) .build(); } @@ -92,7 +92,7 @@ public static User createSocialUser( .socialType(socialType) .socialId(socialId) .role(UserRole.USER) - .credit(0) + .credit(1) .build(); } diff --git a/src/test/java/com/jobdri/jobdri_api/domain/jobposting/service/JobPostingClassificationServiceTest.java b/src/test/java/com/jobdri/jobdri_api/domain/jobposting/service/JobPostingClassificationServiceTest.java new file mode 100644 index 0000000..97348bb --- /dev/null +++ b/src/test/java/com/jobdri/jobdri_api/domain/jobposting/service/JobPostingClassificationServiceTest.java @@ -0,0 +1,58 @@ +package com.jobdri.jobdri_api.domain.jobposting.service; + +import com.jobdri.jobdri_api.domain.classification.repository.DetailClassificationRepository; +import com.jobdri.jobdri_api.domain.jobposting.dto.response.JobPostingExtractResponse; +import com.jobdri.jobdri_api.domain.jobposting.repository.JobPostingClassificationCandidateProjection; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class JobPostingClassificationServiceTest { + + @Mock + private DetailClassificationRepository detailClassificationRepository; + + @InjectMocks + private JobPostingClassificationService jobPostingClassificationService; + + @Test + @DisplayName("후보 검색 쿼리는 rawText를 제외한 구조화 필드만 사용한다") + void findCandidatesUsesStructuredFieldsOnly() { + JobPostingExtractResponse extracted = new JobPostingExtractResponse( + "해커스 교육그룹", + "클라우드 엔지니어 (CLOUD Engineer)", + "클라우드 운영 및 관리", + "1. 리눅스 환경 사용 경험 필수\n2. 네트워크 지식 필수", + "1. AWS, NCP, GCP, azure 클라우드 운영 경험", + "해커스 교육그룹 개발자 RECRUIT 소프트웨어 교육 교육 기획", + 0.9 + ); + when(detailClassificationRepository.findTopCandidatesByTrigram(org.mockito.ArgumentMatchers.anyString(), org.mockito.ArgumentMatchers.eq(5))) + .thenReturn(List.of()); + + jobPostingClassificationService.findCandidates(extracted, 5); + + ArgumentCaptor queryCaptor = ArgumentCaptor.forClass(String.class); + verify(detailClassificationRepository).findTopCandidatesByTrigram(queryCaptor.capture(), org.mockito.ArgumentMatchers.eq(5)); + + String query = queryCaptor.getValue(); + assertThat(query).contains("클라우드 엔지니어 (CLOUD Engineer)"); + assertThat(query).contains("클라우드 운영 및 관리"); + assertThat(query).contains("리눅스 환경 사용 경험 필수"); + assertThat(query).contains("AWS, NCP, GCP, azure 클라우드 운영 경험"); + assertThat(query).doesNotContain("해커스 교육그룹"); + assertThat(query).doesNotContain("소프트웨어 교육"); + assertThat(query).doesNotContain("교육 기획"); + } +}