@@ -74,6 +74,8 @@ TTestYooKassa = class(TTestCase)
7474 procedure TestLogging ;
7575 procedure TestMarkCodeInfoValidation ;
7676 procedure TestPhoneValidation ;
77+ procedure TestEmailValidation ;
78+ procedure TestEmailAndPhoneValidationTogether ;
7779 end ;
7880
7981implementation
@@ -819,6 +821,163 @@ procedure TTestYooKassa.TestPhoneValidation;
819821 end ;
820822end ;
821823
824+ procedure TTestYooKassa.TestEmailValidation ;
825+ var
826+ User: TYookassaUser;
827+ begin
828+ User := TYookassaUser.Create;
829+ try
830+ // Валидные форматы email с нормализацией
831+ User.Email := ' User@Example.Com' ;
832+ AssertEquals(' user@example.com' , User.Email);
833+
834+ User.Email := ' user_name@sub.domain.org' ;
835+ AssertEquals(' user_name@sub.domain.org' , User.Email);
836+
837+ User.Email := ' test-email@domain-name.com' ;
838+ AssertEquals(' test-email@domain-name.com' , User.Email);
839+
840+ // Пустой email должен работать
841+ User.Email := ' ' ;
842+ AssertEquals(' ' , User.Email);
843+
844+ // Невалидные email должны вызывать исключение
845+ try
846+ User.Email := ' invalid-email' ; // Нет @
847+ Fail(' Should raise validation error for missing @' );
848+ except
849+ on EYooKassaValidationError do
850+ ; // Expected
851+ end ;
852+
853+ try
854+ User.Email := ' user@@domain.com' ; // Двойной @
855+ Fail(' Should raise validation error for double @' );
856+ except
857+ on EYooKassaValidationError do
858+ ; // Expected
859+ end ;
860+
861+ try
862+ User.Email := ' @domain.com' ; // Нет локальной части
863+ Fail(' Should raise validation error for missing local part' );
864+ except
865+ on EYooKassaValidationError do
866+ ; // Expected
867+ end ;
868+
869+ try
870+ User.Email := ' user@' ; // Нет доменной части
871+ Fail(' Should raise validation error for missing domain' );
872+ except
873+ on EYooKassaValidationError do
874+ ; // Expected
875+ end ;
876+
877+ try
878+ User.Email := ' user@domain' ; // Нет TLD
879+ Fail(' Should raise validation error for missing TLD' );
880+ except
881+ on EYooKassaValidationError do
882+ ; // Expected
883+ end ;
884+
885+ try
886+ User.Email := ' .user@domain.com' ; // Локальная часть начинается с точки
887+ Fail(' Should raise validation error for local part starting with dot' );
888+ except
889+ on EYooKassaValidationError do
890+ ; // Expected
891+ end ;
892+
893+ try
894+ User.Email := ' user.@domain.com' ; // Локальная часть заканчивается точкой
895+ Fail(' Should raise validation error for local part ending with dot' );
896+ except
897+ on EYooKassaValidationError do
898+ ; // Expected
899+ end ;
900+
901+ try
902+ User.Email := ' user@.domain.com' ; // Домен начинается с точки
903+ Fail(' Should raise validation error for domain starting with dot' );
904+ except
905+ on EYooKassaValidationError do
906+ ; // Expected
907+ end ;
908+
909+ try
910+ User.Email := ' user@domain.com.' ; // Домен заканчивается точкой
911+ Fail(' Should raise validation error for domain ending with dot' );
912+ except
913+ on EYooKassaValidationError do
914+ ; // Expected
915+ end ;
916+
917+ try
918+ User.Email := ' user with spaces@domain.com' ; // Пробелы в локальной части
919+ Fail(' Should raise validation error for spaces in local part' );
920+ except
921+ on EYooKassaValidationError do
922+ ; // Expected
923+ end ;
924+
925+ try
926+ User.Email := ' user@domain with spaces.com' ; // Пробелы в домене
927+ Fail(' Should raise validation error for spaces in domain' );
928+ except
929+ on EYooKassaValidationError do
930+ ; // Expected
931+ end ;
932+
933+ finally
934+ User.Free;
935+ end ;
936+ end ;
937+
938+ procedure TTestYooKassa.TestEmailAndPhoneValidationTogether ;
939+ var
940+ User: TYookassaUser;
941+ Receipt: TYookassaReceipt;
942+ JSON: TJSONObject;
943+ begin
944+ // Тестируем совместное использование валидации email и phone
945+ User := TYookassaUser.Create;
946+ try
947+ // Валидация и нормализация обоих полей
948+ User.Email := ' TEST.User@EXAMPLE.COM' ;
949+ User.Phone := ' +7 (900) 123-45-67' ;
950+
951+ AssertEquals(' test.user@example.com' , User.Email);
952+ AssertEquals(' 79001234567' , User.Phone);
953+
954+ // Тест в составе чека
955+ Receipt := TYookassaReceipt.Create;
956+ try
957+ Receipt.Customer.Email := ' Customer@TEST.RU ' ;
958+ Receipt.Customer.Phone := ' 8-900-123-45-67' ;
959+
960+ AssertEquals(' customer@test.ru' , Receipt.Customer.Email);
961+ AssertEquals(' 79001234567' , Receipt.Customer.Phone);
962+
963+ // Проверяем что в JSON попадают нормализованные значения
964+ JSON := Receipt.ToJSON;
965+ try
966+ AssertEquals(' customer@test.ru' , JSON.Objects[' customer' ].Get(' email' , ' ' ));
967+ AssertEquals(' 79001234567' , JSON.Objects[' customer' ].Get(' phone' , ' ' ));
968+ finally
969+ JSON.Free;
970+ end ;
971+
972+ finally
973+ Receipt.Free;
974+ end ;
975+
976+ finally
977+ User.Free;
978+ end ;
979+ end ;
980+
822981initialization
823982 RegisterTest(TTestYooKassa);
824983
0 commit comments