1+ package com .somemore .note .service ;
2+
3+ import com .somemore .IntegrationTestSupport ;
4+ import com .somemore .center .domain .Center ;
5+ import com .somemore .center .repository .CenterRepository ;
6+ import com .somemore .global .exception .BadRequestException ;
7+ import com .somemore .note .domain .Note ;
8+ import com .somemore .note .dto .SendNoteToCenterRequestDto ;
9+ import com .somemore .note .repository .NoteJpaRepository ;
10+ import org .junit .jupiter .api .DisplayName ;
11+ import org .junit .jupiter .api .Test ;
12+ import org .springframework .beans .factory .annotation .Autowired ;
13+ import org .springframework .transaction .annotation .Transactional ;
14+
15+ import java .util .UUID ;
16+
17+ import static com .somemore .global .exception .ExceptionMessage .NOT_EXISTS_CENTER ;
18+ import static org .junit .jupiter .api .Assertions .*;
19+
20+ @ Transactional
21+ class SendNoteToCenterServiceTest extends IntegrationTestSupport {
22+
23+ @ Autowired
24+ private SendNoteToCenterService sendNoteToCenterService ;
25+
26+ @ Autowired
27+ private NoteJpaRepository noteJpaRepository ;
28+
29+ @ Autowired
30+ private CenterRepository centerRepository ;
31+
32+
33+ @ DisplayName ("봉사자는 기관에게 쪽지를 보낼 수 있다." )
34+ @ Test
35+ void sendNoteToCenter () {
36+ // given
37+ Center center = createCenter ();
38+ UUID senderId = UUID .randomUUID (); // 봉사자 ID
39+ UUID receiverId = center .getId (); // 기관 ID
40+ String title = "안녕하세요, 봉사 신청 관련 문의드립니다." ;
41+ String content = "안녕하세요, 이번 주말 봉사 일정에 대해 문의드립니다." ;
42+ SendNoteToCenterRequestDto requestDto = new SendNoteToCenterRequestDto (receiverId , title , content );
43+
44+ // when
45+ Long noteId = sendNoteToCenterService .sendNoteToCenter (senderId , requestDto );
46+
47+ // then
48+ Note savedNote = noteJpaRepository .findById (noteId ).orElseThrow (() ->
49+ new IllegalStateException ("쪽지가 저장되지 않았습니다." ));
50+ assertEquals (senderId , savedNote .getSenderId (), "발신자가 올바르지 않습니다." );
51+ assertEquals (receiverId , savedNote .getReceiverId (), "수신자가 올바르지 않습니다." );
52+ assertEquals (title , savedNote .getTitle (), "쪽지 제목이 올바르지 않습니다." );
53+ assertEquals (content , savedNote .getContent (), "쪽지 내용이 올바르지 않습니다." );
54+ assertFalse (savedNote .getIsRead (), "새로 생성된 쪽지는 읽음 상태가 기본적으로 false여야 합니다." );
55+ }
56+
57+ @ DisplayName ("기관 아이디가 올바르지 않으면 예외를 반환한다." )
58+ @ Test
59+ void sendNoteToNonexistentCenter_ThrowsBadRequestException () {
60+ // given
61+ UUID senderId = UUID .randomUUID (); // 봉사자 ID
62+ UUID nonexistentReceiverId = UUID .randomUUID (); // 존재하지 않는 기관 ID
63+ String title = "안녕하세요, 봉사 신청 관련 문의드립니다." ;
64+ String content = "안녕하세요, 이번 주말 봉사 일정에 대해 문의드립니다." ;
65+ SendNoteToCenterRequestDto requestDto = new SendNoteToCenterRequestDto (nonexistentReceiverId , title , content );
66+
67+ assertFalse (centerRepository .existsById (nonexistentReceiverId ), "" );
68+
69+ // when & then
70+ BadRequestException exception = assertThrows (BadRequestException .class ,
71+ () -> sendNoteToCenterService .sendNoteToCenter (senderId , requestDto ));
72+
73+ // 예외 메시지 검증
74+ assertEquals (NOT_EXISTS_CENTER .getMessage (), exception .getMessage (), "예외 메시지가 올바르지 않습니다." );
75+ }
76+
77+
78+
79+
80+ private Center createCenter () {
81+ Center center = Center .create (
82+ "기본 기관 이름" ,
83+ "010-1234-5678" ,
84+ "http://example.com/image.jpg" ,
85+ "기관 소개 내용" ,
86+ "http://example.com" ,
87+ "account123" ,
88+ "password123"
89+ );
90+
91+ centerRepository .save (center );
92+
93+ return center ;
94+ }
95+
96+ }
0 commit comments