Skip to content

Commit

Permalink
fix: 더미 Basket은 조회되지 않도록 수정 (#49)
Browse files Browse the repository at this point in the history
* fix: 더미 Basket은 조회되지 않도록 수정

* docs: 테스트 픽스처 주석 추가
  • Loading branch information
3Juhwan authored Feb 7, 2025
1 parent 20965e9 commit 8fa259f
Show file tree
Hide file tree
Showing 5 changed files with 98 additions and 1 deletion.
8 changes: 8 additions & 0 deletions src/main/java/kr/allcll/seatfinder/basket/Basket.java
Original file line number Diff line number Diff line change
Expand Up @@ -102,4 +102,12 @@ public Basket(Subject subject, String smtCd, String year, String curiNo, String
this.rcnt = rcnt;
this.totRcnt = totRcnt;
}

public boolean isNotEmpty() {
return !isEmpty();
}

public boolean isEmpty() {
return this.rcnt == null || this.rcnt == 0;
}
}
8 changes: 7 additions & 1 deletion src/main/java/kr/allcll/seatfinder/basket/BasketService.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,13 @@ private Specification<Subject> getCondition(
public SubjectBasketsResponse getEachSubjectBaskets(Long subjectId) {
Subject subject = subjectRepository.findById(subjectId)
.orElseThrow(() -> new AllcllException(AllcllErrorCode.SUBJECT_NOT_FOUND));
List<Basket> baskets = basketRepository.findBySubjectId(subject.getId());
List<Basket> baskets = getBaskets(subject);
return SubjectBasketsResponse.from(baskets);
}

private List<Basket> getBaskets(Subject subject) {
return basketRepository.findBySubjectId(subject.getId()).stream()
.filter(Basket::isNotEmpty)
.toList();
}
}
48 changes: 48 additions & 0 deletions src/test/java/kr/allcll/seatfinder/basket/BasketApiTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import java.util.List;
import kr.allcll.seatfinder.basket.dto.BasketsEachSubject;
import kr.allcll.seatfinder.basket.dto.BasketsResponse;
import kr.allcll.seatfinder.basket.dto.EachDepartmentBasket;
import kr.allcll.seatfinder.basket.dto.SubjectBasketsResponse;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
Expand Down Expand Up @@ -59,4 +61,50 @@ void findAllBasket() throws Exception {
// then
assertThat(result.getResponse().getContentAsString()).isEqualToIgnoringWhitespace(expected);
}

@Test
@DisplayName("특정 관심과목 조회의 요청과 응답을 확인한다.")
void findBasket() throws Exception {
// given
String expected = """
{
"eachDepartmentRegisters": [
{
"studentBelong": "본교생",
"registerDepartment": "컴퓨터공학과",
"eachCount": 10
}
]
}
""";

// when
when(basketService.getEachSubjectBaskets(1L)).thenReturn(
new SubjectBasketsResponse(List.of(
new EachDepartmentBasket("본교생", "컴퓨터공학과", 10)
))
);
MvcResult result = mockMvc.perform(get("/api/baskets/1")).andExpect(status().isOk()).andReturn();

// then
assertThat(result.getResponse().getContentAsString()).isEqualToIgnoringWhitespace(expected);
}

@Test
@DisplayName("관심과목으로 등록한 학생이 없으면, 관심과목 조회에 빈 응답을 확인한다.")
void findBasketEmpty() throws Exception {
// given
String expected = """
{
"eachDepartmentRegisters": []
}
""";

// when
when(basketService.getEachSubjectBaskets(1L)).thenReturn(new SubjectBasketsResponse(List.of()));
MvcResult result = mockMvc.perform(get("/api/baskets/1")).andExpect(status().isOk()).andReturn();

// then
assertThat(result.getResponse().getContentAsString()).isEqualToIgnoringWhitespace(expected);
}
}
17 changes: 17 additions & 0 deletions src/test/java/kr/allcll/seatfinder/basket/BasketServiceTest.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package kr.allcll.seatfinder.basket;

import static kr.allcll.seatfinder.support.fixture.BasketFixture.createEmptyBasket;
import static kr.allcll.seatfinder.support.fixture.SubjectFixture.createSubjectWithDepartmentCode;
import static kr.allcll.seatfinder.support.fixture.SubjectFixture.createSubjectWithDepartmentInformation;
import static org.assertj.core.api.Assertions.assertThat;
Expand Down Expand Up @@ -346,6 +347,22 @@ public void getEachSubjectBasketResponse() {
);
}

@Test
@DisplayName("과목에 대한 관심과목 담기한 인원이 없을 때는 빈 응답을 반환한다.")
public void emptyBasketResponse() {
// given
Subject subjectA = createSubjectWithDepartmentCode("컴공 과목A", "001234", "001", "김보예", "3210");
subjectRepository.save(subjectA);
Basket emptyBasket = createEmptyBasket(subjectA);
basketRepository.save(emptyBasket);

// when
SubjectBasketsResponse response = basketService.getEachSubjectBaskets(subjectA.getId());

// then
assertThat(response.eachDepartmentRegisters()).isEmpty();
}

@Test
@DisplayName("관심과목 인원이 0명 일 때의 동작을 확인한다.")
public void emptyBasket() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package kr.allcll.seatfinder.support.fixture;

import kr.allcll.seatfinder.basket.Basket;
import kr.allcll.seatfinder.subject.Subject;

public class BasketFixture {

/*
빈 Basket은 아래와 같이 생성됩니다.
0과 null로 초기화된 필드는 수정하면 안됩니다.
위 기준은 실제 API 요청으로 만들었습니다.
*/
public static Basket createEmptyBasket(Subject subject) {
return new Basket(subject, null, null, "", "", null, null,
null, null, null, null, 99, 0, 0,
0, 99, null, 0);
}
}

0 comments on commit 8fa259f

Please sign in to comment.