Skip to content

Commit 55fb3e5

Browse files
author
Joe Hansche
committed
Adding unit tests for sessionToken support
1 parent 3c2b395 commit 55fb3e5

File tree

1 file changed

+84
-15
lines changed

1 file changed

+84
-15
lines changed

ParseLiveQuery/src/test/java/com/parse/TestParseLiveQueryClient.java

Lines changed: 84 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,28 @@
77
import org.junit.Test;
88
import org.junit.runner.RunWith;
99
import org.mockito.ArgumentCaptor;
10+
import org.mockito.invocation.InvocationOnMock;
11+
import org.mockito.stubbing.Answer;
1012
import org.robolectric.RobolectricGradleTestRunner;
1113
import org.robolectric.annotation.Config;
1214

1315
import java.net.URI;
1416
import java.util.concurrent.Executor;
1517

18+
import bolts.Task;
19+
1620
import static junit.framework.Assert.assertEquals;
1721
import static junit.framework.Assert.assertTrue;
22+
import static org.mockito.AdditionalMatchers.and;
23+
import static org.mockito.AdditionalMatchers.not;
1824
import static org.mockito.Matchers.any;
25+
import static org.mockito.Matchers.anyBoolean;
26+
import static org.mockito.Matchers.contains;
1927
import static org.mockito.Matchers.eq;
2028
import static org.mockito.Mockito.mock;
2129
import static org.mockito.Mockito.times;
2230
import static org.mockito.Mockito.verify;
31+
import static org.mockito.Mockito.when;
2332

2433
@RunWith(RobolectricGradleTestRunner.class)
2534
@Config(constants = BuildConfig.class, sdk = 21)
@@ -28,10 +37,23 @@ public class TestParseLiveQueryClient {
2837
private WebSocketClient webSocketClient;
2938
private WebSocketClient.WebSocketClientCallback webSocketClientCallback;
3039
private ParseLiveQueryClient<ParseObject> parseLiveQueryClient;
40+
private ParseUser mockUser;
3141

3242
@Before
3343
public void setUp() throws Exception {
3444
ParsePlugins.initialize("1234", "1234");
45+
46+
// Register a mock currentUserController to make getCurrentUser work
47+
mockUser = mock(ParseUser.class);
48+
ParseCurrentUserController currentUserController = mock(ParseCurrentUserController.class);
49+
when(currentUserController.getAsync(anyBoolean())).thenAnswer(new Answer<Task<ParseUser>>() {
50+
@Override
51+
public Task<ParseUser> answer(InvocationOnMock invocation) throws Throwable {
52+
return Task.forResult(mockUser);
53+
}
54+
});
55+
ParseCorePlugins.getInstance().registerCurrentUserController(currentUserController);
56+
3557
parseLiveQueryClient = ParseLiveQueryClient.Factory.getClient(new URI(""), new WebSocketClientFactory() {
3658
@Override
3759
public WebSocketClient createInstance(WebSocketClient.WebSocketClientCallback webSocketClientCallback, URI hostUrl) {
@@ -67,12 +89,14 @@ public void testSubscribeWhenSubscribedToCallback() throws Exception {
6789
@Test
6890
public void testUnsubscribeWhenSubscribedToCallback() throws Exception {
6991
ParseQuery<ParseObject> parseQuery = new ParseQuery<>("test");
70-
SubscriptionHandling<ParseObject> subscriptionHandling = createSubscription(parseQuery, mock(SubscriptionHandling.HandleSubscribeCallback.class));
92+
SubscriptionHandling<ParseObject> subscriptionHandling = createSubscription(parseQuery,
93+
mock(SubscriptionHandling.HandleSubscribeCallback.class));
7194

7295
parseLiveQueryClient.unsubscribe(parseQuery);
7396
verify(webSocketClient, times(1)).send(any(String.class));
7497

75-
SubscriptionHandling.HandleUnsubscribeCallback<ParseObject> unsubscribeMockCallback = mock(SubscriptionHandling.HandleUnsubscribeCallback.class);
98+
SubscriptionHandling.HandleUnsubscribeCallback<ParseObject> unsubscribeMockCallback = mock(
99+
SubscriptionHandling.HandleUnsubscribeCallback.class);
76100
subscriptionHandling.handleUnsubscribe(unsubscribeMockCallback);
77101
webSocketClientCallback.onMessage(createUnsubscribedMessage(subscriptionHandling.getRequestId()).toString());
78102

@@ -82,7 +106,8 @@ public void testUnsubscribeWhenSubscribedToCallback() throws Exception {
82106
@Test
83107
public void testErrorWhenSubscribedToCallback() throws Exception {
84108
ParseQuery<ParseObject> parseQuery = new ParseQuery<>("test");
85-
SubscriptionHandling<ParseObject> subscriptionHandling = createSubscription(parseQuery, mock(SubscriptionHandling.HandleSubscribeCallback.class));
109+
SubscriptionHandling<ParseObject> subscriptionHandling = createSubscription(parseQuery,
110+
mock(SubscriptionHandling.HandleSubscribeCallback.class));
86111

87112
SubscriptionHandling.HandleErrorCallback<ParseObject> errorMockCallback = mock(SubscriptionHandling.HandleErrorCallback.class);
88113
subscriptionHandling.handleError(errorMockCallback);
@@ -103,7 +128,8 @@ public void testErrorWhenSubscribedToCallback() throws Exception {
103128
@Test
104129
public void testCreateEventWhenSubscribedToCallback() throws Exception {
105130
ParseQuery<ParseObject> parseQuery = new ParseQuery<>("test");
106-
SubscriptionHandling<ParseObject> subscriptionHandling = createSubscription(parseQuery, mock(SubscriptionHandling.HandleSubscribeCallback.class));
131+
SubscriptionHandling<ParseObject> subscriptionHandling = createSubscription(parseQuery,
132+
mock(SubscriptionHandling.HandleSubscribeCallback.class));
107133

108134
SubscriptionHandling.HandleEventCallback<ParseObject> eventMockCallback = mock(SubscriptionHandling.HandleEventCallback.class);
109135
subscriptionHandling.handleEvent(SubscriptionHandling.Event.CREATE, eventMockCallback);
@@ -119,7 +145,8 @@ public void testCreateEventWhenSubscribedToCallback() throws Exception {
119145
@Test
120146
public void testEnterEventWhenSubscribedToCallback() throws Exception {
121147
ParseQuery<ParseObject> parseQuery = new ParseQuery<>("test");
122-
SubscriptionHandling<ParseObject> subscriptionHandling = createSubscription(parseQuery, mock(SubscriptionHandling.HandleSubscribeCallback.class));
148+
SubscriptionHandling<ParseObject> subscriptionHandling = createSubscription(parseQuery,
149+
mock(SubscriptionHandling.HandleSubscribeCallback.class));
123150

124151
SubscriptionHandling.HandleEventCallback<ParseObject> eventMockCallback = mock(SubscriptionHandling.HandleEventCallback.class);
125152
subscriptionHandling.handleEvent(SubscriptionHandling.Event.ENTER, eventMockCallback);
@@ -135,7 +162,8 @@ public void testEnterEventWhenSubscribedToCallback() throws Exception {
135162
@Test
136163
public void testUpdateEventWhenSubscribedToCallback() throws Exception {
137164
ParseQuery<ParseObject> parseQuery = new ParseQuery<>("test");
138-
SubscriptionHandling<ParseObject> subscriptionHandling = createSubscription(parseQuery, mock(SubscriptionHandling.HandleSubscribeCallback.class));
165+
SubscriptionHandling<ParseObject> subscriptionHandling = createSubscription(parseQuery,
166+
mock(SubscriptionHandling.HandleSubscribeCallback.class));
139167

140168
SubscriptionHandling.HandleEventCallback<ParseObject> eventMockCallback = mock(SubscriptionHandling.HandleEventCallback.class);
141169
subscriptionHandling.handleEvent(SubscriptionHandling.Event.UPDATE, eventMockCallback);
@@ -151,7 +179,8 @@ public void testUpdateEventWhenSubscribedToCallback() throws Exception {
151179
@Test
152180
public void testLeaveEventWhenSubscribedToCallback() throws Exception {
153181
ParseQuery<ParseObject> parseQuery = new ParseQuery<>("test");
154-
SubscriptionHandling<ParseObject> subscriptionHandling = createSubscription(parseQuery, mock(SubscriptionHandling.HandleSubscribeCallback.class));
182+
SubscriptionHandling<ParseObject> subscriptionHandling = createSubscription(parseQuery,
183+
mock(SubscriptionHandling.HandleSubscribeCallback.class));
155184

156185
SubscriptionHandling.HandleEventCallback<ParseObject> eventMockCallback = mock(SubscriptionHandling.HandleEventCallback.class);
157186
subscriptionHandling.handleEvent(SubscriptionHandling.Event.LEAVE, eventMockCallback);
@@ -164,11 +193,11 @@ public void testLeaveEventWhenSubscribedToCallback() throws Exception {
164193
validateSameObject(eventMockCallback, parseQuery, parseObject);
165194
}
166195

167-
168196
@Test
169197
public void testDeleteEventWhenSubscribedToCallback() throws Exception {
170198
ParseQuery<ParseObject> parseQuery = new ParseQuery<>("test");
171-
SubscriptionHandling<ParseObject> subscriptionHandling = createSubscription(parseQuery, mock(SubscriptionHandling.HandleSubscribeCallback.class));
199+
SubscriptionHandling<ParseObject> subscriptionHandling = createSubscription(parseQuery,
200+
mock(SubscriptionHandling.HandleSubscribeCallback.class));
172201

173202
SubscriptionHandling.HandleEventCallback<ParseObject> eventMockCallback = mock(SubscriptionHandling.HandleEventCallback.class);
174203
subscriptionHandling.handleEvent(SubscriptionHandling.Event.DELETE, eventMockCallback);
@@ -184,7 +213,8 @@ public void testDeleteEventWhenSubscribedToCallback() throws Exception {
184213
@Test
185214
public void testCreateEventWhenSubscribedToAnyCallback() throws Exception {
186215
ParseQuery<ParseObject> parseQuery = new ParseQuery<>("test");
187-
SubscriptionHandling<ParseObject> subscriptionHandling = createSubscription(parseQuery, mock(SubscriptionHandling.HandleSubscribeCallback.class));
216+
SubscriptionHandling<ParseObject> subscriptionHandling = createSubscription(parseQuery,
217+
mock(SubscriptionHandling.HandleSubscribeCallback.class));
188218

189219
SubscriptionHandling.HandleEventsCallback<ParseObject> eventsMockCallback = mock(SubscriptionHandling.HandleEventsCallback.class);
190220
subscriptionHandling.handleEvents(eventsMockCallback);
@@ -205,12 +235,14 @@ public void testCreateEventWhenSubscribedToAnyCallback() throws Exception {
205235
@Test
206236
public void testSubscriptionStoppedAfterUnsubscribe() throws Exception {
207237
ParseQuery<ParseObject> parseQuery = new ParseQuery<>("test");
208-
SubscriptionHandling<ParseObject> subscriptionHandling = createSubscription(parseQuery, mock(SubscriptionHandling.HandleSubscribeCallback.class));
238+
SubscriptionHandling<ParseObject> subscriptionHandling = createSubscription(parseQuery,
239+
mock(SubscriptionHandling.HandleSubscribeCallback.class));
209240

210241
SubscriptionHandling.HandleEventCallback<ParseObject> eventMockCallback = mock(SubscriptionHandling.HandleEventCallback.class);
211242
subscriptionHandling.handleEvent(SubscriptionHandling.Event.CREATE, eventMockCallback);
212243

213-
SubscriptionHandling.HandleUnsubscribeCallback<ParseObject> unsubscribeMockCallback = mock(SubscriptionHandling.HandleUnsubscribeCallback.class);
244+
SubscriptionHandling.HandleUnsubscribeCallback<ParseObject> unsubscribeMockCallback = mock(
245+
SubscriptionHandling.HandleUnsubscribeCallback.class);
214246
subscriptionHandling.handleUnsubscribe(unsubscribeMockCallback);
215247

216248
parseLiveQueryClient.unsubscribe(parseQuery);
@@ -239,14 +271,52 @@ public void testSubscriptionReplayedAfterReconnect() throws Exception {
239271
verify(webSocketClient, times(2)).send(any(String.class));
240272
}
241273

274+
@Test
275+
public void testSessionTokenSentOnConnect() {
276+
when(mockUser.getSessionToken()).thenReturn("the token");
277+
parseLiveQueryClient.reconnect();
278+
webSocketClientCallback.onOpen();
279+
verify(webSocketClient, times(1)).send(contains("\"sessionToken\":\"the token\""));
280+
}
242281

243-
private SubscriptionHandling<ParseObject> createSubscription(ParseQuery<ParseObject> parseQuery, SubscriptionHandling.HandleSubscribeCallback<ParseObject> subscribeMockCallback) throws Exception {
282+
@Test
283+
public void testEmptySessionTokenOnConnect() {
284+
parseLiveQueryClient.reconnect();
285+
webSocketClientCallback.onOpen();
286+
verify(webSocketClient, times(1)).send(not(contains("\"sessionToken\":")));
287+
}
288+
289+
@Test
290+
public void testSessionTokenSentOnSubscribe() {
291+
when(mockUser.getSessionToken()).thenReturn("the token");
292+
when(webSocketClient.getState()).thenReturn(WebSocketClient.State.CONNECTED);
293+
parseLiveQueryClient.subscribe(ParseQuery.getQuery("Test"));
294+
verify(webSocketClient, times(1)).send(and(
295+
contains("\"op\":\"subscribe\""),
296+
contains("\"sessionToken\":\"the token\"")));
297+
}
298+
299+
@Test
300+
public void testEmptySessionTokenOnSubscribe() {
301+
when(mockUser.getSessionToken()).thenReturn("the token");
302+
when(webSocketClient.getState()).thenReturn(WebSocketClient.State.CONNECTED);
303+
parseLiveQueryClient.subscribe(ParseQuery.getQuery("Test"));
304+
verify(webSocketClient, times(1)).send(contains("\"op\":\"connect\""));
305+
verify(webSocketClient, times(1)).send(and(
306+
contains("\"op\":\"subscribe\""),
307+
contains("\"sessionToken\":\"the token\"")));
308+
}
309+
310+
private SubscriptionHandling<ParseObject> createSubscription(ParseQuery<ParseObject> parseQuery,
311+
SubscriptionHandling.HandleSubscribeCallback<ParseObject> subscribeMockCallback) throws Exception {
244312
SubscriptionHandling<ParseObject> subscriptionHandling = parseLiveQueryClient.subscribe(parseQuery).handleSubscribe(subscribeMockCallback);
245313
webSocketClientCallback.onMessage(createSubscribedMessage(subscriptionHandling.getRequestId()).toString());
246314
return subscriptionHandling;
247315
}
248316

249-
private void validateSameObject(SubscriptionHandling.HandleEventCallback<ParseObject> eventMockCallback, ParseQuery<ParseObject> parseQuery, ParseObject originalParseObject) {
317+
private void validateSameObject(SubscriptionHandling.HandleEventCallback<ParseObject> eventMockCallback,
318+
ParseQuery<ParseObject> parseQuery,
319+
ParseObject originalParseObject) {
250320
ArgumentCaptor<ParseObject> objectCaptor = ArgumentCaptor.forClass(ParseObject.class);
251321
verify(eventMockCallback, times(1)).onEvent(eq(parseQuery), objectCaptor.capture());
252322

@@ -335,5 +405,4 @@ private static JSONObject createObjectDeleteMessage(int requestId, ParseObject p
335405
jsonObject.put("object", PointerEncoder.get().encodeRelatedObject(parseObject));
336406
return jsonObject;
337407
}
338-
339408
}

0 commit comments

Comments
 (0)