Skip to content

Commit 5b94224

Browse files
authored
Merge pull request #51 from GoGetCustomer/feature/assignment-test
feat: assignment 테스트 코드 작성 #7
2 parents d904add + b63e016 commit 5b94224

5 files changed

Lines changed: 256 additions & 3 deletions

File tree

lms/src/main/java/com/example/lms/domain/assignment/controller/AssignmentGradeController.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ public class AssignmentGradeController {
1818

1919
private final AssignmentGradeService gradeService;
2020

21-
// 성적 등록
2221
@PostMapping
2322
public ResponseEntity<AssignmentGradeResponse> createGrade(
2423
@PathVariable Long assignmentId,
@@ -29,7 +28,6 @@ public ResponseEntity<AssignmentGradeResponse> createGrade(
2928
return ResponseEntity.ok(new AssignmentGradeResponse(grade));
3029
}
3130

32-
// 과제별 성적 조회
3331
@GetMapping
3432
public ResponseEntity<List<AssignmentGradeResponse>> getGradesByAssignment(@PathVariable Long assignmentId) {
3533
List<AssignmentGrade> grades = gradeService.getGradesByAssignment(assignmentId);

lms/src/main/java/com/example/lms/domain/assignment/dto/SubmissionResponse.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ public class SubmissionResponse {
99
private String fileUrl;
1010
private LocalDateTime submittedAt;
1111

12-
// Getters and setters
1312
public Long getId() {
1413
return id;
1514
}
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package com.example.lms.domain.assignment.service;
2+
3+
import com.example.lms.domain.assignment.entity.Assignment;
4+
import com.example.lms.domain.assignment.entity.AssignmentGrade;
5+
import com.example.lms.domain.assignment.repository.AssignmentGradeRepository;
6+
import com.example.lms.domain.assignment.repository.AssignmentRepository;
7+
import com.example.lms.domain.course.entity.Course;
8+
import com.example.lms.domain.student.entity.Student;
9+
import com.example.lms.domain.student.repository.StudentRepository;
10+
import jakarta.persistence.EntityManager;
11+
import jakarta.persistence.PersistenceContext;
12+
import org.junit.jupiter.api.BeforeEach;
13+
import org.junit.jupiter.api.DisplayName;
14+
import org.junit.jupiter.api.Test;
15+
import org.springframework.beans.factory.annotation.Autowired;
16+
import org.springframework.boot.test.context.SpringBootTest;
17+
import org.springframework.test.context.ActiveProfiles;
18+
import org.springframework.transaction.annotation.Transactional;
19+
20+
import java.time.LocalDate;
21+
import java.util.List;
22+
23+
import static org.junit.jupiter.api.Assertions.assertEquals;
24+
import static org.junit.jupiter.api.Assertions.assertNotNull;
25+
26+
@SpringBootTest
27+
@ActiveProfiles("local")
28+
@Transactional
29+
class AssignmentGradeServiceTest {
30+
31+
@Autowired
32+
private AssignmentGradeService gradeService;
33+
34+
@Autowired
35+
private AssignmentRepository assignmentRepository;
36+
37+
@Autowired
38+
private StudentRepository studentRepository;
39+
40+
@Autowired
41+
private AssignmentGradeRepository gradeRepository;
42+
43+
@PersistenceContext
44+
private EntityManager entityManager;
45+
46+
private Assignment assignment;
47+
private Student student;
48+
49+
@BeforeEach
50+
void setUp() {
51+
Course course = Course.of(
52+
"Test Course",
53+
"Course Description",
54+
LocalDate.now(),
55+
LocalDate.now().plusDays(30),
56+
30,
57+
null
58+
);
59+
entityManager.persist(course);
60+
entityManager.flush();
61+
entityManager.clear();
62+
63+
assignment = Assignment.of(
64+
course,
65+
"Test Assignment",
66+
"Assignment Description",
67+
LocalDate.now().plusDays(7)
68+
);
69+
assignment = assignmentRepository.save(assignment);
70+
71+
student = Student.of(
72+
"Test Student",
73+
"password",
74+
"student@example.com",
75+
"Test Student"
76+
);
77+
student = studentRepository.save(student);
78+
}
79+
80+
@Test
81+
@DisplayName("성공적으로 성적을 생성한다.")
82+
void testCreateGrade() {
83+
AssignmentGrade grade = gradeService.createGrade(assignment.getId(), student.getId(), 90, "수고하셨습니다.");
84+
85+
assertNotNull(grade);
86+
assertEquals(90, grade.getGrade());
87+
assertEquals("수고하셨습니다.", grade.getFeedback());
88+
}
89+
90+
@Test
91+
@DisplayName("과제 ID로 성적 목록을 조회한다.")
92+
void testGetGradesByAssignment() {
93+
gradeService.createGrade(assignment.getId(), student.getId(), 85, "수고하셨습니다.");
94+
95+
List<AssignmentGrade> grades = gradeService.getGradesByAssignment(assignment.getId());
96+
assertEquals(1, grades.size());
97+
assertEquals(85, grades.get(0).getGrade());
98+
assertEquals("수고하셨습니다.", grades.get(0).getFeedback());
99+
}
100+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package com.example.lms.domain.assignment.service;
2+
3+
import com.example.lms.domain.assignment.dto.AssignmentRequest;
4+
import com.example.lms.domain.assignment.entity.Assignment;
5+
import com.example.lms.domain.assignment.repository.AssignmentRepository;
6+
import com.example.lms.domain.course.entity.Course;
7+
import com.example.lms.domain.course.repository.CourseRepository;
8+
import org.junit.jupiter.api.BeforeEach;
9+
import org.junit.jupiter.api.DisplayName;
10+
import org.junit.jupiter.api.Test;
11+
import org.springframework.beans.factory.annotation.Autowired;
12+
import org.springframework.boot.test.context.SpringBootTest;
13+
import org.springframework.test.context.ActiveProfiles;
14+
import org.springframework.transaction.annotation.Transactional;
15+
16+
import java.time.LocalDate;
17+
18+
import static org.junit.jupiter.api.Assertions.assertEquals;
19+
import static org.junit.jupiter.api.Assertions.assertNotNull;
20+
import static org.junit.jupiter.api.Assertions.assertThrows;
21+
22+
@SpringBootTest
23+
@ActiveProfiles("local")
24+
@Transactional
25+
class AssignmentServiceTest {
26+
27+
@Autowired
28+
private AssignmentService assignmentService;
29+
30+
@Autowired
31+
private AssignmentRepository assignmentRepository;
32+
33+
@Autowired
34+
private CourseRepository courseRepository;
35+
36+
private Long courseId;
37+
38+
@BeforeEach
39+
void setUp() {
40+
Course course = Course.of("Test Course", "Course Description", LocalDate.now(), LocalDate.now().plusDays(30), 30, null);
41+
course = courseRepository.save(course);
42+
this.courseId = course.getId();
43+
}
44+
45+
@Test
46+
@DisplayName("성공적으로 과제를 생성한다.")
47+
void testCreateAssignment() {
48+
AssignmentRequest request = new AssignmentRequest("New Assignment", "Assignment Description", LocalDate.now().plusDays(7));
49+
Assignment result = assignmentService.createAssignment(courseId, request);
50+
51+
assertNotNull(result);
52+
assertEquals("New Assignment", result.getTitle());
53+
}
54+
55+
@Test
56+
@DisplayName("존재하지 않는 과정으로 과제를 생성할 때 예외 발생")
57+
void testCreateAssignmentCourseNotFound() {
58+
AssignmentRequest request = new AssignmentRequest("Invalid Assignment", "Description", LocalDate.now().plusDays(7));
59+
Long invalidCourseId = 999L;
60+
61+
assertThrows(IllegalArgumentException.class, () ->
62+
assignmentService.createAssignment(invalidCourseId, request),
63+
"Course not found");
64+
}
65+
}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package com.example.lms.domain.assignment.service;
2+
3+
import com.example.lms.domain.assignment.dto.SubmissionRequest;
4+
import com.example.lms.domain.assignment.entity.Assignment;
5+
import com.example.lms.domain.assignment.entity.Submission;
6+
import com.example.lms.domain.assignment.repository.AssignmentRepository;
7+
import com.example.lms.domain.assignment.repository.SubmissionRepository;
8+
import com.example.lms.domain.course.entity.Course;
9+
import com.example.lms.domain.student.entity.Student;
10+
import com.example.lms.domain.student.repository.StudentRepository;
11+
import jakarta.persistence.EntityManager;
12+
import jakarta.persistence.PersistenceContext;
13+
import org.junit.jupiter.api.BeforeEach;
14+
import org.junit.jupiter.api.DisplayName;
15+
import org.junit.jupiter.api.Test;
16+
import org.springframework.beans.factory.annotation.Autowired;
17+
import org.springframework.boot.test.context.SpringBootTest;
18+
import org.springframework.test.context.ActiveProfiles;
19+
import org.springframework.transaction.annotation.Transactional;
20+
21+
import java.time.LocalDate;
22+
23+
import static org.junit.jupiter.api.Assertions.assertEquals;
24+
import static org.junit.jupiter.api.Assertions.assertNotNull;
25+
import static org.junit.jupiter.api.Assertions.assertThrows;
26+
27+
@SpringBootTest
28+
@ActiveProfiles("local")
29+
@Transactional
30+
class SubmissionServiceTest {
31+
32+
@Autowired
33+
private SubmissionService submissionService;
34+
35+
@Autowired
36+
private AssignmentRepository assignmentRepository;
37+
38+
@Autowired
39+
private StudentRepository studentRepository;
40+
41+
@Autowired
42+
private SubmissionRepository submissionRepository;
43+
44+
@PersistenceContext
45+
private EntityManager entityManager;
46+
47+
private Assignment assignment;
48+
private Student student;
49+
50+
@BeforeEach
51+
void setUp() {
52+
Course course = Course.of("Test Course", "Course Description", LocalDate.now(), LocalDate.now().plusDays(30), 30, null);
53+
entityManager.persist(course);
54+
entityManager.flush();
55+
entityManager.clear();
56+
57+
assignment = Assignment.of(course, "Test Assignment", "Assignment Description", LocalDate.now().plusDays(7));
58+
assignment = assignmentRepository.save(assignment);
59+
60+
student = Student.of("Test Student", "password", "student@example.com", "Test Student");
61+
student = studentRepository.save(student);
62+
}
63+
64+
@Test
65+
@DisplayName("성공적으로 과제를 제출한다.")
66+
void testSubmitAssignment() {
67+
SubmissionRequest request = new SubmissionRequest();
68+
request.setStudentId(student.getId());
69+
request.setFileUrl("http://example.com/submission");
70+
71+
Submission submission = submissionService.submitAssignment(assignment.getId(), request);
72+
73+
assertNotNull(submission);
74+
assertEquals("http://example.com/submission", submission.getFileUrl());
75+
assertEquals(student.getId(), submission.getStudent().getId());
76+
}
77+
78+
@Test
79+
@DisplayName("존재하지 않는 과제 제출 시 예외 발생")
80+
void testSubmitAssignmentNotFound() {
81+
SubmissionRequest request = new SubmissionRequest();
82+
request.setStudentId(student.getId());
83+
request.setFileUrl("http://example.com/submission");
84+
85+
Long invalidAssignmentId = 999L;
86+
87+
assertThrows(IllegalArgumentException.class, () ->
88+
submissionService.submitAssignment(invalidAssignmentId, request),
89+
"Assignment not found");
90+
}
91+
}

0 commit comments

Comments
 (0)