-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathAppControllerTest.java
More file actions
152 lines (121 loc) · 7.08 KB
/
AppControllerTest.java
File metadata and controls
152 lines (121 loc) · 7.08 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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package userInterface;
import dto.Client;
import enums.Field;
import input.CustomCollection;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import java.io.*;
import static org.junit.jupiter.api.Assertions.*;
class AppControllerTest {
private AppController controller;
private final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
private final PrintStream originalOut = System.out;
@BeforeEach
void setUp() {
controller = new AppController();
// Перенаправляем System.out в ByteArrayOutputStream для перехвата вывода
System.setOut(new PrintStream(outputStream));
}
@Test
@DisplayName("startDefaultSorting должен отсортировать список и вывести всех клиентов")
void testStartDefaultSorting() {
// Arrange: добавляем тестовых клиентов
Client client1 = new Client.ClientBuilder().name("Иван").phoneNumber("+79991234567").idNumber(2).build();
Client client2 = new Client.ClientBuilder().name("Пётр").phoneNumber("+79997654321").idNumber(1).build();
controller.getFullList().add(client1);
controller.getFullList().add(client2);
// Act
controller.startDefaultSorting();
// Assert: проверяем, что вывод содержит обоих клиентов (порядок после сортировки: client2, client1)
String output = outputStream.toString();
assertTrue(output.contains("Иван") && output.contains("Пётр"),
"Вывод должен содержать всех клиентов после сортировки");
}
@Test
@DisplayName("startDynamicSorting должен отсортировать по указанному полю")
void testStartDynamicSorting() {
// Arrange: сортировка по имени (Field.NAME)
Client client1 = new Client.ClientBuilder().name("Сергей").phoneNumber("+79993333333").idNumber(5).build();
Client client2 = new Client.ClientBuilder().name("Алексей").phoneNumber("+79994444444").idNumber(6).build();
controller.getFullList().add(client1);
controller.getFullList().add(client2);
// Act: сортировка по полю имени
controller.startDynamicSorting(Field.NAME);
// Assert: после сортировки первым должен идти «Алексей»
String output = outputStream.toString();
int alexeyIndex = output.indexOf("Алексей");
int sergeyIndex = output.indexOf("Сергей");
assertTrue(alexeyIndex < sergeyIndex,
"После сортировки по имени 'Алексей' должен идти перед 'Сергеем'");
}
@Test
@DisplayName("getFullList должен возвращать актуальную коллекцию клиентов")
void testGetFullList() {
// Arrange: заполняем коллекцию
Client client = new Client.ClientBuilder().name("Тест").phoneNumber("+70000000000").idNumber(99).build();
controller.getFullList().add(client);
// Act
CustomCollection<Client> list = controller.getFullList();
// Assert
assertEquals(1, list.size());
assertEquals("Тест", list.get(0).getName());
}
@Test
@DisplayName("showAndWriteAllClients должен выводить и записывать всех клиентов в файл")
void testShowAndWriteAllClients() {
// Arrange
Client client = new Client.ClientBuilder().name("ВыводТест").phoneNumber("+71111111111").idNumber(77).build();
controller.getFullList().add(client);
// Act
controller.showAndWriteAllClients();
// Assert: вывод должен содержать имя клиента
String output = outputStream.toString();
assertTrue(output.contains("ВыводТест"),
"showAndWriteAllClients должен вывести всех клиентов из fullList");
}
@Test
@DisplayName("startFileReaderStrategy должен загрузить клиентов из файла и посчитать Алексеев")
void testStartFileReaderStrategy() {
File testFile = new File("test_clients.txt");
try (BufferedWriter writer = new BufferedWriter(new FileWriter(testFile))) {
writer.write("Алексей Петров|+79991112233|1\n");
writer.write("Мария Иванова|+79992223344|2\n");
} catch (Exception e){
throw new RuntimeException(e);
}
// Arrange: предполагаем, что createFileStrategy корректно создаёт стратегию для тестового файла
// В реальных тестах нужно подготовить файл с данными, содержащими хотя бы одного «Алексея»
String testFilePath = "test_clients.txt";
// Act: запускаем загрузку из файла
controller.startFileReaderStrategy(testFilePath);
// Assert: проверяем, что fullList не пуста (данные загружены)
assertFalse(controller.getFullList().isEmpty(),
"fullList должен быть заполнен после загрузки из файла");
// Проверяем, что в выводе есть строка с количеством Алексеев
String output = outputStream.toString();
assertTrue(output.contains("Добавлено Алексеев:"),
"Вывод должен содержать количество добавленных Алексеев");
}
@Test
@DisplayName("startRandomDataStrategy должен сгенерировать случайных клиентов и посчитать Алексеев")
void testStartRandomDataStrategy() {
// Arrange: генерируем 3 случайных клиента
int count = 3;
// Act
controller.startRandomDataStrategy(count);
// Assert: fullList должен содержать 3 клиента
assertEquals(count, controller.getFullList().size(),
"fullList должен содержать указанное количество сгенерированных клиентов");
// Проверяем вывод количества Алексеев
String output = outputStream.toString();
assertTrue(output.contains("Добавлено Алексеев:"),
"Вывод должен содержать количество добавленных Алексеев");
}
@AfterEach
void tearDown() {
// Восстанавливаем оригинальный System.out после теста
System.setOut(originalOut);
}
}