-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathTaskOrderCalculationPolicyTest.java
More file actions
127 lines (97 loc) · 3.81 KB
/
TaskOrderCalculationPolicyTest.java
File metadata and controls
127 lines (97 loc) · 3.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package clap.server.domain.policy.task;
import clap.server.domain.model.task.Task;
import clap.server.exception.DomainException;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class)
class TaskOrderCalculationPolicyTest {
private static final long DEFAULT_PROCESSOR_ORDER_GAP = 64L;
@InjectMocks
private TaskOrderCalculationPolicy policy;
@Mock
private Task prevTask;
@Mock
private Task nextTask;
@Test
@DisplayName("맨 위에 새로운 Task 추가 - 이전 Task가 없는 경우")
void calculateOrderForTop_WhenPrevTaskIsNull() {
// Arrange (준비)
when(nextTask.getProcessorOrder()).thenReturn(3000L);
// Act (실행)
long order = policy.calculateOrderForTop(null, nextTask);
// Assert (검증)
assertEquals(3000L - DEFAULT_PROCESSOR_ORDER_GAP, order);
}
@Test
@DisplayName("맨 위에 새로운 Task 추가 - 이전 Task가 존재하는 경우")
void calculateOrderForTop_WhenPrevTaskExists() {
// Arrange
when(prevTask.getProcessorOrder()).thenReturn(1000L);
when(nextTask.getProcessorOrder()).thenReturn(3000L);
// Act
long order = policy.calculateOrderForTop(prevTask, nextTask);
// Assert
assertEquals(2000L, order);
}
@Test
@DisplayName("맨 아래에 새로운 Task 추가 - 다음 Task가 없는 경우")
void calculateOrderForBottom_WhenNextTaskIsNull() {
// Arrange
when(prevTask.getProcessorOrder()).thenReturn(1000L);
// Act
long order = policy.calculateOrderForBottom(prevTask, null);
// Assert
assertEquals(1000L + DEFAULT_PROCESSOR_ORDER_GAP, order);
}
@Test
@DisplayName("맨 아래에 새로운 Task 추가 - 다음 Task가 존재하는 경우")
void calculateOrderForBottom_WhenNextTaskExists() {
// Arrange
when(prevTask.getProcessorOrder()).thenReturn(1000L);
when(nextTask.getProcessorOrder()).thenReturn(3000L);
// Act
long order = policy.calculateOrderForBottom(prevTask, nextTask);
// Assert
assertEquals(2000L, order);
}
@Test
@DisplayName("새로운 순서를 계산 - 유효한 범위 내에서 계산")
void calculateNewProcessorOrder_WhenValid() {
// Arrange
long prevOrder = 1000L;
long nextOrder = 3000L;
// Act
long order = policy.calculateNewProcessorOrder(prevOrder, nextOrder);
// Assert
assertEquals(2000L, order);
}
@Test
@DisplayName("새로운 순서를 계산 - 간격이 너무 좁을 경우 예외 발생")
void calculateNewProcessorOrder_WhenOrderGapIsTooSmall() {
// Arrange
long prevOrder = 1000L;
long nextOrder = 1001L;
// Act & Assert
assertThrows(DomainException.class, () -> policy.calculateNewProcessorOrder(prevOrder, nextOrder));
}
@Test
@DisplayName("새로운 순서를 계산 - prevTaskOrder 또는 nextTaskOrder가 null일 경우 기본값 반환")
void calculateNewProcessorOrder_WhenNullValues() {
// Arrange
Long prevOrder = null;
Long nextOrder = 3000L;
// Act
long order1 = policy.calculateNewProcessorOrder(prevOrder, nextOrder);
long order2 = policy.calculateNewProcessorOrder(1000L, null);
// Assert
assertEquals(DEFAULT_PROCESSOR_ORDER_GAP, order1);
assertEquals(DEFAULT_PROCESSOR_ORDER_GAP, order2);
}
}