diff --git a/declex-test/app/build.gradle b/declex-test/app/build.gradle index 2f16ee45..e8161091 100644 --- a/declex-test/app/build.gradle +++ b/declex-test/app/build.gradle @@ -5,7 +5,7 @@ android { buildToolsVersion "25.0.2" defaultConfig { applicationId "com.dspot.declex.test" - minSdkVersion 9 + minSdkVersion 14 targetSdkVersion 25 versionCode 1 versionName "1.0" @@ -19,13 +19,15 @@ android { } dependencies { - annotationProcessor 'com.dspot:declex:2.0.a.4' - compile 'com.dspot:declex-api:2.0.a.4' + annotationProcessor 'com.dspot:declex:2.0.a.16' + compile 'com.dspot:declex-api:2.0.a.16' + compile 'com.dspot:declex-actions:2.0.a.8' } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) + compile 'com.jayway.awaitility:awaitility:1.4.0' compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.android.support:support-v4:25.+' @@ -36,6 +38,7 @@ dependencies { testCompile 'org.powermock:powermock-api-mockito2:1.7.0RC4' testCompile "org.powermock:powermock-classloading-xstream:1.7.0RC4" - testCompile 'junit:junit:4.12' -} + configurations.all { resolutionStrategy { force 'org.objenesis:objenesis:2.1' } } + testCompile 'junit:junit:4.12' +} \ No newline at end of file diff --git a/declex-test/app/src/main/AndroidManifest.xml b/declex-test/app/src/main/AndroidManifest.xml index c5e4ae4b..5acab12d 100644 --- a/declex-test/app/src/main/AndroidManifest.xml +++ b/declex-test/app/src/main/AndroidManifest.xml @@ -2,12 +2,14 @@ + + - + diff --git a/declex-test/app/src/main/java/com/dspot/declex/test/model/putmodel/ModelBean.java b/declex-test/app/src/main/java/com/dspot/declex/test/model/putmodel/ModelBean.java new file mode 100644 index 00000000..9f439b78 --- /dev/null +++ b/declex-test/app/src/main/java/com/dspot/declex/test/model/putmodel/ModelBean.java @@ -0,0 +1,48 @@ +package com.dspot.declex.test.model.putmodel; + +import com.dspot.declex.annotation.Model; +import com.dspot.declex.annotation.ServerModel; +import com.dspot.declex.test.model.putmodel.model.ServerModelEntity_; + +import org.androidannotations.annotations.EBean; + +import static com.dspot.declex.actions.Action.$PutModel; + +@EBean +public class ModelBean { + + @Model(lazy = true, asyncPut = false, orderBy = "create") + ServerModelEntity_ createModelEntity; + + @Model(lazy = true, asyncPut = false, orderBy = "update") + ServerModelEntity_ updateModelEntity; + + // Query + public void createModelQuery(Runnable Done, Runnable Failed) { + createModelEntity = new ServerModelEntity_(); + createModelEntity.setTitle("Testing"); + createModelEntity.setBody("Testing Put Operations"); + createModelEntity.setUserId(1); + + $PutModel(createModelEntity); + if ($PutModel.Failed) { + if (Failed != null) Failed.run(); + } + if (Done != null) Done.run(); + } + + // Fields + public void updateModelQuery(Runnable Done, Runnable Failed) { + updateModelEntity = new ServerModelEntity_(); + updateModelEntity.setId(1); + updateModelEntity.setTitle("Testing"); + updateModelEntity.setBody("Testing Put Operations"); + updateModelEntity.setUserId(1); + + $PutModel(updateModelEntity).query("1").fields("id, title, body, userId"); + if ($PutModel.Failed) { + if (Failed != null) Failed.run(); + } + if (Done != null) Done.run(); + } +} diff --git a/declex-test/app/src/main/java/com/dspot/declex/test/model/putmodel/ServerModelConfig.java b/declex-test/app/src/main/java/com/dspot/declex/test/model/putmodel/ServerModelConfig.java new file mode 100644 index 00000000..c1466fd6 --- /dev/null +++ b/declex-test/app/src/main/java/com/dspot/declex/test/model/putmodel/ServerModelConfig.java @@ -0,0 +1,39 @@ +package com.dspot.declex.test.model.putmodel; + +import java.util.concurrent.TimeUnit; + +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.SSLSession; + +import okhttp3.OkHttpClient; + +/** + * http://jsonplaceholder.typicode.com/ is a free online REST service that you can use whenever you need some fake data. + * We have used a free service published on the internet for the testing of rest api by developers. + * There are references to this service on GitHub. https://github.com/typicode/jsonplaceholder + * + * Here are the configurations use all throughout the program. + */ + +public class ServerModelConfig { + /** + * The constant SERVER. + */ + public static final String SERVER = "http://jsonplaceholder.typicode.com/"; + + /** + * Default OkHttpClient to use in whole the app + * from here it can be controlled parameters as timeouts, SSL and more + * related to the connection with the Back-End + */ + public final static OkHttpClient OK_HTTP_CLIENT = new OkHttpClient.Builder() + .hostnameVerifier(new HostnameVerifier() { + @Override + public boolean verify(String hostname, SSLSession session) { + return true; + } + }) + .connectTimeout(10, TimeUnit.SECONDS) + .readTimeout(30, TimeUnit.SECONDS) + .build(); +} \ No newline at end of file diff --git a/declex-test/app/src/main/java/com/dspot/declex/test/model/putmodel/model/ServerModelEntity.java b/declex-test/app/src/main/java/com/dspot/declex/test/model/putmodel/model/ServerModelEntity.java new file mode 100644 index 00000000..a0d79c5b --- /dev/null +++ b/declex-test/app/src/main/java/com/dspot/declex/test/model/putmodel/model/ServerModelEntity.java @@ -0,0 +1,59 @@ +/** + * Copyright (C) 2016-2017 DSpot Sp. z o.o + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.dspot.declex.test.model.putmodel.model; + +import com.dspot.declex.annotation.ServerModel; +import com.dspot.declex.annotation.ServerRequest; +import com.dspot.declex.annotation.UseModel; +import com.dspot.declex.test.model.putmodel.ServerModelConfig; + +import okhttp3.OkHttpClient; + +@ServerModel ( + baseUrl = ServerModelConfig.SERVER, + getHeaders = "Content-type=application/json; charset=UTF-8", + + put = { + @ServerRequest( + name = "create", + method = ServerRequest.RequestMethod.Post, + action = "posts", + model = "this" + ), + @ServerRequest( + name = "update", + method = ServerRequest.RequestMethod.Put, + action = "posts/{query}", + model = "this" + ), + @ServerRequest( + name = "delete", + method = ServerRequest.RequestMethod.Delete, + action = "posts/{query}" + ), + } +) + +@UseModel +public class ServerModelEntity { + int id; + int userId; + String title; + String body; + + @ServerModel + static OkHttpClient okHttpClient = ServerModelConfig.OK_HTTP_CLIENT; +} diff --git a/declex-test/app/src/test/java/com/dspot/declex/test/model/putmodel/TestPutModel.java b/declex-test/app/src/test/java/com/dspot/declex/test/model/putmodel/TestPutModel.java new file mode 100644 index 00000000..c81f8fbc --- /dev/null +++ b/declex-test/app/src/test/java/com/dspot/declex/test/model/putmodel/TestPutModel.java @@ -0,0 +1,92 @@ +package com.dspot.declex.test.model.putmodel; + +import com.dspot.declex.actions.PutModelActionHolder_; + +import static com.jayway.awaitility.Awaitility.*; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.mockito.Mockito.*; + +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.rule.PowerMockRule; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; + +import java.util.concurrent.atomic.AtomicBoolean; + + +@RunWith(RobolectricTestRunner.class) +@Config( + manifest = "app/src/main/AndroidManifest.xml", + sdk = 25 +) +@PowerMockIgnore({"org.mockito.*", "org.robolectric.*", "android.*", "javax.net.ssl.*", "org.powermock.*"}) +@PrepareForTest({ModelBean_.class, PutModelActionHolder_.class}) +public class TestPutModel { + + @Rule + public PowerMockRule rule = new PowerMockRule(); + + @Before + public void setUp() throws Exception { + + } + + @Test + public void testPutModelMockAction() { + String title = "Testing"; + + PutModelActionHolder_ model = mock(PutModelActionHolder_.class); + when(model.getQuery()).thenReturn("title=" + title + ""); + when(model.getFields()).thenReturn("title, body"); + + assertEquals("title=Testing", model.getQuery()); + assertEquals("title, body", model.getFields()); + } + + @Test + public void testPutModelAction() { + String title = "Testing"; + + PutModelActionHolder_ model = PutModelActionHolder_.getInstance_(RuntimeEnvironment.application); + model.query("title=" + title + ""); + model.fields("title, body"); + model.orderBy("create"); + + assertEquals("title=Testing", model.getQuery()); + assertEquals("title, body", model.getFields()); + assertEquals("create", model.getOrderBy()); + } + + @Test + public void testPutModelQuery() { + final AtomicBoolean Done = new AtomicBoolean(false); + final AtomicBoolean Failed = new AtomicBoolean(false); + + { + ModelBean_ bean = ModelBean_.getInstance_(RuntimeEnvironment.application); + bean.$updateModelQuery(new Runnable() { + @Override + public void run() { + Done.set(true); + } + }, new Runnable() { + @Override + public void run() { + Failed.set(true); + } + }); + } + + await().untilTrue(Done); + await().untilFalse(Failed); + } +} \ No newline at end of file diff --git a/declex-test/build.gradle b/declex-test/build.gradle index 590d3bd4..0f271efd 100644 --- a/declex-test/build.gradle +++ b/declex-test/build.gradle @@ -17,6 +17,8 @@ allprojects { jcenter() mavenCentral() mavenLocal() + + maven {url 'https://dl.bintray.com/dspot-developers/declex'} } }