-
Notifications
You must be signed in to change notification settings - Fork 199
/
Copy pathOrderTableServiceTest.java
135 lines (119 loc) · 5.52 KB
/
OrderTableServiceTest.java
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
125
126
127
128
129
130
131
132
133
134
135
package kitchenpos.application;
import kitchenpos.order.eat_in_order.application.OrderTableService;
import kitchenpos.legacy.domain.OrderRepository;
import kitchenpos.legacy.domain.OrderStatus;
import kitchenpos.order.delivery_order.domain.OrderTable;
import kitchenpos.order.delivery_order.domain.OrderTableRepository;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.NullAndEmptySource;
import org.junit.jupiter.params.provider.ValueSource;
import java.util.List;
import java.util.UUID;
import static kitchenpos.Fixtures.order;
import static kitchenpos.Fixtures.orderTable;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.junit.jupiter.api.Assertions.assertAll;
class OrderTableServiceTest {
private OrderTableRepository orderTableRepository;
private OrderRepository orderRepository;
private OrderTableService orderTableService;
@BeforeEach
void setUp() {
orderTableRepository = new InMemoryOrderTableRepository();
orderRepository = new InMemoryOrderRepository();
orderTableService = new OrderTableService(orderTableRepository, orderRepository);
}
@DisplayName("주문 테이블을 등록할 수 있다.")
@Test
void create() {
final OrderTable expected = createOrderTableRequest("1번");
final OrderTable actual = orderTableService.create(expected);
assertThat(actual).isNotNull();
assertAll(
() -> assertThat(actual.getId()).isNotNull(),
() -> assertThat(actual.getName()).isEqualTo(expected.getName()),
() -> assertThat(actual.getNumberOfGuests()).isZero(),
() -> assertThat(actual.isOccupied()).isFalse()
);
}
@DisplayName("주문 테이블의 이름이 올바르지 않으면 등록할 수 없다.")
@NullAndEmptySource
@ParameterizedTest
void create(final String name) {
final OrderTable expected = createOrderTableRequest(name);
assertThatThrownBy(() -> orderTableService.create(expected))
.isInstanceOf(IllegalArgumentException.class);
}
@DisplayName("빈 테이블을 해지할 수 있다.")
@Test
void sit() {
final UUID orderTableId = orderTableRepository.save(orderTable(false, 0)).getId();
final OrderTable actual = orderTableService.sit(orderTableId);
assertThat(actual.isOccupied()).isTrue();
}
@DisplayName("빈 테이블로 설정할 수 있다.")
@Test
void clear() {
final UUID orderTableId = orderTableRepository.save(orderTable(true, 4)).getId();
final OrderTable actual = orderTableService.clear(orderTableId);
assertAll(
() -> assertThat(actual.getNumberOfGuests()).isZero(),
() -> assertThat(actual.isOccupied()).isFalse()
);
}
@DisplayName("완료되지 않은 주문이 있는 주문 테이블은 빈 테이블로 설정할 수 없다.")
@Test
void clearWithUncompletedOrders() {
final OrderTable orderTable = orderTableRepository.save(orderTable(true, 4));
final UUID orderTableId = orderTable.getId();
orderRepository.save(order(OrderStatus.ACCEPTED, orderTable));
assertThatThrownBy(() -> orderTableService.clear(orderTableId))
.isInstanceOf(IllegalStateException.class);
}
@DisplayName("방문한 손님 수를 변경할 수 있다.")
@Test
void changeNumberOfGuests() {
final UUID orderTableId = orderTableRepository.save(orderTable(true, 0)).getId();
final OrderTable expected = changeNumberOfGuestsRequest(4);
final OrderTable actual = orderTableService.changeNumberOfGuests(orderTableId, expected);
assertThat(actual.getNumberOfGuests()).isEqualTo(4);
}
@DisplayName("방문한 손님 수가 올바르지 않으면 변경할 수 없다.")
@ValueSource(ints = -1)
@ParameterizedTest
void changeNumberOfGuests(final int numberOfGuests) {
final UUID orderTableId = orderTableRepository.save(orderTable(true, 0)).getId();
final OrderTable expected = changeNumberOfGuestsRequest(numberOfGuests);
assertThatThrownBy(() -> orderTableService.changeNumberOfGuests(orderTableId, expected))
.isInstanceOf(IllegalArgumentException.class);
}
@DisplayName("빈 테이블은 방문한 손님 수를 변경할 수 없다.")
@Test
void changeNumberOfGuestsInEmptyTable() {
final UUID orderTableId = orderTableRepository.save(orderTable(false, 0)).getId();
final OrderTable expected = changeNumberOfGuestsRequest(4);
assertThatThrownBy(() -> orderTableService.changeNumberOfGuests(orderTableId, expected))
.isInstanceOf(IllegalStateException.class);
}
@DisplayName("주문 테이블의 목록을 조회할 수 있다.")
@Test
void findAll() {
orderTableRepository.save(orderTable());
final List<OrderTable> actual = orderTableService.findAll();
assertThat(actual).hasSize(1);
}
private OrderTable createOrderTableRequest(final String name) {
final OrderTable orderTable = new OrderTable();
orderTable.setName(name);
return orderTable;
}
private OrderTable changeNumberOfGuestsRequest(final int numberOfGuests) {
final OrderTable orderTable = new OrderTable();
orderTable.setNumberOfGuests(numberOfGuests);
return orderTable;
}
}