-
Notifications
You must be signed in to change notification settings - Fork 264
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[레거시 코드 리팩토링 미션 - 1단계] 우르(김현우) 미션 제출합니다. #493
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
안녕하세요 우르! 미션에서 뵙는 건 처음이네요~
전체적으로 코드가 완벽해서 오히려 제가 더 많이 배워가는 기분이네요ㅎㅎ;
코드를 보며 궁금했던 점과 제안드리고 싶은 점들을 코멘트로 남겨보았습니다.
‘~~~한 부분에 대해서도 테스트를 작성해달라’는 코멘트가 많은데, 혹시나 누락하신 테스트가 있을까봐 남긴 것이니 꼭 필요한 테스트가 아니라고 생각하신다면 스킵하셔도 괜찮습니다!
그리고 혹시 미션 리뷰와 관련해서 원하시는 점이 있으시면 언제든 편하게 말씀 부탁드려요~!
- id, tableGroupId, numberOfGuests, empty(boolean) | ||
2. 모든 주문 테이블들을 조회할 수 있다. | ||
3. 특정 주문 테이블을 empty 상태로 변경할 수 있다. | ||
4. 특정 주문 테이블의 손님의 명 수를 변경할 수 있다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
요구사항에 예외 케이스에 대한 내용은 없네요...!
저의 경우 서비스의 요구사항엔 예측 가능한 예외 상황에 대한 제약 사항도 포함된다고 생각하는 편인데, 우르는 예외 케이스에 대한 요구사항을 작성하는 것에 대해 어떻게 생각하시나요??
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
필요하다 생각이 들어서 작성했습니다!!
@@ -2,3 +2,4 @@ logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE | |||
spring.h2.console.enabled=true | |||
spring.jpa.properties.hibernate.format_sql=true | |||
spring.jpa.show-sql=true | |||
spring.flyway.enabled=false |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
gradle에 flyway 의존성이 추가되어 있었네요....!
미션 코드들을 굉장히 꼼꼼하게 확인하셨군요👍👍
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.boot.test.context.SpringBootTest; | ||
|
||
class MenuGroupServiceTest extends ServiceIntegrationTest { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍👍👍
menu.setMenuGroupId(3L); | ||
menu.setName("menu1MenuGroup3"); | ||
menu.setPrice(BigDecimal.valueOf(100000000)); | ||
menu.setMenuProducts(menuProductDao.findAll()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
정상 케이스의 Menu 객체를 필드 혹은 Fixture로 만들고
menu.setPrice()
로 가격 값을 수정해주면 어떨까요?? 중복되는 부분을 줄일 수 있을 것 같습니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
따로 메서드 분리하였습니다 !
delete from product; | ||
delete from order_table; | ||
delete from table_group; | ||
delete from menu_group; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
질문) truncate가 아닌 delete로 테이블을 삭제하신 이유는 data.sql에서 정의해주신 ALTER문의 변경사항을 유지하기 위해서인가요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
h2 는 제약조건이 있으면 truncate가 안된다고 하더라구요 그래서 delete 사용했습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
아하 그런 문제가 있었군요...! 새로운 사실 알아갑니다ㅎㅎ
() -> assertEquals(0, savedProduct.getPrice().compareTo(product.getPrice())), | ||
() -> assertEquals(savedProduct.getName(), product.getName()) | ||
); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
상품 가격이 0원 미만인 경우에 대한 검증 테스트도 있으면 좋을 것 같아요!
assertAll( | ||
() -> assertNotNull(savedTableGroup.getId()), | ||
() -> assertNotNull(savedTableGroup.getCreatedDate()) | ||
); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
테이블 그룹이 등록된 이후 테이블 그룹에 속한 주문 테이블들은 모두 비어있지 않은 상태가 되는데, 이 부분에 대해서도 검증 로직이 추가되면 좋을 것 같아요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
오,, 그렇네요 추가하도록 하겠습니다 !!
tableGroupService.ungroup(tableGroupId); | ||
|
||
//then | ||
assertThat(orderTableDao.findAllByTableGroupId(tableGroupId)).isEmpty(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
단체 테이블을 삭제할 때 단체 테이블에 속한 주문 테이블의 주문들은 모두 계산이 완료된 COMPLETION 상태여야 하는데(혹은 주문이 아예 없거나), 이 제약사항에 대해서도 검증할 수 있으면 좋을 것 같아요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
추가했습니다 !
//when & then | ||
assertThatThrownBy(() -> tableService.changeEmpty(orderTableId, orderTable)) | ||
.isInstanceOf(IllegalArgumentException.class); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
만약 주문테이블이 특정 테이블 그룹에 속해있을 경우에도 empty 여부를 변경할 수 없는데, 이 제약 사항에 대해서도 테스트가 있으면 좋을 것 같습니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if (Objects.nonNull(savedOrderTable.getTableGroupId())) {
throw new IllegalArgumentException();
}
이 부분인가요??
특정 테이블 그룹에 속해 있지 않으면 안된다는거 아닌가여,,??
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
orderTable의 tableGroupId가 null이어야 검증을 통과하니 테이블 그룹에 속해있지 않아야 합니다!
2단계에서 알맞게 구현해주셨네요~!
} | ||
|
||
@Test | ||
@DisplayName("changeNumberOfGuests() : 주문 테이블의 인원 수를 수정할 수 있다.") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
DisplayName이 수정되지 않은 것 같아요!
그리고 변경하려는 손님 수가 0명 이하인 경우에도 검증을 하면 좋을 것 같아요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
헉,, 그렇네요 바로 반영하겠습니다 감사합니다
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
안녕하세요 우르!
코멘트 남긴 부분 대부분 반영해주셨고, 1단계 요구사항도 모두 만족한 것 같아 이만 머지하도록 하겠습니다!
그럼 2단계에서 봬요~!
안녕하세요 아마란스!!
저는 XXXService에 대해서만 통합 테스트를 진행했습니다.
이번 리뷰 잘 부탁드립니다!!