Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,8 @@ private Map<String, Object> createRequestBody(FollowQuestionAiRequest request) {
}

private InterviewMajor systemMajor(FollowQuestionAiRequest request) {
if (isGeneralInterview(request)) {
// 시스템 프롬프트는 면접 전체의 직무로 정한다. HR·CEO처럼 전공이 없는 면접관 차례에도 같은 직무 면접이다.
if (request.getInterviewMajor() != null) {
return request.getInterviewMajor();
}
return request.getMajor() != null && request.getMajor().isGeneral() ? null : request.getMajor();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,37 @@ class AiQuestionClientImplTest {
: "직무 판단의 근거와 대안, 본인이 한 일을 확인하세요.");
}

@ParameterizedTest
@org.junit.jupiter.params.provider.EnumSource(value = InterviewRole.class, names = {"HR", "CEO"})
void 비개발_면접은_전공_없는_면접관_차례에도_세션_직무로_시스템_프롬프트를_정한다(InterviewRole role) {
FollowQuestionAiRequest request = sessionRequest(InterviewMajor.QA_ENGINEER, null, role);
Map<?, ?> body = ReflectionTestUtils.invokeMethod(client(), "createRequestBody", request);
assertThat((String) body.get("system")).startsWith("당신은 QA 엔지니어 직무 면접에서");
}

@Test
void 개발_면접의_HR_차례는_개발자_기술_면접을_유지한다() throws Exception {
FollowQuestionAiRequest request = sessionRequest(InterviewMajor.BACKEND, null, InterviewRole.HR);
Map<?, ?> body = ReflectionTestUtils.invokeMethod(client(), "createRequestBody", request);
assertThat(body.get("system")).isEqualTo(originalPrompt("system"));
}

@Test
void 세션_직무가_없으면_면접관_전공으로_시스템_프롬프트를_정한다() throws Exception {
FollowQuestionAiRequest request = sessionRequest(null, InterviewMajor.QA_ENGINEER, InterviewRole.TECH);
Map<?, ?> body = ReflectionTestUtils.invokeMethod(client(), "createRequestBody", request);
assertThat(body.get("system")).isEqualTo(jobPrompt("nondev-qa-system"));
}

private FollowQuestionAiRequest sessionRequest(InterviewMajor session, InterviewMajor persona, InterviewRole role) {
return FollowQuestionAiRequest.builder().sessionId("session-id")
.interviewId(1L).userId(2L).personaId(3L)
.personality(InterviewType.FRIENDLY).tone(InterviewTone.GENTLE)
.major(persona).interviewMajor(session).level(InterviewLevel.NORMAL).role(role)
.questionId(4L).questionCategory("tech_choice").questionContent("질문")
.expectedAnswer("참고 답안").answerContent("답변").responseTime(10).build();
}

private FollowQuestionAiRequest jobRequest(InterviewMajor major, InterviewRole role) {
return FollowQuestionAiRequest.builder().sessionId("session-id")
.interviewId(1L).userId(2L).personaId(3L)
Expand Down