add more api tests

This commit is contained in:
Phillip Thelen 2016-06-07 14:27:27 +02:00
parent e78fea7375
commit 181aae799d
11 changed files with 262 additions and 92 deletions

View file

@ -246,16 +246,14 @@ public class APIHelper implements Action1<Throwable> {
auth.setPassword(password);
auth.setConfirmPassword(confirmPassword);
auth.setEmail(email);
return this.apiService.registerUser(auth)
.compose(this.configureApiCallObserver());
return this.apiService.registerUser(auth);
}
public Observable<UserAuthResponse> connectUser(String username, String password) {
UserAuth auth = new UserAuth();
auth.setUsername(username);
auth.setPassword(password);
return this.apiService.connectLocal(auth)
.compose(this.configureApiCallObserver());
return this.apiService.connectLocal(auth);
}
public Observable<UserAuthResponse> connectSocial(String userId, String accessToken) {
@ -265,8 +263,7 @@ public class APIHelper implements Action1<Throwable> {
authResponse.setClient_id(userId);
authResponse.setAccess_token(accessToken);
auth.setAuthResponse(authResponse);
return this.apiService.connectSocial(auth)
.compose(this.configureApiCallObserver());
return this.apiService.connectSocial(auth);
}
@Override

View file

@ -154,9 +154,9 @@ public class SetupActivity extends BaseActivity implements View.OnClickListener,
public void onClick(View v) {
if (v == this.nextButton) {
if (this.pager.getCurrentItem() == 1) {
List<Map<String, Object>> newTasks = this.taskSetupFragment.createSampleTasks();
List<Task> newTasks = this.taskSetupFragment.createSampleTasks();
this.completedSetup = true;
this.apiHelper.apiService.createItems(newTasks)
this.apiHelper.apiService.createTasks(newTasks)
.compose(this.apiHelper.configureApiCallObserver())
.subscribe(tasks -> {
onUserReceived(user);

View file

@ -5,6 +5,7 @@ import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.ui.activities.SetupActivity;
import com.habitrpg.android.habitica.ui.adapter.setup.TaskSetupAdapter;
import com.habitrpg.android.habitica.ui.fragments.BaseFragment;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Days;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
import android.os.Bundle;
@ -104,7 +105,7 @@ public class TaskSetupFragment extends BaseFragment {
};
}
public List<Map<String, Object>> createSampleTasks() {
public List<Task> createSampleTasks() {
List<String> groups = new ArrayList<>();
int i = 0;
for (Boolean checked : this.adapter.checkedList) {
@ -113,10 +114,10 @@ public class TaskSetupFragment extends BaseFragment {
}
i++;
}
List<Map<String, Object>> tasks = new ArrayList<>();
List<Task> tasks = new ArrayList<>();
for (Object[] task : this.tasks) {
if (groups.contains((String) task[0])) {
Map<String, Object> taskObject = new HashMap<>();
Task taskObject;
if (task.length == 5) {
taskObject = this.makeTaskObject((String) task[1], (String) task[2], (Boolean) task[3], (Boolean) task[4]);
} else {
@ -128,29 +129,29 @@ public class TaskSetupFragment extends BaseFragment {
return tasks;
}
private Map<String, Object> makeTaskObject(String type, String text, Boolean up, Boolean down) {
Map<String, Object> task = new HashMap<>();
task.put("text", text);
task.put("priority", 1);
task.put("type", type);
private Task makeTaskObject(String type, String text, Boolean up, Boolean down) {
Task task = new Task();
task.text = text;
task.priority = 1.0f;
task.type = type;
if (type.equals("habit")) {
task.put("up", up);
task.put("down", down);
task.up = up;
task.down = down;
}
if (type.equals("daily")) {
task.put("frequency", "weekly");
task.put("startDate", new Date());
Map<String, Boolean> repeat= new HashMap<>();
repeat.put("m", true);
repeat.put("t", true);
repeat.put("w", true);
repeat.put("th", true);
repeat.put("f", true);
repeat.put("s", true);
repeat.put("su", true);
task.put("repeat", repeat);
task.frequency = "weekly";
task.startDate = new Date();
Days days = new Days();
days.setM(true);
days.setT(true);
days.setW(true);
days.setTh(true);
days.setF(true);
days.setS(true);
days.setSu(true);
task.repeat = days;
}
return task;

View file

@ -94,7 +94,7 @@ public interface ApiService {
Observable<Task> createItem(@Body Task item);
@POST("tasks/user")
Observable<List<Task>> createItems(@Body List<Map<String, Object>> tasks);
Observable<List<Task>> createTasks(@Body List<Task> tasks);
@PUT("tasks/{id}")
Observable<Task> updateTask(@Path("id") String id, @Body Task item);

View file

@ -88,6 +88,7 @@ public class Task extends BaseModel {
public Integer everyX, streak;
@Column
public
Date startDate;
@Column

View file

@ -15,7 +15,7 @@ public class TaskSerializer implements JsonSerializer<Task> {
@Override
public JsonElement serialize(Task task, Type typeOfSrc, JsonSerializationContext context) {
JsonObject obj = new JsonObject();
obj.addProperty("id", task.getId());
obj.addProperty("_id", task.getId());
obj.addProperty("text", task.getText());
obj.addProperty("notes", task.getNotes());
obj.addProperty("value", task.getValue());

View file

@ -1,60 +0,0 @@
package com.habitrpg.android.habitica;
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskList;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricGradleTestRunner;
import org.robolectric.annotation.Config;
import android.os.Build;
import java.util.List;
import rx.observers.TestSubscriber;
@Config(constants = BuildConfig.class, sdk = Build.VERSION_CODES.LOLLIPOP)
@RunWith(RobolectricGradleTestRunner.class)
public class APIHelperTests {
private APIHelper apiHelper;
@Before
public void setUp() {
HostConfig hostConfig = new HostConfig(BuildConfig.BASE_URL,
BuildConfig.PORT,
BuildConfig.TEST_USER_KEY,
BuildConfig.TEST_USER_ID);
apiHelper = new APIHelper(APIHelper.createGsonFactory(), hostConfig);
}
@Test
public void shouldLoadUserFromServer() {
TestSubscriber<HabitRPGUser> testSubscriber = new TestSubscriber<>();
apiHelper.apiService.getUser().subscribe(testSubscriber);
testSubscriber.assertNoErrors();
testSubscriber.assertCompleted();
testSubscriber.assertValueCount(1);
}
@Test
public void shouldLoadTasksFromServer() {
TestSubscriber<TaskList> testSubscriber = new TestSubscriber<>();
apiHelper.apiService.getTasks().subscribe(testSubscriber);
testSubscriber.assertNoErrors();
testSubscriber.assertCompleted();
}
@Test
public void shouldLoadCompleteUserFromServer() {
TestSubscriber<HabitRPGUser> testSubscriber = new TestSubscriber<>();
apiHelper.retrieveUser(true).subscribe(testSubscriber);
testSubscriber.assertNoErrors();
testSubscriber.assertCompleted();
testSubscriber.assertValueCount(1);
}
}

View file

@ -0,0 +1,55 @@
package com.habitrpg.android.habitica.api;
import com.habitrpg.android.habitica.APIHelper;
import com.habitrpg.android.habitica.BuildConfig;
import com.habitrpg.android.habitica.HostConfig;
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
import com.magicmicky.habitrpgwrapper.lib.models.UserAuthResponse;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskList;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricGradleTestRunner;
import org.robolectric.annotation.Config;
import android.os.Build;
import java.util.List;
import java.util.UUID;
import rx.observers.TestSubscriber;
@Config(constants = BuildConfig.class, sdk = Build.VERSION_CODES.LOLLIPOP)
@RunWith(RobolectricGradleTestRunner.class)
public class BaseAPITests {
public APIHelper apiHelper;
public HostConfig hostConfig;
public String username;
public final String password = "password";
@Before
public void setUp() {
hostConfig = new HostConfig(BuildConfig.BASE_URL,
BuildConfig.PORT,
"",
"");
apiHelper = new APIHelper(APIHelper.createGsonFactory(), hostConfig);
generateUser();
}
public void generateUser() {
TestSubscriber<UserAuthResponse> testSubscriber = new TestSubscriber<>();
username = UUID.randomUUID().toString();
apiHelper.registerUser(username, username+"@example.com", password, password)
.subscribe(testSubscriber);
testSubscriber.assertCompleted();
UserAuthResponse response = testSubscriber.getOnNextEvents().get(0);
hostConfig.setUser(response.getId());
hostConfig.setApi(response.getApiToken() != null ? response.getApiToken() : response.getToken());
}
}

View file

@ -0,0 +1,110 @@
package com.habitrpg.android.habitica.api;
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
import com.magicmicky.habitrpgwrapper.lib.models.TaskDirectionData;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskList;
import org.hamcrest.CoreMatchers;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import rx.observers.TestSubscriber;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
public class TaskAPITests extends BaseAPITests {
private Task habit1;
private Task daily1;
private Task todo1;
private Task reward1;
@Override
public void setUp() {
super.setUp();
TestSubscriber<TaskList> oldTaskSubscriber = new TestSubscriber<>();
apiHelper.apiService.getTasks().subscribe(oldTaskSubscriber);
TaskList tasks = oldTaskSubscriber.getOnNextEvents().get(0);
for (Task task : tasks.tasks.values()) {
apiHelper.apiService.deleteTask(task.getId()).subscribe(new TestSubscriber<>());
}
List<Task> randomTasks = new ArrayList<>();
randomTasks.add(createRandomTask("1", "habit"));
habit1 = randomTasks.get(0);
randomTasks.add(createRandomTask("2", "habit"));
randomTasks.add(createRandomTask("3", "daily"));
daily1 = randomTasks.get(2);
randomTasks.add(createRandomTask("4", "daily"));
randomTasks.add(createRandomTask("5", "todo"));
todo1 = randomTasks.get(4);
randomTasks.add(createRandomTask("6", "todo"));
randomTasks.add(createRandomTask("7", "reward"));
reward1 = randomTasks.get(6);
randomTasks.add(createRandomTask("8", "reward"));
TestSubscriber<List<Task>> testSubscriber = new TestSubscriber<>();
apiHelper.apiService.createTasks(randomTasks).subscribe(testSubscriber);
testSubscriber.assertNoErrors();
testSubscriber.assertCompleted();
}
private Task createRandomTask(String number, String type) {
Task task = new Task();
task.setId(String.valueOf(UUID.randomUUID()));
task.setText("task-"+number);
task.setType(type);
task.setTags(new ArrayList<>());
task.setChecklist(new ArrayList<>());
return task;
}
@Test
public void shouldLoadAllTasksFromServer() {
TestSubscriber<TaskList> testSubscriber = new TestSubscriber<>();
apiHelper.apiService.getTasks().subscribe(testSubscriber);
testSubscriber.assertNoErrors();
testSubscriber.assertCompleted();
TaskList taskList = testSubscriber.getOnNextEvents().get(0);
assertEquals(8, taskList.tasks.size());
}
@Test
public void shouldBeAbleToScoreTaskUp() {
TestSubscriber<TaskDirectionData> testSubscriber = new TestSubscriber<>();
apiHelper.apiService.postTaskDirection(habit1.getId(), "up").subscribe(testSubscriber);
testSubscriber.assertNoErrors();
testSubscriber.assertCompleted();
TaskDirectionData data = testSubscriber.getOnNextEvents().get(0);
assertTrue(data.getDelta() > 0);
}
@Test
public void shouldBeAbleToScoreTaskDown() {
TestSubscriber<TaskDirectionData> testSubscriber = new TestSubscriber<>();
apiHelper.apiService.postTaskDirection(habit1.getId(), "down").subscribe(testSubscriber);
testSubscriber.assertNoErrors();
testSubscriber.assertCompleted();
TaskDirectionData data = testSubscriber.getOnNextEvents().get(0);
assertTrue(data.getDelta() < 0);
}
@Test
public void shouldBeAbleToDeleteATask() {
TestSubscriber<Void> testSubscriber = new TestSubscriber<>();
apiHelper.apiService.deleteTask(habit1.getId()).subscribe(testSubscriber);
testSubscriber.assertCompleted();
testSubscriber.assertNoErrors();
TestSubscriber<TaskList> newTaskListSubscriber = new TestSubscriber<>();
apiHelper.apiService.getTasks().subscribe(newTaskListSubscriber);
TaskList taskList = newTaskListSubscriber.getOnNextEvents().get(0);
assertEquals(7, taskList.tasks.size());
}
}

View file

@ -0,0 +1,66 @@
package com.habitrpg.android.habitica.api;
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
import com.magicmicky.habitrpgwrapper.lib.models.UserAuthResponse;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskList;
import junit.framework.Assert;
import org.junit.Test;
import java.util.UUID;
import rx.observers.TestSubscriber;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotSame;
public class UserAPITests extends BaseAPITests {
@Test
public void shouldLoadUserFromServer() {
TestSubscriber<HabitRPGUser> testSubscriber = new TestSubscriber<>();
apiHelper.apiService.getUser().subscribe(testSubscriber);
testSubscriber.assertNoErrors();
testSubscriber.assertCompleted();
testSubscriber.assertValueCount(1);
}
@Test
public void shouldLoadCompleteUserFromServer() {
TestSubscriber<HabitRPGUser> testSubscriber = new TestSubscriber<>();
apiHelper.retrieveUser(true).subscribe(testSubscriber);
testSubscriber.assertNoErrors();
testSubscriber.assertCompleted();
testSubscriber.assertValueCount(1);
}
@Test
public void shouldRegisterNewUser() {
hostConfig.setUser("");
hostConfig.setApi("");
TestSubscriber<UserAuthResponse> testSubscriber = new TestSubscriber<>();
username = UUID.randomUUID().toString();
apiHelper.registerUser(username, username+"@example.com", password, password)
.subscribe(testSubscriber);
testSubscriber.assertNoErrors();
testSubscriber.assertCompleted();
UserAuthResponse response = testSubscriber.getOnNextEvents().get(0);
assertNotSame(hostConfig.getUser(), response.getId());
assertNotSame(hostConfig.getApi(), response.getApiToken() != null ? response.getApiToken() : response.getToken());
}
@Test
public void shouldLoginExistingUser() {
TestSubscriber<UserAuthResponse> testSubscriber = new TestSubscriber<>();
apiHelper.connectUser(username, password).subscribe(testSubscriber);
testSubscriber.assertNoErrors();
testSubscriber.assertCompleted();
UserAuthResponse response = testSubscriber.getOnNextEvents().get(0);
assertEquals(hostConfig.getUser(), response.getId());
assertEquals(hostConfig.getApi(), response.getApiToken() != null ? response.getApiToken() : response.getToken());
}
}

View file

@ -11,4 +11,4 @@ PORT=80
# BASE_URL=http://10.0.2.2:3000
# Production
BASE_URL=https://habitica.com
BASE_URL=https://habitica.com