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
@@ -0,0 +1,18 @@
package com.mpc.springboot.member.application.dto;

import com.mpc.springboot.member.domain.entity.Member;
import com.mpc.springboot.member.domain.vo.MemberCode;
import com.mpc.springboot.member.domain.vo.MemberName;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public class CreateMemberRequest {
private final MemberCode code;
private final MemberName name;

public Member toEntity() {
return Member.of(code, name);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import jakarta.transaction.Transactional;

import org.springframework.stereotype.Service;
import com.mpc.springboot.member.application.dto.CreateMemberRequest;
import com.mpc.springboot.member.application.dto.MemberResponse;
import com.mpc.springboot.member.domain.entity.Member;
import com.mpc.springboot.member.domain.exception.MemberNotFoundException;
Expand All @@ -23,7 +24,9 @@ public MemberResponse getMemberBy(MemberCode code) {
}

@Transactional
public Member createMember(Member member) {
return memberRepository.save(member);
public MemberResponse createMember(CreateMemberRequest request) {
Member member = request.toEntity();
Member saved = memberRepository.save(member);
return MemberResponse.from(saved);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public class Member {
private MemberName name;

@Embedded
private AuditFields auditFields = new AuditFields();
private final AuditFields auditFields = new AuditFields();

private Member(MemberCode code, MemberName name) {
this.code = code;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,6 @@ public String convertToDatabaseColumn(MemberCode attribute) {
@Override
public MemberCode convertToEntityAttribute(String dbData) {
String value = Objects.requireNonNullElse(dbData, "");
return new MemberCode(value);
return MemberCode.of(value);
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package com.mpc.springboot.member.domain.vo;

import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.*;

@Getter
@RequiredArgsConstructor
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public class MemberCode {
private final String value;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import com.mpc.springboot.member.application.dto.CreateMemberRequest;
import com.mpc.springboot.member.application.dto.MemberResponse;
import com.mpc.springboot.member.application.service.MemberService;
import com.mpc.springboot.member.domain.entity.Member;
Expand All @@ -21,7 +22,7 @@ public ResponseEntity<MemberResponse> getMemberBy(@PathVariable MemberCode code)
}

@PostMapping
public ResponseEntity<Member> createMember(@RequestBody Member member) {
return ResponseEntity.ok(memberService.createMember(member));
public ResponseEntity<MemberResponse> createMember(@RequestBody CreateMemberRequest request) {
return ResponseEntity.ok(memberService.createMember(request));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package com.mpc.springboot.member.application.service;

import java.util.Optional;

import com.mpc.springboot.member.application.dto.MemberResponse;
import com.mpc.springboot.member.domain.entity.Member;
import com.mpc.springboot.member.domain.repository.MemberRepository;
import com.mpc.springboot.member.domain.vo.MemberCode;
import com.mpc.springboot.member.domain.vo.MemberName;
import com.mpc.springboot.shared.AbstractServiceTest;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;

import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.BDDMockito.given;

class MemberServiceTest extends AbstractServiceTest {

@Mock
private MemberRepository memberRepository;

@InjectMocks
private MemberService memberService;

@DisplayName("멤버 조회 테스트")
@Test
void getMemberBy() {
// given
MemberCode code = MemberCode.of("M0000016");
MemberName name = MemberName.of("Jinwoo", "Kim");
Member member = Member.of(code, name);
Optional<Member> memberOptional = Optional.of(member);

given(memberRepository.findMemberBy(any())).willReturn(memberOptional);

// when
MemberResponse memberResponse = memberService.getMemberBy(code);

// then
assertNotNull(memberResponse);
assertEquals(code, memberResponse.getCode());
assertEquals(name, memberResponse.getName());
}

@Test
void createMember() {
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package com.mpc.springboot.member.infrastructure.persistence.jpa.repository;

import java.util.Optional;

import org.springframework.beans.factory.annotation.Autowired;
import com.mpc.springboot.member.domain.entity.Member;
import com.mpc.springboot.member.domain.repository.MemberRepository;
import com.mpc.springboot.member.domain.vo.MemberCode;
import com.mpc.springboot.member.domain.vo.MemberName;
import com.mpc.springboot.shared.AbstractRepositoryTest;
import org.junit.jupiter.api.*;

import static org.junit.jupiter.api.Assertions.*;

class MemberRepositoryTest extends AbstractRepositoryTest {

@Autowired
private MemberRepository memberRepository;

private Member savedMember;

@Override
protected void setUp() {
// given
MemberCode code = MemberCode.of("T0000001");
MemberName name = MemberName.of("Alice", "Smith");
savedMember = memberRepository.save(Member.of(code, name));
}

@DisplayName("멤버 저장 테스트")
@Tag(NO_SETUP)
@Test
void save() {
// given
MemberCode code = MemberCode.of("T0000001");
MemberName name = MemberName.of("Alice", "Smith");
Member member = Member.of(code, name);

// when
Member saved = memberRepository.save(member);

// then
assertNotNull(saved);
assertEquals(code, saved.getCode());
assertEquals(name, saved.getName());
}

@Test
void findMemberBy() {
// given
MemberCode code = savedMember.getCode();

// when
Optional<Member> result = memberRepository.findMemberBy(code);

// then
assertTrue(result.isPresent());
assertEquals(savedMember.getCode(), result.get().getCode());
assertEquals(savedMember.getName(), result.get().getName());
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.mpc.springboot.shared;

import jakarta.transaction.Transactional;

import org.springframework.boot.test.context.SpringBootTest;
import org.junit.jupiter.api.*;

@SpringBootTest
@Transactional
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public abstract class AbstractRepositoryTest {

protected static final String NO_SETUP = "NoSetup";

@BeforeEach
void commonSetUp(TestInfo testInfo) {
if (hasNoSetupTag(testInfo)) {
return;
}
setUp();
}

private static boolean hasNoSetupTag(TestInfo testInfo) {
return testInfo.getTags()
.contains(NO_SETUP);
}

protected abstract void setUp();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.mpc.springboot.shared;

import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension;

@ExtendWith(MockitoExtension.class)
public abstract class AbstractServiceTest {
}