/*
* Copyright (c) 2015-present, Parse, LLC.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
package com.parse;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import java.util.List;
import bolts.Task;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertThat;
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk = TestHelper.ROBOLECTRIC_SDK_VERSION)
public class ParseCorePluginsTest extends ResetPluginsParseTest {
@Before
public void setUp() throws Exception {
super.setUp();
Parse.Configuration configuration = new Parse.Configuration.Builder(null)
.applicationId("1234")
.build();
ParsePlugins.initialize(configuration);
}
@Test
public void testQueryControllerDefaultImpl() {
ParseQueryController controller = ParseCorePlugins.getInstance().getQueryController();
assertThat(controller, instanceOf(CacheQueryController.class));
}
@Test
public void testRegisterQueryController() {
ParseQueryController controller = new TestQueryController();
ParseCorePlugins.getInstance().registerQueryController(controller);
assertSame(controller, ParseCorePlugins.getInstance().getQueryController());
}
@Test(expected = IllegalStateException.class)
public void testRegisterQueryControllerWhenAlreadySet() {
ParseCorePlugins.getInstance().getQueryController(); // sets to default
ParseQueryController controller = new TestQueryController();
ParseCorePlugins.getInstance().registerQueryController(controller);
}
//TODO(grantland): testFileControllerDefaultImpl with ParseFileController interface
@Test
public void testRegisterFileController() {
ParseFileController controller = new TestFileController();
ParseCorePlugins.getInstance().registerFileController(controller);
assertSame(controller, ParseCorePlugins.getInstance().getFileController());
}
//TODO(grantland): testRegisterFileControllerWhenAlreadySet when getCacheDir is no longer global
//TODO(mengyan): testAnalyticsControllerDefaultImpl when getEventuallyQueue is no longer global
@Test
public void testRegisterAnalyticsController() {
ParseAnalyticsController controller = new TestAnalyticsController();
ParseCorePlugins.getInstance().registerAnalyticsController(controller);
assertSame(controller, ParseCorePlugins.getInstance().getAnalyticsController());
}
//TODO(mengyan): testRegisterAnalyticsControllerWhenAlreadySet when getEventuallyQueue is no longer global
@Test
public void testCloudCodeControllerDefaultImpl() {
ParseCloudCodeController controller = ParseCorePlugins.getInstance().getCloudCodeController();
assertThat(controller, instanceOf(ParseCloudCodeController.class));
}
@Test
public void testRegisterCloudCodeController() {
ParseCloudCodeController controller = new TestCloudCodeController();
ParseCorePlugins.getInstance().registerCloudCodeController(controller);
assertSame(controller, ParseCorePlugins.getInstance().getCloudCodeController());
}
@Test(expected = IllegalStateException.class)
public void testRegisterCloudCodeControllerWhenAlreadySet() {
ParseCorePlugins.getInstance().getCloudCodeController(); // sets to default
ParseCloudCodeController controller = new TestCloudCodeController();
ParseCorePlugins.getInstance().registerCloudCodeController(controller);
}
// TODO(mengyan): testConfigControllerDefaultImpl when getCacheDir is no longer global
@Test
public void testRegisterConfigController() {
ParseConfigController controller = new TestConfigController();
ParseCorePlugins.getInstance().registerConfigController(controller);
assertSame(controller, ParseCorePlugins.getInstance().getConfigController());
}
// TODO(mengyan): testRegisterConfigControllerWhenAlreadySet when getCacheDir is no longer global
@Test
public void testPushControllerDefaultImpl() {
ParsePushController controller = ParseCorePlugins.getInstance().getPushController();
assertThat(controller, instanceOf(ParsePushController.class));
}
@Test
public void testRegisterPushController() {
ParsePushController controller = new TestPushController();
ParseCorePlugins.getInstance().registerPushController(controller);
assertSame(controller, ParseCorePlugins.getInstance().getPushController());
}
@Test(expected = IllegalStateException.class)
public void testRegisterPushControllerWhenAlreadySet() {
ParseCorePlugins.getInstance().getPushController(); // sets to default
ParsePushController controller = new TestPushController();
ParseCorePlugins.getInstance().registerPushController(controller);
}
public void testPushChannelsControllerDefaultImpl() {
ParsePushChannelsController controller =
ParseCorePlugins.getInstance().getPushChannelsController();
assertThat(controller, instanceOf(ParsePushChannelsController.class));
}
@Test
public void testRegisterPushChannelsController() {
ParsePushChannelsController controller = new ParsePushChannelsController();
ParseCorePlugins.getInstance().registerPushChannelsController(controller);
assertSame(controller, ParseCorePlugins.getInstance().getPushChannelsController());
}
@Test(expected = IllegalStateException.class)
public void testRegisterPushChannelsControllerWhenAlreadySet() {
ParseCorePlugins.getInstance().getPushChannelsController(); // sets to default
ParsePushChannelsController controller = new ParsePushChannelsController();
ParseCorePlugins.getInstance().registerPushChannelsController(controller);
}
private static class TestQueryController implements ParseQueryController {
@Override
public <T extends ParseObject> Task<List<T>> findAsync(
ParseQuery.State<T> state, ParseUser user, Task<Void> cancellationToken) {
return null;
}
@Override
public <T extends ParseObject> Task<Integer> countAsync(
ParseQuery.State<T> state, ParseUser user, Task<Void> cancellationToken) {
return null;
}
@Override
public <T extends ParseObject> Task<T> getFirstAsync(
ParseQuery.State<T> state, ParseUser user, Task<Void> cancellationToken) {
return null;
}
}
private static class TestFileController extends ParseFileController {
public TestFileController() {
super(null, null);
}
}
private static class TestAnalyticsController extends ParseAnalyticsController {
public TestAnalyticsController() {
super(null);
}
}
private static class TestCloudCodeController extends ParseCloudCodeController {
public TestCloudCodeController() {
super(null);
}
}
private static class TestConfigController extends ParseConfigController {
public TestConfigController() {
super(null, null);
}
}
private static class TestPushController extends ParsePushController {
public TestPushController() {
super(null);
}
}
}