import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.LargeTest;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import de.luhmer.owncloudnewsreader.NewsReaderListActivity;
import de.luhmer.owncloudnewsreader.reader.FeedItemTags;
import de.luhmer.owncloudnewsreader.reader.HttpJsonRequest;
import de.luhmer.owncloudnewsreader.reader.owncloud.API;
import de.luhmer.owncloudnewsreader.reader.owncloud.OwnCloudReaderMethods;
import de.luhmer.owncloudnewsreader.reader.owncloud.apiv2.APIv2;
import okhttp3.HttpUrl;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;
@RunWith(AndroidJUnit4.class)
@LargeTest
public class SyncTests extends ActivityInstrumentationTestCase2<NewsReaderListActivity> {
private NewsReaderListActivity mActivity;
private MockWebServer server;
private HttpUrl baseUrl;
public SyncTests() {
super(NewsReaderListActivity.class);
}
@Before
public void setUp() throws Exception {
super.setUp();
injectInstrumentation(InstrumentationRegistry.getInstrumentation());
mActivity = getActivity();
// Create a MockWebServer. These are lean enough that you can create a new
// instance for every unit test.
server = new MockWebServer();
server.start();
// Ask the server for its URL. You'll need this to make HTTP requests.
baseUrl = server.url("/");
HttpJsonRequest.init(mActivity);
HttpJsonRequest.getInstance().setCredentials("test", "test", baseUrl.toString());
}
@Test
public void testVersionInfo() throws Exception {
// Schedule some responses.
server.enqueue(new MockResponse().setBody(getSampleVersionInfoV2()));
String versionNumber = OwnCloudReaderMethods.GetVersionNumber(baseUrl);
assertEquals("5.2.3", versionNumber);
API api = API.GetRightApiForVersion(versionNumber, baseUrl);
assertTrue(api instanceof APIv2);
}
private String getSampleVersionInfoV2() {
JsonObject jVer = new JsonObject();
jVer.addProperty("version", "5.2.3");
return jVer.toString();
}
@Test
public void testFeedSync() throws Exception {
JsonObject jFeed = new JsonObject();
JsonObject jF = new JsonObject();
jF.addProperty("id", "-1");
jF.addProperty("url", "");
jF.addProperty("title", "-1");
jF.addProperty("faviconLink", "-1");
jF.addProperty("added", "-1");
jF.addProperty("folderId", "-1");
jF.addProperty("ordering", "-1"); //TODO implement this field!
jF.addProperty("link", "-1");
jF.addProperty("pinned", "-1");
JsonArray jFeedArr = new JsonArray();
jFeedArr.add(jF);
jFeed.add("feeds", jFeedArr);
server.enqueue(new MockResponse().setBody(getSampleVersionInfoV2()));
server.enqueue(new MockResponse().setBody(jFeed.toString()));
String versionNumber = OwnCloudReaderMethods.GetVersionNumber(baseUrl);
API api = API.GetRightApiForVersion(versionNumber, baseUrl);
assertTrue(api instanceof APIv2);
int[] res = OwnCloudReaderMethods.GetFeeds(mActivity, api);
assertEquals(1, res[0]);
assertEquals(1, res[1]);
}
@Test
public void testItemSync() throws Exception {
JsonObject jItem = new JsonObject();
JsonObject jI = new JsonObject();
jI.addProperty("id", "-1");
jI.addProperty("guid", "http://grulja.wordpress.com/?p=76");
jI.addProperty("guidHash", "3059047a572cd9cd5d0bf645faffd077");
jI.addProperty("url", "http://grulja.wordpress.com/2013/04/29/plasma-nm-after-the-solid-sprint/");
jI.addProperty("title", "Plasma-nm after the solid sprint");
jI.addProperty("author", "Jan Grulich (grulja)");
jI.addProperty("pubDate", 1367270544);
jI.addProperty("body", "<p>At first I have to say...</p>");
jI.addProperty("enclosureMime", (String) null);
jI.addProperty("enclosureLink", (String) null);
jI.addProperty("feedId", "-1");
jI.addProperty("unread", true);
jI.addProperty("starred", false);
jI.addProperty("lastModified", 1367273003);
JsonArray jItemArr = new JsonArray();
jItemArr.add(jI);
jItem.add("feeds", jItemArr);
server.enqueue(new MockResponse().setBody(getSampleVersionInfoV2()));
server.enqueue(new MockResponse().setBody(jItem.toString()));
String versionNumber = OwnCloudReaderMethods.GetVersionNumber(baseUrl);
API api = API.GetRightApiForVersion(versionNumber, baseUrl);
assertTrue(api instanceof APIv2);
int res2 = OwnCloudReaderMethods.GetItems(FeedItemTags.ALL, mActivity, "0", true, "0", "0", api); //TODO verify params
assertEquals(1, res2);
/*
// Optional: confirm that your app made the HTTP requests you were expecting.
RecordedRequest request1 = server.takeRequest();
assertEquals("/v1/chat/messages/", request1.getPath());
assertNotNull(request1.getHeader("Authorization"));
RecordedRequest request2 = server.takeRequest();
assertEquals("/v1/chat/messages/2", request2.getPath());
RecordedRequest request3 = server.takeRequest();
assertEquals("/v1/chat/messages/3", request3.getPath());
*/
}
@After
public void tearDown() throws Exception {
// Shut down the server. Instances cannot be reused.
server.shutdown();
super.tearDown();
}
private void sleep(float seconds) {
try {
Thread.sleep((long) seconds * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}