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
@@ -1,5 +1,6 @@
package com.devoops.dto.response;

import com.devoops.domain.entity.github.pr.ProcessingStatus;
import com.devoops.domain.entity.github.pr.PullRequest;
import com.devoops.domain.entity.github.QuestionAnswer;
import com.devoops.domain.entity.github.pr.RecordStatus;
Expand All @@ -22,6 +23,10 @@ public record PullRequestReadResponse(
@Schema(description = "회고 라밸", example = "feat")
String tag,

@NotNull
@Schema(description = "질문 생성 상태", example = "PROCESSING")
ProcessingStatus processingStatus,

@NotNull
@Schema(description = "기록 상태", example = "PROGRESS")
RecordStatus recordStatus,
Expand Down Expand Up @@ -56,6 +61,7 @@ public static PullRequestReadResponse from(
pullRequest.getId(),
pullRequest.getTitle(),
pullRequest.getTag(),
pullRequest.getProcessingStatus(),
pullRequest.getRecordStatus(),
pullRequest.getPullRequestUrl(),
pullRequest.getMergedAt(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,11 +73,11 @@ private GithubRepository reTrackingOrThrowException(User user, GithubRepository
}

public PullRequests findAllPullRequestsByRepository(User user, long repositoryId, int size, int page) {
return repositoryService.getPullRequestsByRepository(user, repositoryId, size, page);
return repositoryService.getProcessedPullRequestsByRepository(user, repositoryId, size, page);
}

public PullRequests findAllPullRequests(User user, int size, int page) {
return repositoryService.getPullRequests(user, size, page);
return repositoryService.getProcessedPullRequests(user, size, page);
}

public List<GithubRepository> findMyRepositories(User user) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import com.devoops.BaseControllerTest;
import com.devoops.domain.entity.github.answer.Answer;
import com.devoops.domain.entity.github.pr.ProcessingStatus;
import com.devoops.domain.entity.github.repo.GithubRepository;
import com.devoops.domain.entity.github.pr.PullRequest;
import com.devoops.domain.entity.github.question.Question;
Expand Down Expand Up @@ -32,7 +33,7 @@ class AnswerPut {
void 다수_회고를_업데이트한다() {
User user = userGenerator.generate("김건우");
GithubRepository repo = repoGenerator.generate(user, "건우의 레포");
PullRequest pr1 = pullRequestGenerator.generate("PR1", RecordStatus.PENDING, repo, LocalDateTime.now());
PullRequest pr1 = pullRequestGenerator.generate("PR1", RecordStatus.PENDING, ProcessingStatus.DONE, repo, LocalDateTime.now());
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

시그니처 변경 반영 LGTM + 교차 시나리오 테스트 제안

이 컨트롤러는 회고 수정 API를 다루지만, 본 PR의 핵심(처리 완료 PR만 노출)을 시스템 관점에서 담보하려면 PR 목록/조회 컨트롤러에 PROCESSING 배제 E2E 테스트를 추가해 주세요.

🤖 Prompt for AI Agents
gss-api-app/src/test/java/com/devoops/controller/question/QuestionControllerTest.java
around line 36: 현재 회고 수정 컨트롤러 테스트는 시그니처 변경 반영은 되었으나 시스템 관점에서 "처리 중(PROCESSING)인
PR 제외" 보장을 위한 교차 시나리오가 부족합니다; 테스트에 PROCESSING 상태의 PullRequest를
생성(pullRequestGenerator)하고, DONE·PENDING 등 다른 상태의 PR도 생성한 뒤 PR 목록 및 단건 조회 API를
호출하여 응답에 PROCESSING 상태 PR이 포함되지 않는지(그리고 DONE 등 허용된 상태만 노출되는지) 단언(assert)하도록 E2E
스타일 테스트를 추가하세요; 필요하면 Mock 인증/권한과 repo 연결을 설정하고, 생성한 PR들의 상태별 노출 여부를 각각 검증하는
케이스들을 추가해 누락 없이 검증되도록 구현하세요.

Question question1 = questionGenerator.generate(pr1, "질문1");
Question question2 = questionGenerator.generate(pr1, "질문2");
Answer answer1 = answerGenerator.generate(question1, "answer1");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.devoops.controller.repository;

import com.devoops.BaseControllerTest;
import com.devoops.domain.entity.github.pr.ProcessingStatus;
import com.devoops.domain.entity.github.repo.GithubRepository;
import com.devoops.domain.entity.github.pr.PullRequest;
import com.devoops.domain.entity.github.pr.RecordStatus;
Expand All @@ -27,9 +28,9 @@ class GetRepositoryPullRequests {
AccessToken accessToken = tokenManager.createAccessToken(user.getId());
GithubRepository repo = repoGenerator.generate(user, "김건우의 레포지토리");

PullRequest pr1 = pullRequestGenerator.generate("5분전 PR", RecordStatus.PENDING, repo, now.minusMinutes(5L));
PullRequest pr2 = pullRequestGenerator.generate("3분전 PR", RecordStatus.PENDING, repo, now.minusMinutes(3L));
PullRequest pr3 = pullRequestGenerator.generate("3분전 PR", RecordStatus.PENDING, repo, now.minusMinutes(1L));
PullRequest pr1 = pullRequestGenerator.generate("5분전 PR", RecordStatus.PENDING, ProcessingStatus.DONE, repo, now.minusMinutes(5L));
PullRequest pr2 = pullRequestGenerator.generate("3분전 PR", RecordStatus.PENDING, ProcessingStatus.DONE, repo, now.minusMinutes(3L));
PullRequest pr3 = pullRequestGenerator.generate("3분전 PR", RecordStatus.PENDING, ProcessingStatus.DONE, repo, now.minusMinutes(1L));

RestAssured.given()
.contentType(ContentType.JSON)
Expand All @@ -49,7 +50,7 @@ class GetRepositoryPullRequests {
AccessToken accessToken = tokenManager.createAccessToken(seonwoo.getId());
GithubRepository repo = repoGenerator.generate(beomgeun, "범근형의 레포지토리");

PullRequest pr1 = pullRequestGenerator.generate("5분전 PR", RecordStatus.PENDING, repo, now.minusMinutes(5L));
PullRequest pr1 = pullRequestGenerator.generate("5분전 PR", RecordStatus.PENDING, ProcessingStatus.DONE, repo, now.minusMinutes(5L));

RestAssured.given()
.contentType(ContentType.JSON)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.devoops.domain.entity.github.answer.Answer;
import com.devoops.domain.entity.github.answer.AnswerRanking;
import com.devoops.domain.entity.github.answer.AnswerRankings;
import com.devoops.domain.entity.github.pr.ProcessingStatus;
import com.devoops.domain.entity.github.repo.GithubRepository;
import com.devoops.domain.entity.github.pr.PullRequest;
import com.devoops.domain.entity.github.question.Question;
Expand Down Expand Up @@ -35,8 +36,8 @@ class Push {
void PR_랭킹을_저장한다() {
User user = userGenerator.generate("김건우");
GithubRepository repo = repoGenerator.generate(user, "건우의 레포");
PullRequest pullRequest = pullRequestGenerator.generate("최초 PR", RecordStatus.PENDING, repo,
LocalDateTime.now());
PullRequest pullRequest = pullRequestGenerator.generate("최초 PR", RecordStatus.PENDING, ProcessingStatus.DONE,
repo, LocalDateTime.now());
Question question1 = questionGenerator.generate(pullRequest, "질문1");
Answer answer = answerGenerator.generate(question1, "answer1");

Expand All @@ -50,8 +51,8 @@ class Push {
void 유저의_PR_랭킹을_모두_가져온다() {
User user = userGenerator.generate("김건우");
GithubRepository repo = repoGenerator.generate(user, "건우의 레포");
PullRequest pr1 = pullRequestGenerator.generate("PR1", RecordStatus.PENDING, repo, LocalDateTime.now());
PullRequest pr2 = pullRequestGenerator.generate("PR2", RecordStatus.PENDING, repo, LocalDateTime.now());
PullRequest pr1 = pullRequestGenerator.generate("PR1", RecordStatus.PENDING, ProcessingStatus.DONE, repo, LocalDateTime.now());
PullRequest pr2 = pullRequestGenerator.generate("PR2", RecordStatus.PENDING, ProcessingStatus.DONE, repo, LocalDateTime.now());
Question question1 = questionGenerator.generate(pr1, "질문1");
Question question2 = questionGenerator.generate(pr2, "질문2");
Answer answer1 = answerGenerator.generate(question1, "answer1");
Expand All @@ -72,7 +73,7 @@ class Push {
void 랭킹_PR에_존재하는_질문의_경우_랭킹내역을_업데이트한다() {
User user = userGenerator.generate("김건우");
GithubRepository repo = repoGenerator.generate(user, "건우의 레포");
PullRequest pr1 = pullRequestGenerator.generate("PR1", RecordStatus.PENDING, repo, LocalDateTime.now());
PullRequest pr1 = pullRequestGenerator.generate("PR1", RecordStatus.PENDING, ProcessingStatus.DONE, repo, LocalDateTime.now());
Question question1 = questionGenerator.generate(pr1, "질문1");
Question question2 = questionGenerator.generate(pr1, "질문2");
Answer answer1 = answerGenerator.generate(question1, "answer1");
Expand All @@ -93,10 +94,10 @@ class Push {
void 랭킹_PR이_꽉_찼을_경우_가장_오래된_pr을_삭제하고_새로운_pr을_갱신한다() {
User user = userGenerator.generate("김건우");
GithubRepository repo = repoGenerator.generate(user, "건우의 레포");
PullRequest pr1 = pullRequestGenerator.generate("PR1", RecordStatus.PENDING, repo, LocalDateTime.now());
PullRequest pr2 = pullRequestGenerator.generate("PR2", RecordStatus.PENDING, repo, LocalDateTime.now());
PullRequest pr3 = pullRequestGenerator.generate("PR3", RecordStatus.PENDING, repo, LocalDateTime.now());
PullRequest pr4 = pullRequestGenerator.generate("PR4", RecordStatus.PENDING, repo, LocalDateTime.now());
PullRequest pr1 = pullRequestGenerator.generate("PR1", RecordStatus.PENDING, ProcessingStatus.DONE, repo, LocalDateTime.now());
PullRequest pr2 = pullRequestGenerator.generate("PR2", RecordStatus.PENDING, ProcessingStatus.DONE, repo, LocalDateTime.now());
PullRequest pr3 = pullRequestGenerator.generate("PR3", RecordStatus.PENDING, ProcessingStatus.DONE, repo, LocalDateTime.now());
PullRequest pr4 = pullRequestGenerator.generate("PR4", RecordStatus.PENDING, ProcessingStatus.DONE, repo, LocalDateTime.now());
Question question1 = questionGenerator.generate(pr1, "질문1");
Question question2 = questionGenerator.generate(pr2, "질문2");
Question question3 = questionGenerator.generate(pr3, "질문3");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import com.devoops.BaseServiceTest;
import com.devoops.domain.entity.github.answer.Answer;
import com.devoops.domain.entity.github.pr.ProcessingStatus;
import com.devoops.domain.entity.github.repo.GithubRepository;
import com.devoops.domain.entity.github.pr.PullRequest;
import com.devoops.domain.entity.github.question.Question;
Expand All @@ -28,7 +29,7 @@ class Read {
void 풀_리퀘스트_정보를_읽는다() {
User user = userGenerator.generate("김건우");
GithubRepository repo = repoGenerator.generate(user, "건우의 레포");
PullRequest pullRequest = pullRequestGenerator.generate("최초 PR", RecordStatus.PENDING, repo, LocalDateTime.now());
PullRequest pullRequest = pullRequestGenerator.generate("최초 PR", RecordStatus.PENDING, ProcessingStatus.DONE, repo, LocalDateTime.now());
Question question1 = questionGenerator.generate(pullRequest, "질문1");
Question question2 = questionGenerator.generate(pullRequest, "질문2");
Answer answer1 = answerGenerator.generate(question1, "answerContent");
Expand All @@ -37,6 +38,7 @@ class Read {

assertAll(
() -> assertThat(response.id()).isEqualTo(pullRequest.getId()),
() -> assertThat(response.processingStatus()).isEqualTo(ProcessingStatus.DONE),
() -> assertThat(response.questions()).hasSize(2),
() -> assertThat(response.questions().get(0).createdAt()).isNotNull(),
() -> assertThat(response.questions().get(1).createdAt()).isNull()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import com.devoops.BaseServiceTest;
import com.devoops.domain.entity.github.answer.Answer;
import com.devoops.domain.entity.github.pr.ProcessingStatus;
import com.devoops.domain.entity.github.repo.GithubRepository;
import com.devoops.domain.entity.github.pr.PullRequest;
import com.devoops.domain.entity.github.question.Question;
Expand Down Expand Up @@ -34,8 +35,12 @@ class StatusChange {
void 최소_하나의_회고가_생성되면_PR상태가_progress로_변경된다() {
User user = userGenerator.generate("김건우");
GithubRepository repo = repoGenerator.generate(user, "건우의 레포");
PullRequest pullRequest = pullRequestGenerator.generate("최초 PR", RecordStatus.PENDING, repo,
LocalDateTime.now());
PullRequest pullRequest = pullRequestGenerator.generate("최초 PR",
RecordStatus.PENDING,
ProcessingStatus.DONE,
repo,
LocalDateTime.now()
);
Question question1 = questionGenerator.generate(pullRequest, "질문1");

questionFacadeService.initializeAnswer(question1.getId(), user);
Expand All @@ -48,7 +53,9 @@ class StatusChange {
void 회고를_삭제할_때_PR의_회고가_남아있다면_PR은_PROGRESS를_유지한다() {
User user = userGenerator.generate("김건우");
GithubRepository repo = repoGenerator.generate(user, "건우의 레포");
PullRequest pullRequest = pullRequestGenerator.generate("최초 PR", RecordStatus.PROGRESS, repo,
PullRequest pullRequest = pullRequestGenerator.generate("최초 PR", RecordStatus.PROGRESS,
ProcessingStatus.DONE,
repo,
LocalDateTime.now());
Question question1 = questionGenerator.generate(pullRequest, "질문1");
Question question2 = questionGenerator.generate(pullRequest, "질문2");
Expand All @@ -65,7 +72,9 @@ class StatusChange {
void 마지막_회고를_삭제하면_PR은_PENDING으로_변경된다() {
User user = userGenerator.generate("김건우");
GithubRepository repo = repoGenerator.generate(user, "건우의 레포");
PullRequest pullRequest = pullRequestGenerator.generate("최초 PR", RecordStatus.PROGRESS, repo,
PullRequest pullRequest = pullRequestGenerator.generate("최초 PR", RecordStatus.PROGRESS,
ProcessingStatus.DONE,
repo,
LocalDateTime.now());
Question question1 = questionGenerator.generate(pullRequest, "질문1");
Answer answer1 = answerGenerator.generate(question1, "대답1");
Expand All @@ -84,7 +93,7 @@ class UpdateAllAnswers {
void 다수_회고를_업데이트한다() {
User user = userGenerator.generate("김건우");
GithubRepository repo = repoGenerator.generate(user, "건우의 레포");
PullRequest pr1 = pullRequestGenerator.generate("PR1", RecordStatus.PENDING, repo, LocalDateTime.now());
PullRequest pr1 = pullRequestGenerator.generate("PR1", RecordStatus.PENDING, ProcessingStatus.DONE, repo, LocalDateTime.now());
Question question1 = questionGenerator.generate(pr1, "질문1");
Question question2 = questionGenerator.generate(pr1, "질문2");
Answer answer1 = answerGenerator.generate(question1, "answer1");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import static org.assertj.core.api.Assertions.assertThat;

import com.devoops.BaseServiceTest;
import com.devoops.domain.entity.github.pr.ProcessingStatus;
import com.devoops.domain.entity.github.repo.GithubRepository;
import com.devoops.domain.entity.github.pr.PullRequest;
import com.devoops.domain.entity.github.pr.RecordStatus;
Expand All @@ -25,8 +26,13 @@ class UpdateToDone {
void 풀_리퀘스트_회고_상태를_완료로_변경한다() {
User user = userGenerator.generate("김건우");
GithubRepository repo = repoGenerator.generate(user, "건우의 레포");
PullRequest pullRequest = pullRequestGenerator.generate("최초 PR", RecordStatus.PENDING, repo,
LocalDateTime.now());
PullRequest pullRequest = pullRequestGenerator.generate(
"최초 PR",
RecordStatus.PENDING,
ProcessingStatus.DONE,
repo,
LocalDateTime.now()
);
Comment on lines +29 to +35
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

시그니처 변경 반영 LGTM + 서비스 레벨 필터 테스트 제안

레코드 상태 업데이트 테스트는 적절합니다. 추가로 “서비스 계층에서 PR 목록/조회 시 PROCESSING 제외”를 검증하는 테스트를 보강해 주세요(예: getProcessed… 계열 메서드가 DONE만 반환).

🤖 Prompt for AI Agents
In
gss-api-app/src/test/java/com/devoops/service/pullrequests/PullRequestServiceTest.java
around lines 29 to 35, add/extend a test that verifies the service-level
filtering excludes PROCESSING and returns only DONE: use the existing
pullRequestGenerator to create multiple PullRequest instances with different
ProcessingStatus values (e.g., PROCESSING and DONE) tied to the same repo,
persist them as needed, call the service method under test (the getProcessed...
/ list/lookup method), and assert that the returned collection contains only the
DONE items (check size and each item's ProcessingStatus == DONE). Ensure test
setup covers repository and record status as required and uses the service API
rather than repository calls to validate the service-layer filter.


PullRequest updatedPullRequest = pullRequestService.updateStatus(pullRequest.getId(), RecordStatus.DONE);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.devoops.BaseServiceTest;
import com.devoops.command.request.AnswerUpdateCommand;
import com.devoops.domain.entity.github.answer.Answer;
import com.devoops.domain.entity.github.pr.ProcessingStatus;
import com.devoops.domain.entity.github.repo.GithubRepository;
import com.devoops.domain.entity.github.pr.PullRequest;
import com.devoops.domain.entity.github.question.Question;
Expand Down Expand Up @@ -34,7 +35,7 @@ class AnswerCRUD {
void 질문에_대한_최초_응답을_저장한다() {
User user = userGenerator.generate("김건우");
GithubRepository repo = repoGenerator.generate(user, "건우의 레포");
PullRequest pullRequest = pullRequestGenerator.generate("최초 PR", RecordStatus.PENDING, repo, LocalDateTime.now());
PullRequest pullRequest = pullRequestGenerator.generate("최초 PR", RecordStatus.PENDING, ProcessingStatus.DONE, repo, LocalDateTime.now());
Question question = questionGenerator.generate(pullRequest, "질문 : 이거 왜 이렇게 했어요?");

Answer answer = questionService.initializeAnswer(question.getId(), user);
Expand All @@ -49,7 +50,7 @@ class AnswerCRUD {
void 질문에_대한_응답을_업데이트한다() {
User user = userGenerator.generate("김건우");
GithubRepository repo = repoGenerator.generate(user, "건우의 레포");
PullRequest pullRequest = pullRequestGenerator.generate("최초 PR", RecordStatus.PENDING, repo, LocalDateTime.now());
PullRequest pullRequest = pullRequestGenerator.generate("최초 PR", RecordStatus.PENDING, ProcessingStatus.DONE, repo, LocalDateTime.now());
Question question = questionGenerator.generate(pullRequest, "질문 : 이거 왜 이렇게 했어요?");
Answer answer = answerGenerator.generate(question, "before");

Expand All @@ -65,7 +66,7 @@ class AnswerCRUD {
void 질문에_대한_다수_응답을_업데이트한다() {
User user = userGenerator.generate("김건우");
GithubRepository repo = repoGenerator.generate(user, "건우의 레포");
PullRequest pullRequest = pullRequestGenerator.generate("최초 PR", RecordStatus.PENDING, repo, LocalDateTime.now());
PullRequest pullRequest = pullRequestGenerator.generate("최초 PR", RecordStatus.PENDING, ProcessingStatus.DONE, repo, LocalDateTime.now());
Question question1 = questionGenerator.generate(pullRequest, "질문1");
Question question2 = questionGenerator.generate(pullRequest, "질문1");
Question question3 = questionGenerator.generate(pullRequest, "질문1");
Expand Down Expand Up @@ -96,7 +97,7 @@ class PRQuestions {
void 풀리퀘스트의_질문과_대답을_모두_조회한다() {
User user = userGenerator.generate("김건우");
GithubRepository repo = repoGenerator.generate(user, "건우의 레포");
PullRequest pullRequest = pullRequestGenerator.generate("최초 PR", RecordStatus.PENDING, repo, LocalDateTime.now());
PullRequest pullRequest = pullRequestGenerator.generate("최초 PR", RecordStatus.PENDING, ProcessingStatus.DONE, repo, LocalDateTime.now());
Question question1 = questionGenerator.generate(pullRequest, "질문1");
questionGenerator.generate(pullRequest, "질문1");
Answer answer1 = answerGenerator.generate(question1, "answerContent");
Expand Down
Loading
Loading