|
33 | 33 | import com.vonage.client.messages.whatsapp.*; |
34 | 34 | import static org.junit.jupiter.api.Assertions.*; |
35 | 35 | import org.junit.jupiter.api.*; |
| 36 | +import java.io.IOException; |
| 37 | +import java.io.InputStream; |
| 38 | +import java.nio.charset.StandardCharsets; |
36 | 39 | import java.util.*; |
37 | 40 |
|
38 | 41 | public class MessagesClientTest extends AbstractClientTest<MessagesClient> { |
@@ -135,6 +138,53 @@ public void testSendMessage401Response() throws Exception { |
135 | 138 | ); |
136 | 139 | } |
137 | 140 |
|
| 141 | + private String loadJsonResource(String filename) throws IOException { |
| 142 | + try (InputStream is = getClass().getResourceAsStream(filename)) { |
| 143 | + if (is == null) { |
| 144 | + throw new IOException("Could not find resource: " + filename); |
| 145 | + } |
| 146 | + byte[] buffer = new byte[1024]; |
| 147 | + StringBuilder sb = new StringBuilder(); |
| 148 | + int bytesRead; |
| 149 | + while ((bytesRead = is.read(buffer)) != -1) { |
| 150 | + sb.append(new String(buffer, 0, bytesRead, StandardCharsets.UTF_8)); |
| 151 | + } |
| 152 | + return sb.toString().trim(); |
| 153 | + } |
| 154 | + } |
| 155 | + |
| 156 | + @Test |
| 157 | + public void testSendMessageExceptionContainsRawRequestAndResponse() throws Exception { |
| 158 | + String responseJson = loadJsonResource("error-422-invalid-channel.json"); |
| 159 | + stubResponse(422, responseJson); |
| 160 | + |
| 161 | + MessageRequest request = SmsTextRequest.builder() |
| 162 | + .from("447700900001") |
| 163 | + .to("447700900000") |
| 164 | + .text("Hello").build(); |
| 165 | + |
| 166 | + try { |
| 167 | + client.useRegularEndpoint().sendMessage(request); |
| 168 | + fail("Expected MessageResponseException to be thrown"); |
| 169 | + } |
| 170 | + catch (MessageResponseException ex) { |
| 171 | + // Verify the structured fields are set |
| 172 | + assertEquals(422, ex.getStatusCode()); |
| 173 | + assertEquals("Invalid channel parameters", ex.getTitle()); |
| 174 | + |
| 175 | + // Verify the raw response is captured |
| 176 | + assertNotNull(ex.getRawResponse()); |
| 177 | + assertTrue(ex.getRawResponse().contains("Invalid channel parameters")); |
| 178 | + assertTrue(ex.getRawResponse().contains("1110")); |
| 179 | + |
| 180 | + // Verify the raw request is captured |
| 181 | + assertNotNull(ex.getRawRequest()); |
| 182 | + assertTrue(ex.getRawRequest().contains("447700900000")); |
| 183 | + assertTrue(ex.getRawRequest().contains("447700900001")); |
| 184 | + assertTrue(ex.getRawRequest().contains("Hello")); |
| 185 | + } |
| 186 | + } |
| 187 | + |
138 | 188 | @Test |
139 | 189 | public void testSensSmsSandboxFailure() { |
140 | 190 | assertThrows(MessageResponseException.class, () -> client.useSandboxEndpoint() |
|
0 commit comments