Skip to content

Commit

Permalink
feat: 이슈 update 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
Dae-Hwa committed Jun 24, 2021
1 parent da1350c commit 5ac02bc
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,11 @@ public class Issue {
private Comments comments;

public static Issue from(IssueRequest issueRequest) {
// FIXME: IssueRequest에서 변환하도록 수정하는게 좋을 듯(엔티티가 DTO를 알고 있음)
return Issue.builder()
.title(issueRequest.getTitle())
.author(issueRequest.author())
// TODO: comment도 issueRequest에서 뽑아내는게 좋지 않나?
.mainComment(Comment.from(issueRequest))
.assignees(issueRequest.assignees())
.labels(issueRequest.labels())
Expand Down Expand Up @@ -57,4 +59,14 @@ public boolean hasAssignee() {
public boolean hasMilestone() {
return milestone != null;
}

public Issue update(IssueRequest issueRequest) {
title = issueRequest.getTitle();
author = issueRequest.author();
assignees = issueRequest.assignees();
labels = issueRequest.labels();
milestone = issueRequest.milestone();

return this;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,19 @@
import lombok.Data;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

@Data(staticConstructor = "from")
public class Users {
private final List<User> users;

public static Users of(User... users) {
return Users.from(new ArrayList<>(Arrays.asList(users)));
}

public Stream<User> stream() {
return users.stream();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,14 @@ public IssueDetailResponse create(IssueRequest issueRequest) {

return IssueDetailResponse.from(issueRepository.save(issueForSave));
}

public IssueDetailResponse update(long issueId, IssueRequest issueRequest) {
Issue issue = issueRepository.readById(issueId)
.orElseThrow(() -> new EntityNotFoundException());

issue.update(issueRequest);

return IssueDetailResponse.from(issueRepository.save(issue));

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,15 @@
import com.codesquad.issuetracker.comment.dto.CommentResponses;
import com.codesquad.issuetracker.common.exception.EntityNotFoundException;
import com.codesquad.issuetracker.issue.controller.IssueDummyData;
import com.codesquad.issuetracker.issue.domain.Comments;
import com.codesquad.issuetracker.issue.domain.Issue;
import com.codesquad.issuetracker.issue.domain.Issues;
import com.codesquad.issuetracker.issue.domain.User;
import com.codesquad.issuetracker.issue.domain.*;
import com.codesquad.issuetracker.issue.dto.IssueDetailResponse;
import com.codesquad.issuetracker.issue.dto.IssueRequest;
import com.codesquad.issuetracker.issue.dto.IssueResponse;
import com.codesquad.issuetracker.issue.dto.IssueResponses;
import com.codesquad.issuetracker.issue.repository.IssueRepository;
import com.codesquad.issuetracker.label.controller.LabelDummyData;
import com.codesquad.issuetracker.label.domain.Label;
import com.codesquad.issuetracker.label.domain.Labels;
import com.codesquad.issuetracker.label.dto.LabelResponse;
import com.codesquad.issuetracker.label.dto.LabelResponses;
import com.codesquad.issuetracker.milestone.controller.MilestoneDummyData;
Expand Down Expand Up @@ -448,6 +446,7 @@ static Stream<Arguments> createProvider() {
);
}


private void thenVerifyIssue(IssueResponse actual, IssueResponse expected) {
assertThat(actual.getId()).isEqualTo(expected.getId());
assertThat(actual.getNumber()).isEqualTo(expected.getNumber());
Expand Down Expand Up @@ -550,4 +549,67 @@ private void verifyComment(CommentResponse actual, CommentResponse expected) {

assertThat(actual.getEmojis()).isEqualTo(expected.getEmojis());
}

@ParameterizedTest
@MethodSource
void update(String 테스트케이스설명, Issue givenForReadById, Issue givenForSave, IssueRequest issueRequest, IssueDetailResponse expected) {
BDDMockito.given(issueRepository.readById(givenForReadById.getId()))
.willReturn(Optional.of(givenForReadById));

BDDMockito.given(issueRepository.save(givenForSave))
.willReturn(givenForSave);

IssueDetailResponse actual = issueService.update(givenForReadById.getId(), issueRequest);

thenVerifyIssue(actual, expected);
}

@SuppressWarnings("unused")
static Stream<Arguments> update() {
return Stream.of(
Arguments.of(
"옵션 모두 존재",
Issue.builder()
.id(1L)
.number(1L)
.title("title")
.createDateTime(LocalDateTime.of(2021, 6, 21, 16, 0))
.author(UserDummyData.userFreddie())
.assignees(UserDummyData.users())
.labels(LabelDummyData.labels())
.milestone(MilestoneDummyData.openedMilestone())
.mainComment(IssueDummyData.commentByFreddie())
.build(),
Issue.builder()
.id(1L)
.number(1L)
.title("title updated")
.createDateTime(LocalDateTime.of(2021, 6, 21, 16, 0))
.author(UserDummyData.userFreddie())
.assignees(Users.of(UserDummyData.userFreddie()))
.labels(Labels.of(LabelDummyData.labelBe()))
.milestone(MilestoneDummyData.closedMilestone())
.mainComment(IssueDummyData.commentByFreddie())
.build(),
IssueRequest.builder()
.title("title updated")
.mainCommentContents(IssueDummyData.commentByFreddie().getContents())
.authorId(UserDummyData.userFreddie().getId())
.assigneeIds(new HashSet<>(Arrays.asList(UserDummyData.userFreddie().getId())))
.labelIds(new HashSet<>(Arrays.asList(LabelDummyData.labelBe().getId())))
.milestoneId(MilestoneDummyData.closedMilestone().getId())
.build(),
IssueDetailResponse.builder().id(1L)
.number(1L)
.title("title updated")
.createDateTime(LocalDateTime.of(2021, 6, 21, 16, 0))
.author(UserResponse.from(UserDummyData.userFreddie()))
.assignees(UserResponses.from(Users.of(UserDummyData.userFreddie())))
.labels(LabelResponses.from(Labels.of(LabelDummyData.labelBe())))
.milestone(MilestoneResponse.from(MilestoneDummyData.closedMilestone()))
.mainComment(CommentResponse.from(IssueDummyData.commentByFreddie()))
.build()
)
);
}
}

0 comments on commit 5ac02bc

Please sign in to comment.