Skip to content

Commit 2e7b920

Browse files
authored
Merge pull request #80 from Bandwidth/DX-2891
DX-2891 Add MFA API Integration Tests
2 parents 8ab8f82 + 4105a11 commit 2e7b920

File tree

2 files changed

+217
-63
lines changed

2 files changed

+217
-63
lines changed

src/test/java/org/openapitools/client/api/MessagesApiTest.java

Lines changed: 66 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
*
88
*/
99

10-
1110
package org.openapitools.client.api;
1211

1312
import org.openapitools.client.ApiException;
@@ -27,8 +26,6 @@
2726

2827
import java.net.URI;
2928

30-
import javax.security.auth.AuthPermission;
31-
3229
import static org.hamcrest.MatcherAssert.assertThat;
3330
import static org.hamcrest.CoreMatchers.instanceOf;
3431
import static org.hamcrest.Matchers.greaterThan;
@@ -38,8 +35,6 @@
3835

3936
import static org.openapitools.client.utils.TestingEnvironmentVariables.*;
4037

41-
42-
4338
/**
4439
* API tests for MessagesApi
4540
*/
@@ -48,7 +43,7 @@ public class MessagesApiTest {
4843
ApiClient defaultClient = Configuration.getDefaultApiClient();
4944
HttpBasicAuth Basic = (HttpBasicAuth) defaultClient.getAuthentication("Basic");
5045
private final MessagesApi api = new MessagesApi(defaultClient);
51-
;
46+
5247
// Setting up variables
5348
String accountId = BW_ACCOUNT_ID;
5449
String messageId = null;
@@ -69,67 +64,73 @@ public class MessagesApiTest {
6964

7065
public MessageRequest messageRequest = new MessageRequest();
7166

72-
73-
7467
/**
7568
* List Messages
7669
*
7770
* Returns a list of messages based on query parameters.
7871
*
7972
* @throws ApiException if the Api call fails
8073
*/
81-
74+
8275
@Test
8376
public void listMessagesTest() throws ApiException {
8477

85-
Basic.setUsername(BW_USERNAME);
86-
Basic.setPassword(BW_PASSWORD);
87-
MessagesList response = api.listMessages(accountId, messageId, sourceTn, destinationTn, messageStatus, messageDirection, carrierName, messageType, errorCode, fromDateTime, toDateTime, sort, pageToken, limit);
88-
89-
assertThat(response, instanceOf(MessagesList.class));
90-
assertThat(response.getTotalCount(), greaterThan(0));
91-
assertThat(response.getMessages().get(0), instanceOf(ListMessageItem.class));
92-
assertThat(response.getMessages().get(0).getAccountId(), is(System.getenv("BW_ACCOUNT_ID")));
93-
assertThat(response.getMessages().get(0).getDestinationTn(), matchesRegex("^\\+[1-9]\\d{1,14}$"));
94-
assertThat(response.getMessages().get(0).getMessageDirection(), instanceOf(ListMessageDirectionEnum.class));
95-
assertThat(response.getMessages().get(0).getMessageId(), matchesRegex("^.+$"));
96-
assertThat(response.getMessages().get(0).getMessageStatus(), instanceOf(MessageStatusEnum.class));
97-
assertThat(response.getMessages().get(0).getMessageType(), instanceOf(MessageTypeEnum.class));
98-
assertThat(response.getMessages().get(0).getSegmentCount(), greaterThan(0));
78+
Basic.setUsername(BW_USERNAME);
79+
Basic.setPassword(BW_PASSWORD);
80+
MessagesList response = api.listMessages(accountId, messageId, sourceTn, destinationTn, messageStatus,
81+
messageDirection, carrierName, messageType, errorCode, fromDateTime, toDateTime, sort, pageToken,
82+
limit);
83+
84+
assertThat(response, instanceOf(MessagesList.class));
85+
assertThat(response.getTotalCount(), greaterThan(0));
86+
87+
ListMessageItem message = response.getMessages().get(0);
88+
assertThat(message, instanceOf(ListMessageItem.class));
89+
assertThat(message.getAccountId(), is(System.getenv("BW_ACCOUNT_ID")));
90+
assertThat(message.getDestinationTn(), matchesRegex("^\\+[1-9]\\d{1,14}$"));
91+
assertThat(message.getMessageDirection(), instanceOf(ListMessageDirectionEnum.class));
92+
assertThat(message.getMessageId(), matchesRegex("^.+$"));
93+
assertThat(message.getMessageStatus(), instanceOf(MessageStatusEnum.class));
94+
assertThat(message.getMessageType(), instanceOf(MessageTypeEnum.class));
95+
assertThat(message.getSegmentCount(), greaterThan(0));
9996
}
10097

101-
10298
@Test
10399
public void listMessageBadRequestTest() {
104100

105-
Basic.setUsername(BW_USERNAME);
106-
Basic.setPassword(BW_PASSWORD);
107-
String pageToken = "gdEewhcJLQRB5"; // Bad Token
101+
Basic.setUsername(BW_USERNAME);
102+
Basic.setPassword(BW_PASSWORD);
103+
String pageToken = "gdEewhcJLQRB5"; // Bad Token
108104

109-
ApiException exception = Assertions.assertThrows(ApiException.class, () -> api.listMessages(accountId, messageId, sourceTn, destinationTn, messageStatus, messageDirection, carrierName, messageType, errorCode, fromDateTime, toDateTime, sort, pageToken, limit));
110-
assertThat(exception.getCode(), is(400));
105+
ApiException exception = Assertions.assertThrows(ApiException.class,
106+
() -> api.listMessages(accountId, messageId, sourceTn, destinationTn, messageStatus, messageDirection,
107+
carrierName, messageType, errorCode, fromDateTime, toDateTime, sort, pageToken, limit));
108+
assertThat(exception.getCode(), is(400));
111109

112110
}
113-
111+
114112
@Test
115113
public void listMessageUnauthorizedTest() {
116114

117-
Basic.setUsername("user");
118-
Basic.setPassword("pass");
119-
120-
ApiException exception = Assertions.assertThrows(ApiException.class, () -> api.listMessages(accountId, messageId, sourceTn, destinationTn, messageStatus, messageDirection, carrierName, messageType, errorCode, fromDateTime, toDateTime, sort, pageToken, limit));
121-
assertThat(exception.getCode(), is(401));
122-
}
123-
/**
124-
* Create Message
125-
*
126-
* Endpoint for sending text messages and picture messages using V2 messaging.
127-
*
128-
* @throws ApiException if the Api call fails
129-
*/
130-
131-
@Test
132-
public void createMessageTest() throws ApiException {
115+
Basic.setUsername("bad_username");
116+
Basic.setPassword("bad_password");
117+
118+
ApiException exception = Assertions.assertThrows(ApiException.class,
119+
() -> api.listMessages(accountId, messageId, sourceTn, destinationTn, messageStatus, messageDirection,
120+
carrierName, messageType, errorCode, fromDateTime, toDateTime, sort, pageToken, limit));
121+
assertThat(exception.getCode(), is(401));
122+
}
123+
124+
/**
125+
* Create Message
126+
*
127+
* Endpoint for sending text messages and picture messages using V2 messaging.
128+
*
129+
* @throws ApiException if the Api call fails
130+
*/
131+
132+
@Test
133+
public void createMessageTest() throws ApiException {
133134
Basic.setUsername(BW_USERNAME);
134135
Basic.setPassword(BW_PASSWORD);
135136
messageRequest.applicationId(applicationId);
@@ -150,33 +151,35 @@ public void createMessageTest() throws ApiException {
150151
assertThat(response.getMedia(), contains("https://cdn2.thecatapi.com/images/MTY3ODIyMQ.jpg"));
151152
assertThat(response.getPriority(), instanceOf(PriorityEnum.class));
152153
assertThat(response.getSegmentCount(), greaterThan(0));
153-
}
154+
}
155+
156+
@Test
157+
public void createMessageBadRequestTest() {
154158

155-
@Test
156-
public void createMessageBadRequestTest() {
157-
158159
Basic.setUsername(BW_USERNAME);
159160
Basic.setPassword(BW_PASSWORD);
160161
messageRequest.applicationId(null);
161162
messageRequest.addToItem(USER_NUMBER);
162163
messageRequest.from(BW_NUMBER);
163164
messageRequest.text("Sample Text");
164-
165-
ApiException exception = Assertions.assertThrows(ApiException.class, () -> api.createMessage(accountId, messageRequest));
165+
166+
ApiException exception = Assertions.assertThrows(ApiException.class,
167+
() -> api.createMessage(accountId, messageRequest));
166168
assertThat(exception.getCode(), is(400));
167-
}
168-
169-
@Test
170-
public void createMessageUnauthorizedTest() {
171-
172-
Basic.setUsername("user");
173-
Basic.setPassword("pass");
169+
}
170+
171+
@Test
172+
public void createMessageUnauthorizedTest() {
173+
Basic.setUsername("bad_username");
174+
Basic.setPassword("bad_password");
175+
174176
messageRequest.applicationId(BW_MESSAGING_APPLICATION_ID);
175177
messageRequest.addToItem(USER_NUMBER);
176178
messageRequest.from(BW_NUMBER);
177179
messageRequest.text("Sample Text");
178-
179-
ApiException exception = Assertions.assertThrows(ApiException.class, () -> api.createMessage(accountId, messageRequest));
180+
181+
ApiException exception = Assertions.assertThrows(ApiException.class,
182+
() -> api.createMessage(accountId, messageRequest));
180183
assertThat(exception.getCode(), is(401));
181-
}
182-
}
184+
}
185+
}
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
package org.openapitools.client.api;
2+
3+
import org.openapitools.client.ApiResponse;
4+
import org.openapitools.client.ApiException;
5+
import org.openapitools.client.ApiClient;
6+
import org.openapitools.client.auth.HttpBasicAuth;
7+
import org.openapitools.client.model.CodeRequest;
8+
import org.openapitools.client.model.MessagingCodeResponse;
9+
import org.openapitools.client.model.VerifyCodeRequest;
10+
import org.openapitools.client.model.VerifyCodeResponse;
11+
import org.openapitools.client.model.VoiceCodeResponse;
12+
import org.openapitools.client.Configuration;
13+
import org.junit.jupiter.api.Assertions;
14+
import org.junit.jupiter.api.Test;
15+
16+
import java.math.BigDecimal;
17+
import java.util.concurrent.ThreadLocalRandom;
18+
19+
import static org.hamcrest.MatcherAssert.assertThat;
20+
import static org.hamcrest.CoreMatchers.instanceOf;
21+
import static org.hamcrest.Matchers.is;
22+
23+
import static org.openapitools.client.utils.TestingEnvironmentVariables.*;
24+
25+
public class MfaApiTest {
26+
ApiClient defaultClient = Configuration.getDefaultApiClient();
27+
HttpBasicAuth Basic = (HttpBasicAuth) defaultClient.getAuthentication("Basic");
28+
private final MfaApi api = new MfaApi(defaultClient);
29+
30+
@Test
31+
public void successfulMfaGenerateMessagingCodeRequest() throws ApiException {
32+
Basic.setUsername(BW_USERNAME);
33+
Basic.setPassword(BW_PASSWORD);
34+
35+
CodeRequest request = new CodeRequest();
36+
request.setTo(USER_NUMBER);
37+
request.setFrom(BW_NUMBER);
38+
request.setApplicationId(BW_MESSAGING_APPLICATION_ID);
39+
request.setScope("scope");
40+
request.setMessage("Your temporary {NAME} {SCOPE} code is {CODE}");
41+
request.setDigits(6);
42+
ApiResponse<MessagingCodeResponse> response = api.generateMessagingCodeWithHttpInfo(BW_ACCOUNT_ID, request);
43+
assertThat(response.getStatusCode(), is(200));
44+
45+
assertThat(response.getData(), instanceOf(MessagingCodeResponse.class));
46+
}
47+
48+
@Test
49+
public void successfulMfaGenerateVoiceCodeRequest() throws ApiException {
50+
Basic.setUsername(BW_USERNAME);
51+
Basic.setPassword(BW_PASSWORD);
52+
53+
CodeRequest request = new CodeRequest();
54+
request.setTo(USER_NUMBER);
55+
request.setFrom(BW_NUMBER);
56+
request.setApplicationId(BW_VOICE_APPLICATION_ID);
57+
request.setScope("scope");
58+
request.setMessage("Your temporary {NAME} {SCOPE} code is {CODE}");
59+
request.setDigits(6);
60+
ApiResponse<VoiceCodeResponse> response = api.generateVoiceCodeWithHttpInfo(BW_ACCOUNT_ID, request);
61+
assertThat(response.getStatusCode(), is(200));
62+
63+
assertThat(response.getData(), instanceOf(VoiceCodeResponse.class));
64+
}
65+
66+
@Test
67+
public void successfulMfaVerifyCodeRequest() throws ApiException {
68+
Basic.setUsername(BW_USERNAME);
69+
Basic.setPassword(BW_PASSWORD);
70+
BigDecimal expirationTime = new BigDecimal(3);
71+
72+
// Generate a random TN for the setTo - otherwise we get heavily rate limited
73+
Long minTn = 1111111111L;
74+
Long maxTn = 9999999999L;
75+
Long randomInt = ThreadLocalRandom.current().nextLong(maxTn - minTn) + minTn;
76+
77+
VerifyCodeRequest request = new VerifyCodeRequest();
78+
request.setTo("+1" + randomInt.toString());
79+
request.setScope("2FA");
80+
request.setExpirationTimeInMinutes(expirationTime);
81+
request.setCode("123456");
82+
83+
ApiResponse<VerifyCodeResponse> response = api.verifyCodeWithHttpInfo(BW_ACCOUNT_ID, request);
84+
85+
assertThat(response.getStatusCode(), is(200));
86+
assertThat(response.getData().getValid(), is(false));
87+
}
88+
89+
@Test
90+
public void badRequest() throws ApiException {
91+
Basic.setUsername(BW_USERNAME);
92+
Basic.setPassword(BW_PASSWORD);
93+
94+
CodeRequest badRequest = new CodeRequest();
95+
badRequest.setTo(USER_NUMBER);
96+
badRequest.setFrom(BW_NUMBER);
97+
badRequest.setApplicationId("not_an_application_id");
98+
badRequest.setScope("scope");
99+
badRequest.setMessage("Your temporary {NAME} {SCOPE} code is {CODE}");
100+
badRequest.setDigits(6);
101+
102+
ApiException messagingException = Assertions.assertThrows(ApiException.class,
103+
() -> api.generateMessagingCodeWithHttpInfo(BW_ACCOUNT_ID,
104+
badRequest));
105+
assertThat(messagingException.getCode(), is(400));
106+
107+
ApiException voiceException = Assertions.assertThrows(ApiException.class,
108+
() -> api.generateVoiceCodeWithHttpInfo(BW_ACCOUNT_ID,
109+
badRequest));
110+
assertThat(voiceException.getCode(), is(400));
111+
}
112+
113+
@Test
114+
public void unauthorizedRequest() throws ApiException {
115+
Basic.setUsername(null);
116+
Basic.setPassword(null);
117+
118+
CodeRequest request = new CodeRequest();
119+
request.setTo(USER_NUMBER);
120+
request.setFrom(BW_NUMBER);
121+
request.setApplicationId(BW_VOICE_APPLICATION_ID);
122+
request.setScope("scope");
123+
request.setMessage("Your temporary {NAME} {SCOPE} code is {CODE}");
124+
request.setDigits(6);
125+
126+
ApiException exception = Assertions.assertThrows(ApiException.class,
127+
() -> api.generateMessagingCodeWithHttpInfo(BW_ACCOUNT_ID,
128+
request));
129+
assertThat(exception.getCode(), is(401));
130+
}
131+
132+
@Test
133+
public void forbiddenRequest() {
134+
Basic.setUsername(FORBIDDEN_USERNAME);
135+
Basic.setPassword("bad_password");
136+
137+
CodeRequest request = new CodeRequest();
138+
request.setTo(USER_NUMBER);
139+
request.setFrom(BW_NUMBER);
140+
request.setApplicationId(BW_MESSAGING_APPLICATION_ID);
141+
request.setScope("scope");
142+
request.setMessage("Your temporary {NAME} {SCOPE} code is {CODE}");
143+
request.setDigits(6);
144+
145+
ApiException exception = Assertions.assertThrows(ApiException.class,
146+
() -> api.generateMessagingCodeWithHttpInfo(BW_ACCOUNT_ID,
147+
request));
148+
assertThat(exception.getCode(), is(403));
149+
}
150+
151+
}

0 commit comments

Comments
 (0)