summaryrefslogtreecommitdiff
path: root/src/test/java/com/p4square/grow/backend
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/com/p4square/grow/backend')
-rw-r--r--src/test/java/com/p4square/grow/backend/resources/ResourceTestBase.java101
-rw-r--r--src/test/java/com/p4square/grow/backend/resources/TrainingRecordResourceTest.java142
2 files changed, 243 insertions, 0 deletions
diff --git a/src/test/java/com/p4square/grow/backend/resources/ResourceTestBase.java b/src/test/java/com/p4square/grow/backend/resources/ResourceTestBase.java
new file mode 100644
index 0000000..b4d7864
--- /dev/null
+++ b/src/test/java/com/p4square/grow/backend/resources/ResourceTestBase.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2015 Jesse Morgan
+ */
+
+package com.p4square.grow.backend.resources;
+
+import java.io.IOException;
+
+import org.restlet.Application;
+
+import com.p4square.grow.model.Playlist;
+import com.p4square.grow.model.Question;
+import com.p4square.grow.model.TrainingRecord;
+import com.p4square.grow.model.UserRecord;
+
+import com.p4square.grow.backend.feed.FeedDataProvider;
+import com.p4square.grow.provider.CollectionProvider;
+import com.p4square.grow.provider.MapCollectionProvider;
+import com.p4square.grow.provider.MapProvider;
+import com.p4square.grow.provider.Provider;
+import com.p4square.grow.provider.ProvidesAssessments;
+import com.p4square.grow.provider.ProvidesQuestions;
+import com.p4square.grow.provider.ProvidesStrings;
+import com.p4square.grow.provider.ProvidesTrainingRecords;
+import com.p4square.grow.provider.ProvidesUserRecords;
+import com.p4square.grow.provider.ProvidesVideos;
+
+import org.junit.Before;
+
+/**
+ *
+ * @author Jesse Morgan <jesse@jesterpm.net>
+ */
+public class ResourceTestBase {
+
+ protected TestApplication mApplication;
+
+ @Before
+ public void setup() throws Exception {
+ mApplication = new TestApplication();
+ Application.setCurrent(mApplication);
+ }
+
+ public static class TestApplication extends Application implements
+ ProvidesQuestions, ProvidesTrainingRecords, ProvidesUserRecords,
+ ProvidesStrings, ProvidesAssessments
+ {
+
+ private final Provider<String, UserRecord> mUserRecordProvider;
+ private final Provider<String, Question> mQuestionProvider;
+ private final Provider<String, TrainingRecord> mTrainingRecordProvider;
+ private final Provider<String, String> mStringProvider;
+ private final CollectionProvider<String, String, String> mAnswerProvider;
+
+ private Playlist mDefaultPlaylist;
+
+ public TestApplication() {
+ mStringProvider = new MapProvider<String, String>();
+ mUserRecordProvider = new MapProvider<String, UserRecord>();
+ mQuestionProvider = new MapProvider<String, Question>();
+ mTrainingRecordProvider = new MapProvider<String, TrainingRecord>();
+ mAnswerProvider = new MapCollectionProvider<String, String, String>();
+
+ mDefaultPlaylist = new Playlist();
+ }
+
+ @Override
+ public Provider<String, UserRecord> getUserRecordProvider() {
+ return mUserRecordProvider;
+ }
+
+ @Override
+ public Provider<String, Question> getQuestionProvider() {
+ return mQuestionProvider;
+ }
+
+ @Override
+ public Provider<String, TrainingRecord> getTrainingRecordProvider() {
+ return mTrainingRecordProvider;
+ }
+
+ public void setDefaultPlaylist(Playlist playlist) {
+ mDefaultPlaylist = playlist;
+ }
+
+ @Override
+ public Playlist getDefaultPlaylist() throws IOException {
+ return mDefaultPlaylist;
+ }
+
+ @Override
+ public Provider<String, String> getStringProvider() {
+ return mStringProvider;
+ }
+
+ @Override
+ public CollectionProvider<String, String, String> getAnswerProvider() {
+ return mAnswerProvider;
+ }
+ }
+}
diff --git a/src/test/java/com/p4square/grow/backend/resources/TrainingRecordResourceTest.java b/src/test/java/com/p4square/grow/backend/resources/TrainingRecordResourceTest.java
new file mode 100644
index 0000000..db85051
--- /dev/null
+++ b/src/test/java/com/p4square/grow/backend/resources/TrainingRecordResourceTest.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2015 Jesse Morgan
+ */
+
+package com.p4square.grow.backend.resources;
+
+import java.util.Map;
+import java.util.HashMap;
+
+import org.restlet.data.Method;
+import org.restlet.Request;
+import org.restlet.Response;
+import org.restlet.ext.jackson.JacksonRepresentation;
+
+import com.p4square.grow.model.Playlist;
+import com.p4square.grow.model.TrainingRecord;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Tests for the TrainingRecordResource
+ *
+ * @author Jesse Morgan <jesse@jesterpm.net>
+ */
+public class TrainingRecordResourceTest extends ResourceTestBase {
+
+ private final String USER_ID = "1234";
+
+ private TrainingRecordResource mResource;
+ private Request mRequest;
+ private Response mResponse;
+
+ @Before
+ public void setup() throws Exception {
+ super.setup();
+
+ mResource = new TrainingRecordResource();
+
+ mRequest = new Request(Method.GET, "/");
+ Map<String, Object> attributes = new HashMap<>();
+ attributes.put("userId", USER_ID);
+ mRequest.setAttributes(attributes);
+ mResponse = new Response(mRequest);
+
+ Playlist playlist = new Playlist();
+ playlist.add("introduction", "intro-1");
+ playlist.add("seeker", "seeker-1");
+ playlist.add("believer", "believer-1");
+ playlist.add("believer", "believer-2");
+ playlist.add("disciple", "disciple-1");
+ playlist.add("teacher", "teacher-1");
+ playlist.add("leader", "leader-1");
+ mApplication.setDefaultPlaylist(playlist);
+ }
+
+ private <T> T run(Class<T> type) throws Exception {
+ mResource.init(mApplication.getContext(), mRequest, mResponse);
+ mResource.handle();
+ mResource.release();
+
+ return new JacksonRepresentation<T>(mResponse.getEntity(), type).getObject();
+ }
+
+ @Test
+ public void testSkipAssessedChaptersLow() throws Exception {
+ // Set the User's score.
+ mApplication.getAnswerProvider().put(USER_ID, "summary", "{\"sum\": 0.0, \"count\": 1}");
+
+ // Run the test
+ TrainingRecord record = run(TrainingRecord.class);
+
+ // Assert correct videos required.
+ Playlist actualPlaylist = record.getPlaylist();
+ assertTrue(actualPlaylist.find("intro-1").getRequired()); // Always required.
+ assertTrue(actualPlaylist.find("seeker-1").getRequired()); // Required by assessment.
+ assertTrue(actualPlaylist.find("believer-1").getRequired());
+ assertTrue(actualPlaylist.find("believer-1").getRequired());
+ assertTrue(actualPlaylist.find("disciple-1").getRequired());
+ assertTrue(actualPlaylist.find("teacher-1").getRequired());
+ assertTrue(actualPlaylist.find("leader-1").getRequired());
+ }
+
+ @Test
+ public void testSkipAssessedChaptersSeeker() throws Exception {
+ // Set the User's score.
+ mApplication.getAnswerProvider().put(USER_ID, "summary", "{\"sum\": 1.0, \"count\": 1}");
+
+ // Run the test
+ TrainingRecord record = run(TrainingRecord.class);
+
+ // Assert correct videos required.
+ Playlist actualPlaylist = record.getPlaylist();
+ assertTrue(actualPlaylist.find("intro-1").getRequired()); // Always required.
+ assertTrue(actualPlaylist.find("seeker-1").getRequired()); // Required by assessment.
+ assertTrue(actualPlaylist.find("believer-1").getRequired());
+ assertTrue(actualPlaylist.find("believer-1").getRequired());
+ assertTrue(actualPlaylist.find("disciple-1").getRequired());
+ assertTrue(actualPlaylist.find("teacher-1").getRequired());
+ assertTrue(actualPlaylist.find("leader-1").getRequired());
+ }
+
+ @Test
+ public void testSkipAssessedChaptersBeliever() throws Exception {
+ // Set the User's score.
+ mApplication.getAnswerProvider().put(USER_ID, "summary", "{\"sum\": 2.0, \"count\": 1}");
+
+ // Run the test
+ TrainingRecord record = run(TrainingRecord.class);
+
+ // Assert correct videos required.
+ Playlist actualPlaylist = record.getPlaylist();
+ assertTrue(actualPlaylist.find("intro-1").getRequired()); // Always required.
+ assertFalse(actualPlaylist.find("seeker-1").getRequired()); // Not required by assessment.
+ assertTrue(actualPlaylist.find("believer-1").getRequired()); // Required by assessment.
+ assertTrue(actualPlaylist.find("believer-1").getRequired());
+ assertTrue(actualPlaylist.find("disciple-1").getRequired());
+ assertTrue(actualPlaylist.find("teacher-1").getRequired());
+ assertTrue(actualPlaylist.find("leader-1").getRequired());
+ }
+
+ @Test
+ public void testSkipAssessedChaptersHigh() throws Exception {
+ // Set the User's score.
+ mApplication.getAnswerProvider().put(USER_ID, "summary", "{\"sum\": 4.0, \"count\": 1}");
+
+ // Run the test
+ TrainingRecord record = run(TrainingRecord.class);
+
+ // Assert correct videos required.
+ Playlist actualPlaylist = record.getPlaylist();
+ assertTrue(actualPlaylist.find("intro-1").getRequired()); // Always required.
+ assertFalse(actualPlaylist.find("seeker-1").getRequired()); // Not required by assessment.
+ assertFalse(actualPlaylist.find("believer-1").getRequired());
+ assertFalse(actualPlaylist.find("believer-1").getRequired());
+ assertFalse(actualPlaylist.find("disciple-1").getRequired());
+ assertTrue(actualPlaylist.find("teacher-1").getRequired()); // Required by assessment.
+ assertTrue(actualPlaylist.find("leader-1").getRequired());
+ }
+}