Skip to content

Commit f8a8fd2

Browse files
refactor: the ValidationUtils into validators
1 parent b330f1f commit f8a8fd2

7 files changed

Lines changed: 99 additions & 118 deletions

File tree

src/main/java/dev/resms/ReSMS.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ public ReSMS(@NonNull ReSMSConfig config) {
4545
* @throws ReSMSException if fails
4646
*/
4747
public SendSmsResponse send(@NonNull String to, @NonNull String message) throws ReSMSException {
48-
return smsService.send(to, message);
48+
SendSmsRequest request = new SendSmsRequest(to, message);
49+
return this.send(request);
4950
}
5051

5152
/**
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package dev.resms.exception.validation;
2+
3+
import dev.resms.exception.ReSMSException;
4+
5+
public class ReSMSValidationException extends ReSMSException {
6+
public ReSMSValidationException(String message) {
7+
super(message);
8+
}
9+
}

src/main/java/dev/resms/service/SmsService.java

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import dev.resms.model.request.SendSmsRequest;
66
import dev.resms.model.response.SendSmsResponse;
77
import dev.resms.repository.SmsRepository;
8-
import dev.resms.utils.ValidationUtil;
8+
import dev.resms.validator.SendSmsValidator;
99
import lombok.NonNull;
1010

1111
/** SMS service for sending SMS messages */
@@ -16,21 +16,6 @@ public SmsService(@NonNull ReSMSConfig config) {
1616
this.apiClient = new SmsRepository(config);
1717
}
1818

19-
/**
20-
* Sends an SMS message
21-
*
22-
* @param to Phone number to send the message to
23-
* @param message Message content
24-
* @return SendSmsResponse containing the message ID and status
25-
* @throws ReSMSException if fails
26-
*/
27-
public SendSmsResponse send(@NonNull String to, @NonNull String message) throws ReSMSException {
28-
ValidationUtil.validatePhoneNumber(to);
29-
ValidationUtil.validateMessage(message);
30-
SendSmsRequest request = new SendSmsRequest(to, message);
31-
return apiClient.sendSms(request);
32-
}
33-
3419
/**
3520
* Sends an SMS message using request object
3621
*
@@ -39,7 +24,7 @@ public SendSmsResponse send(@NonNull String to, @NonNull String message) throws
3924
* @throws ReSMSException if fails
4025
*/
4126
public SendSmsResponse send(@NonNull SendSmsRequest request) throws ReSMSException {
42-
ValidationUtil.validateSendSmsRequest(request);
27+
SendSmsValidator.validate(request);
4328
return apiClient.sendSms(request);
4429
}
4530
}

src/main/java/dev/resms/utils/ValidationUtil.java

Lines changed: 0 additions & 59 deletions
This file was deleted.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package dev.resms.validator;
2+
3+
import dev.resms.exception.validation.ReSMSValidationException;
4+
import dev.resms.model.request.SendSmsRequest;
5+
import lombok.NonNull;
6+
7+
public class SendSmsValidator {
8+
private static final String PHONE_NUMBER_REGEX = "^\\+?[1-9]\\d{1,14}$";
9+
10+
public static void validate(@NonNull SendSmsRequest request) throws ReSMSValidationException {
11+
validatePhoneNumber(request.getTo());
12+
validateMessage(request.getMessage());
13+
}
14+
15+
/**
16+
* Validates a phone number format
17+
*
18+
* @param phoneNumber Phone number to validate
19+
* @throws ReSMSValidationException if the phone number is invalid
20+
*/
21+
public static void validatePhoneNumber(@NonNull String phoneNumber)
22+
throws ReSMSValidationException {
23+
if (phoneNumber.isBlank()) {
24+
throw new ReSMSValidationException("Phone number cannot be empty");
25+
}
26+
27+
if (!phoneNumber.matches(PHONE_NUMBER_REGEX)) {
28+
throw new ReSMSValidationException("Invalid phone number format");
29+
}
30+
}
31+
32+
/**
33+
* Validates message content
34+
*
35+
* @param message Message to validate
36+
* @throws ReSMSValidationException if a message is invalid
37+
*/
38+
public static void validateMessage(@NonNull String message) throws ReSMSValidationException {
39+
if (message.isBlank()) {
40+
throw new ReSMSValidationException("Message cannot be empty");
41+
}
42+
}
43+
}

src/test/java/dev/resms/utils/ValidationUtilTest.java

Lines changed: 0 additions & 41 deletions
This file was deleted.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package dev.resms.validator;
2+
3+
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
4+
import static org.junit.jupiter.api.Assertions.assertEquals;
5+
import static org.junit.jupiter.api.Assertions.assertThrows;
6+
7+
import dev.resms.exception.validation.ReSMSValidationException;
8+
import org.junit.jupiter.api.Test;
9+
10+
class SendSmsValidatorTest {
11+
@Test
12+
void testValidatePhoneNumber_validNumber() {
13+
assertDoesNotThrow(() -> SendSmsValidator.validatePhoneNumber("+1234567890"));
14+
}
15+
16+
@Test
17+
void testValidatePhoneNumber_emptyNumber() {
18+
ReSMSValidationException ex =
19+
assertThrows(
20+
ReSMSValidationException.class, () -> SendSmsValidator.validatePhoneNumber(" "));
21+
assertEquals("Phone number cannot be empty", ex.getMessage());
22+
}
23+
24+
@Test
25+
void testValidatePhoneNumber_invalidFormat() {
26+
ReSMSValidationException ex =
27+
assertThrows(
28+
ReSMSValidationException.class, () -> SendSmsValidator.validatePhoneNumber("123abc"));
29+
assertEquals("Invalid phone number format", ex.getMessage());
30+
}
31+
32+
@Test
33+
void testValidateMessage_validMessage() {
34+
assertDoesNotThrow(() -> SendSmsValidator.validateMessage("Hello!"));
35+
}
36+
37+
@Test
38+
void testValidateMessage_empty() {
39+
ReSMSValidationException ex =
40+
assertThrows(ReSMSValidationException.class, () -> SendSmsValidator.validateMessage(" "));
41+
assertEquals("Message cannot be empty", ex.getMessage());
42+
}
43+
}

0 commit comments

Comments
 (0)