1+ package dto ;
2+
3+ import org .junit .jupiter .api .DisplayName ;
4+ import org .junit .jupiter .api .Test ;
5+
6+ import static org .junit .jupiter .api .Assertions .*;
7+
8+ class ClientTest {
9+
10+ @ Test
11+ @ DisplayName ("Конструктор Client должен корректно инициализировать поля из ClientBuilder" )
12+ void testClientConstructorInitializesFieldsCorrectly () {
13+ // Arrange
14+ Client .ClientBuilder builder = new Client .ClientBuilder ()
15+ .name ("Иван Иванов" )
16+ .phoneNumber ("+79991234567" )
17+ .idNumber (1 );
18+
19+ // Act
20+ Client client = new Client (builder );
21+
22+ // Assert
23+ assertEquals ("Иван Иванов" , client .getName ());
24+ assertEquals ("+79991234567" , client .getPhoneNumber ());
25+ assertEquals (1 , client .getIdNumber ());
26+ }
27+
28+ @ Test
29+ @ DisplayName ("Геттеры должны возвращать корректные значения полей" )
30+ void testGettersReturnCorrectValues () {
31+ // Arrange
32+ Client .ClientBuilder builder = new Client .ClientBuilder ()
33+ .name ("Петр Петров" )
34+ .phoneNumber ("+78887654321" )
35+ .idNumber (2 );
36+ Client client = new Client (builder );
37+
38+ // Act & Assert
39+ assertEquals ("Петр Петров" , client .getName ());
40+ assertEquals ("+78887654321" , client .getPhoneNumber ());
41+ assertEquals (2 , client .getIdNumber ());
42+ }
43+
44+ @ Test
45+ @ DisplayName ("Метод build() ClientBuilder должен создавать корректный объект Client" )
46+ void testClientBuilderBuildCreatesCorrectClient () {
47+ // Arrange
48+ Client .ClientBuilder builder = new Client .ClientBuilder ()
49+ .name ("Мария Сидорова" )
50+ .phoneNumber ("+77776543210" )
51+ .idNumber (3 );
52+
53+ // Act
54+ Client client = builder .build ();
55+
56+ // Assert
57+ assertNotNull (client );
58+ assertEquals ("Мария Сидорова" , client .getName ());
59+ assertEquals ("+77776543210" , client .getPhoneNumber ());
60+ assertEquals (3 , client .getIdNumber ());
61+ }
62+
63+ @ Test
64+ @ DisplayName ("Цепочка методов в ClientBuilder должна работать корректно" )
65+ void testClientBuilderMethodChaining () {
66+ // Act
67+ Client client = new Client .ClientBuilder ()
68+ .name ("Алексей Козлов" )
69+ .phoneNumber ("+75554443322" )
70+ .idNumber (4 )
71+ .build ();
72+
73+ // Assert
74+ assertNotNull (client );
75+ assertEquals ("Алексей Козлов" , client .getName ());
76+ assertEquals ("+75554443322" , client .getPhoneNumber ());
77+ assertEquals (4 , client .getIdNumber ());
78+ }
79+
80+ @ Test
81+ @ DisplayName ("toString() должен возвращать строку в ожидаемом формате" )
82+ void testToStringReturnsExpectedFormat () {
83+ // Arrange
84+ Client .ClientBuilder builder = new Client .ClientBuilder ()
85+ .name ("Анна Волкова" )
86+ .phoneNumber ("+73332221100" )
87+ .idNumber (5 );
88+ Client client = builder .build ();
89+ String expectedString = "Client{name='Анна Волкова', phoneNumber='+73332221100', idNumber=5}" ;
90+
91+ // Act
92+ String actualString = client .toString ();
93+
94+ // Assert
95+ assertEquals (expectedString , actualString );
96+ }
97+
98+ @ Test
99+ @ DisplayName ("Поля Client должны быть final и не изменяться после создания" )
100+ void testClientFieldsAreImmutable () {
101+ // Arrange
102+ Client .ClientBuilder builder = new Client .ClientBuilder ()
103+ .name ("Сергей Новиков" )
104+ .phoneNumber ("+71112223344" )
105+ .idNumber (6 );
106+ Client client = builder .build ();
107+
108+ // Act & Assert (проверяем, что геттеры возвращают те же значения)
109+ assertEquals ("Сергей Новиков" , client .getName ());
110+ assertEquals ("+71112223344" , client .getPhoneNumber ());
111+ assertEquals (6 , client .getIdNumber ());
112+
113+ // Попытка изменить состояние через builder не должна повлиять на существующий объект
114+ builder .name ("Другое имя" ).idNumber (999 );
115+ Client anotherClient = builder .build ();
116+
117+ // Проверяем, что первый клиент остался неизменным
118+ assertEquals ("Сергей Новиков" , client .getName ());
119+ assertEquals (6 , client .getIdNumber ());
120+
121+ // Проверяем, что новый клиент имеет новые значения
122+ assertEquals ("Другое имя" , anotherClient .getName ());
123+ assertEquals (999 , anotherClient .getIdNumber ());
124+ }
125+
126+ @ Test
127+ @ DisplayName ("Два клиента с одинаковыми данными должны быть разными объектами" )
128+ void testClientsWithSameDataAreDifferentObjects () {
129+ // Arrange
130+ Client .ClientBuilder builder1 = new Client .ClientBuilder ()
131+ .name ("Ольга Смирнова" )
132+ .phoneNumber ("+79998887766" )
133+ .idNumber (7 );
134+ Client .ClientBuilder builder2 = new Client .ClientBuilder ()
135+ .name ("Ольга Смирнова" )
136+ .phoneNumber ("+79998887766" )
137+ .idNumber (7 );
138+
139+ // Act
140+ Client client1 = builder1 .build ();
141+ Client client2 = builder2 .build ();
142+
143+ // Assert
144+ assertNotSame (client1 , client2 ); // Разные объекты
145+ assertEquals (client1 .getName (), client2 .getName ());
146+ assertEquals (client1 .getPhoneNumber (), client2 .getPhoneNumber ());
147+ assertEquals (client1 .getIdNumber (), client2 .getIdNumber ());
148+ }
149+ }
0 commit comments