diff options
| author | Jesse Morgan <jesse@jesterpm.net> | 2013-11-09 15:24:56 -0800 | 
|---|---|---|
| committer | Jesse Morgan <jesse@jesterpm.net> | 2013-11-09 15:24:56 -0800 | 
| commit | 0d90da39f77ac3cfa607a68bc59336bf0bdff240 (patch) | |
| tree | 1a2133dea8035004052e1fddf9b4c022fb8e21e1 /tst/com/p4square/grow | |
| parent | ebbfb39ca9b63c170ca7b609dd07d234d89ab23a (diff) | |
Refactored TrainingResource to use the Provider interface.
Playlists are now generated from a default playlist and regularly
merged with the default playlist to get updates.
Also adding the Question tests that got left out of a previous commit.
Diffstat (limited to 'tst/com/p4square/grow')
| -rw-r--r-- | tst/com/p4square/grow/model/CircleQuestionTest.java | 92 | ||||
| -rw-r--r-- | tst/com/p4square/grow/model/ImageQuestionTest.java | 74 | ||||
| -rw-r--r-- | tst/com/p4square/grow/model/QuadQuestionTest.java | 92 | ||||
| -rw-r--r-- | tst/com/p4square/grow/model/ScoreTest.java | 111 | ||||
| -rw-r--r-- | tst/com/p4square/grow/model/SliderQuestionTest.java | 58 | ||||
| -rw-r--r-- | tst/com/p4square/grow/model/TextQuestionTest.java | 74 | ||||
| -rw-r--r-- | tst/com/p4square/grow/model/TrainingRecordTest.java | 178 | ||||
| -rw-r--r-- | tst/com/p4square/grow/model/trainingrecord.json | 18 | 
8 files changed, 697 insertions, 0 deletions
diff --git a/tst/com/p4square/grow/model/CircleQuestionTest.java b/tst/com/p4square/grow/model/CircleQuestionTest.java new file mode 100644 index 0000000..222cda5 --- /dev/null +++ b/tst/com/p4square/grow/model/CircleQuestionTest.java @@ -0,0 +1,92 @@ +/* + * Copyright 2013 Jesse Morgan + */ + +package com.p4square.grow.model; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Tests for CircleQuestion. + * + * @author Jesse Morgan <jesse@jesterpm.net> + */ +public class CircleQuestionTest { +    private static final double DELTA = 1e-4; + +    public static void main(String... args) { +        org.junit.runner.JUnitCore.main(CircleQuestionTest.class.getName()); +    } + +    private CircleQuestion mQuestion; + +    @Before +    public void setUp() { +        mQuestion = new CircleQuestion(); + +        Answer a1 = new Answer(); +        a1.setScore(2); + +        Answer a2 = new Answer(); +        a2.setScore(4); + +        mQuestion.getAnswers().put("1.00,0.00", a1); +        mQuestion.getAnswers().put("-1.00,0.00", a2); +    } + +    /** +     * Verify the getters and setters function correctly. +     */ +    @Test +    public void testGetAndSet() { +        mQuestion.setTopLeft("TopLeft String"); +        assertEquals("TopLeft String", mQuestion.getTopLeft()); + +        mQuestion.setTopRight("TopRight String"); +        assertEquals("TopRight String", mQuestion.getTopRight()); + +        mQuestion.setBottomRight("BottomRight String"); +        assertEquals("BottomRight String", mQuestion.getBottomRight()); + +        mQuestion.setBottomLeft("BottomLeft String"); +        assertEquals("BottomLeft String", mQuestion.getBottomLeft()); +    } + +    /** +     * The ScoringEngines are tested extensively independently, so simply +     * verify that we get the expected results for our input. +     */ +    @Test +    public void testScoreAnswer() { +        Score score = new Score(); +        RecordedAnswer answer = new RecordedAnswer(); + +        answer.setAnswerId("0.5,0.5"); +        assertTrue(mQuestion.scoreAnswer(score, answer)); +        assertEquals(2, score.sum, DELTA); +        assertEquals(1, score.count); + +        answer.setAnswerId("-0.5,-0.5"); +        assertTrue(mQuestion.scoreAnswer(score, answer)); +        assertEquals(6, score.sum, DELTA); +        assertEquals(2, score.count); + +        try { +            answer.setAnswerId("notAPoint"); +            assertTrue(mQuestion.scoreAnswer(score, answer)); +            fail("Should have thrown exception."); +        } catch (IllegalArgumentException e) { +        } +    } + +    /** +     * Verify the correct type string is returned. +     */ +    @Test +    public void testType() { +        assertEquals("circle", mQuestion.getType().toString()); +    } +} diff --git a/tst/com/p4square/grow/model/ImageQuestionTest.java b/tst/com/p4square/grow/model/ImageQuestionTest.java new file mode 100644 index 0000000..28ccdb2 --- /dev/null +++ b/tst/com/p4square/grow/model/ImageQuestionTest.java @@ -0,0 +1,74 @@ +/* + * Copyright 2013 Jesse Morgan + */ + +package com.p4square.grow.model; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Test for ImageQuestion. + * + * @author Jesse Morgan <jesse@jesterpm.net> + */ +public class ImageQuestionTest { +    private static final double DELTA = 1e-4; + +    public static void main(String... args) { +        org.junit.runner.JUnitCore.main(ImageQuestionTest.class.getName()); +    } + +    private Question mQuestion; + +    @Before +    public void setUp() { +        mQuestion = new ImageQuestion(); + +        Answer a1 = new Answer(); +        a1.setScore(2); + +        Answer a2 = new Answer(); +        a2.setScore(4); + +        mQuestion.getAnswers().put("a1", a1); +        mQuestion.getAnswers().put("a2", a2); +    } + +    /** +     * The ScoringEngines are tested extensively independently, so simply +     * verify that we get the expected results for our input. +     */ +    @Test +    public void testScoreAnswer() { +        Score score = new Score(); +        RecordedAnswer answer = new RecordedAnswer(); + +        answer.setAnswerId("a1"); +        assertTrue(mQuestion.scoreAnswer(score, answer)); +        assertEquals(2, score.sum, DELTA); +        assertEquals(1, score.count); + +        answer.setAnswerId("a2"); +        assertTrue(mQuestion.scoreAnswer(score, answer)); +        assertEquals(6, score.sum, DELTA); +        assertEquals(2, score.count); + +        try { +            answer.setAnswerId("unknown"); +            assertTrue(mQuestion.scoreAnswer(score, answer)); +            fail("Should have thrown exception."); +        } catch (IllegalArgumentException e) { +        } +    } + +    /** +     * Verify the correct type string is returned. +     */ +    @Test +    public void testType() { +        assertEquals("image", mQuestion.getType().toString()); +    } +} diff --git a/tst/com/p4square/grow/model/QuadQuestionTest.java b/tst/com/p4square/grow/model/QuadQuestionTest.java new file mode 100644 index 0000000..389148a --- /dev/null +++ b/tst/com/p4square/grow/model/QuadQuestionTest.java @@ -0,0 +1,92 @@ +/* + * Copyright 2013 Jesse Morgan + */ + +package com.p4square.grow.model; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Test for QuadQuestion. + * + * @author Jesse Morgan <jesse@jesterpm.net> + */ +public class QuadQuestionTest { +    private static final double DELTA = 1e-4; + +    public static void main(String... args) { +        org.junit.runner.JUnitCore.main(QuadQuestionTest.class.getName()); +    } + +    private QuadQuestion mQuestion; + +    @Before +    public void setUp() { +        mQuestion = new QuadQuestion(); + +        Answer a1 = new Answer(); +        a1.setScore(2); + +        Answer a2 = new Answer(); +        a2.setScore(4); + +        mQuestion.getAnswers().put("1.00,0.00", a1); +        mQuestion.getAnswers().put("-1.00,0.00", a2); +    } + +    /** +     * Verify the getters and setters function correctly. +     */ +    @Test +    public void testGetAndSet() { +        mQuestion.setTop("Top String"); +        assertEquals("Top String", mQuestion.getTop()); + +        mQuestion.setBottom("Bottom String"); +        assertEquals("Bottom String", mQuestion.getBottom()); + +        mQuestion.setLeft("Left String"); +        assertEquals("Left String", mQuestion.getLeft()); + +        mQuestion.setRight("Right String"); +        assertEquals("Right String", mQuestion.getRight()); +    } + +    /** +     * The ScoringEngines are tested extensively independently, so simply +     * verify that we get the expected results for our input. +     */ +    @Test +    public void testScoreAnswer() { +        Score score = new Score(); +        RecordedAnswer answer = new RecordedAnswer(); + +        answer.setAnswerId("0.5,0.5"); +        assertTrue(mQuestion.scoreAnswer(score, answer)); +        assertEquals(2, score.sum, DELTA); +        assertEquals(1, score.count); + +        answer.setAnswerId("-0.5,-0.5"); +        assertTrue(mQuestion.scoreAnswer(score, answer)); +        assertEquals(6, score.sum, DELTA); +        assertEquals(2, score.count); + +        try { +            answer.setAnswerId("notAPoint"); +            assertTrue(mQuestion.scoreAnswer(score, answer)); +            fail("Should have thrown exception."); +        } catch (IllegalArgumentException e) { +        } +    } + +    /** +     * Verify the correct type string is returned. +     */ +    @Test +    public void testType() { +        assertEquals("quad", mQuestion.getType().toString()); +    } +} diff --git a/tst/com/p4square/grow/model/ScoreTest.java b/tst/com/p4square/grow/model/ScoreTest.java new file mode 100644 index 0000000..dd3522a --- /dev/null +++ b/tst/com/p4square/grow/model/ScoreTest.java @@ -0,0 +1,111 @@ +/* + * Copyright 2013 Jesse Morgan + */ + +package com.p4square.grow.model; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Test for the Score class. + * + * @author Jesse Morgan <jesse@jesterpm.net> + */ +public class ScoreTest { +    private static final double DELTA = 1e-4; + +    public static void main(String... args) { +        org.junit.runner.JUnitCore.main(ScoreTest.class.getName()); +    } + +    private Score mScore; + +    @Before +    public void setUp() { +        mScore = new Score(); +    } + +    /** +     * Verify getters and setters function. +     */ +    @Test +    public void testGetAndSet() { +        // getSum() +        mScore.sum = 1.1; +        assertEquals(1.1, mScore.getSum(), DELTA); + +        // getCount() +        mScore.count = 5; +        assertEquals(5, mScore.getCount()); +    } + +    /** +     * Verify that the average is computed by getScore(). +     */ +    @Test +    public void testGetScore() { +        mScore.sum = 7; +        mScore.count = 2; +        assertEquals(3.5, mScore.getScore(), DELTA); +    } + +    /** +     * Verify that numericScore() returns the correct mappings. +     */ +    @Test +    public void testNumericScore() { +        assertEquals(4, Score.numericScore("teacher")); +        assertEquals(3, Score.numericScore("disciple")); +        assertEquals(2, Score.numericScore("believer")); +        assertEquals(1, Score.numericScore("seeker")); +    } + +    /** +     * Verify that toString() returns the correct mappings. +     */ +    @Test +    public void testToString() { +        mScore.count = 1; + +        // Seeker is defined as score < 2 +        mScore.sum = 0; +        assertEquals("seeker", mScore.toString()); +        mScore.sum = 0.5; +        assertEquals("seeker", mScore.toString()); +        mScore.sum = 1; +        assertEquals("seeker", mScore.toString()); +        mScore.sum = 1.5; +        assertEquals("seeker", mScore.toString()); +        mScore.sum = 1.99; +        assertEquals("seeker", mScore.toString()); + +        // Believer is defined as 2 <= score < 3 +        mScore.sum = 2; +        assertEquals("believer", mScore.toString()); +        mScore.sum = 2.5; +        assertEquals("believer", mScore.toString()); +        mScore.sum = 2.99; +        assertEquals("believer", mScore.toString()); + +        // Disciple is defined as 3 <= score < 4 +        mScore.sum = 3; +        assertEquals("disciple", mScore.toString()); +        mScore.sum = 3.5; +        assertEquals("disciple", mScore.toString()); +        mScore.sum = 3.99; +        assertEquals("disciple", mScore.toString()); + +        // Teacher is defined as 4 <= score +        mScore.sum = 4; +        assertEquals("teacher", mScore.toString()); +        mScore.sum = 4.5; +        assertEquals("teacher", mScore.toString()); +        mScore.sum = 4.99; +        assertEquals("teacher", mScore.toString()); +        mScore.sum = 5; +        assertEquals("teacher", mScore.toString()); +    } +} diff --git a/tst/com/p4square/grow/model/SliderQuestionTest.java b/tst/com/p4square/grow/model/SliderQuestionTest.java new file mode 100644 index 0000000..eaa67b5 --- /dev/null +++ b/tst/com/p4square/grow/model/SliderQuestionTest.java @@ -0,0 +1,58 @@ +/* + * Copyright 2013 Jesse Morgan + */ + +package com.p4square.grow.model; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Tests for SliderQuestion. + * + * @author Jesse Morgan <jesse@jesterpm.net> + */ +public class SliderQuestionTest { +    private static final double DELTA = 1e-4; + +    public static void main(String... args) { +        org.junit.runner.JUnitCore.main(SliderQuestionTest.class.getName()); +    } + +    private Question mQuestion; + +    @Before +    public void setUp() { +        mQuestion = new SliderQuestion(); +    } + +    /** +     * The ScoringEngines are tested extensively independently, so simply +     * verify that we get the expected results for our input. +     */ +    @Test +    public void testScoreAnswer() { +        Score score = new Score(); +        RecordedAnswer answer = new RecordedAnswer(); + +        answer.setAnswerId("0.66666"); +        assertTrue(mQuestion.scoreAnswer(score, answer)); +        assertEquals(3, score.sum, DELTA); +        assertEquals(1, score.count); + +        answer.setAnswerId("1"); +        assertTrue(mQuestion.scoreAnswer(score, answer)); +        assertEquals(7, score.sum, DELTA); +        assertEquals(2, score.count); +    } + +    /** +     * Verify the correct type string is returned. +     */ +    @Test +    public void testType() { +        assertEquals("slider", mQuestion.getType().toString()); +    } +} diff --git a/tst/com/p4square/grow/model/TextQuestionTest.java b/tst/com/p4square/grow/model/TextQuestionTest.java new file mode 100644 index 0000000..d85ed86 --- /dev/null +++ b/tst/com/p4square/grow/model/TextQuestionTest.java @@ -0,0 +1,74 @@ +/* + * Copyright 2013 Jesse Morgan + */ + +package com.p4square.grow.model; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Tests for TextQuestion. + * + * @author Jesse Morgan <jesse@jesterpm.net> + */ +public class TextQuestionTest { +    private static final double DELTA = 1e-4; + +    public static void main(String... args) { +        org.junit.runner.JUnitCore.main(TextQuestionTest.class.getName()); +    } + +    private Question mQuestion; + +    @Before +    public void setUp() { +        mQuestion = new TextQuestion(); + +        Answer a1 = new Answer(); +        a1.setScore(2); + +        Answer a2 = new Answer(); +        a2.setScore(4); + +        mQuestion.getAnswers().put("a1", a1); +        mQuestion.getAnswers().put("a2", a2); +    } + +    /** +     * The ScoringEngines are tested extensively independently, so simply +     * verify that we get the expected results for our input. +     */ +    @Test +    public void testScoreAnswer() { +        Score score = new Score(); +        RecordedAnswer answer = new RecordedAnswer(); + +        answer.setAnswerId("a1"); +        assertTrue(mQuestion.scoreAnswer(score, answer)); +        assertEquals(2, score.sum, DELTA); +        assertEquals(1, score.count); + +        answer.setAnswerId("a2"); +        assertTrue(mQuestion.scoreAnswer(score, answer)); +        assertEquals(6, score.sum, DELTA); +        assertEquals(2, score.count); + +        try { +            answer.setAnswerId("unknown"); +            assertTrue(mQuestion.scoreAnswer(score, answer)); +            fail("Should have thrown exception."); +        } catch (IllegalArgumentException e) { +        } +    } + +    /** +     * Verify the correct type string is returned. +     */ +    @Test +    public void testType() { +        assertEquals("text", mQuestion.getType().toString()); +    } +} diff --git a/tst/com/p4square/grow/model/TrainingRecordTest.java b/tst/com/p4square/grow/model/TrainingRecordTest.java new file mode 100644 index 0000000..246d6ff --- /dev/null +++ b/tst/com/p4square/grow/model/TrainingRecordTest.java @@ -0,0 +1,178 @@ +/* + * Copyright 2013 Jesse Morgan + */ + +package com.p4square.grow.model; + +import java.io.InputStream; +import java.util.Date; +import java.util.Map; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Test TrainingRecord, Playlist, and Chapter. + * + * @author Jesse Morgan <jesse@jesterpm.net> + */ +public class TrainingRecordTest { +    public static void main(String... args) { +        org.junit.runner.JUnitCore.main(TrainingRecordTest.class.getName()); +    } + +    private static final ObjectMapper MAPPER = new ObjectMapper(); + +    /** +     * Test deserialization of a JSON Training record. +     */ +    @Test +    public void testDeserialization() throws Exception { +        InputStream in = getClass().getResourceAsStream("trainingrecord.json"); +        TrainingRecord record = MAPPER.readValue(in, TrainingRecord.class); + +        // Last Video +        assertEquals("teacher-1", record.getLastVideo()); + +        // Playlist +        Playlist playlist = record.getPlaylist(); + +        // Find video successfully +        VideoRecord r = playlist.find("teacher-1"); +        assertEquals(true, r.getRequired()); +        assertEquals(true, r.getComplete()); +        assertEquals(new Date(1379288806266L), r.getCompletionDate()); + +        // Find non-existent video +        r = playlist.find("not-a-video"); +        assertEquals(null, r); + +        // isChapterComplete +        assertTrue(playlist.isChapterComplete("seeker")); // Complete because not required. +        assertTrue(playlist.isChapterComplete("disciple")); // Required and completed. +        assertFalse(playlist.isChapterComplete("teacher")); // Not complete. + +        // getChapterStatuses +        Map<String, Boolean> statuses = playlist.getChapterStatuses(); +        assertTrue(statuses.get("seeker")); // Complete because not required. +        assertTrue(statuses.get("disciple")); // Required and completed. +        assertFalse(statuses.get("teacher")); // Not complete. +    } + +    /** +     * Tests for VideoRecord. +     */ +    @Test +    public void testVideoRecord() { +        VideoRecord record = new VideoRecord(); + +        // Verify defaults +        assertTrue(record.getRequired()); +        assertFalse(record.getComplete()); +        assertEquals(null, record.getCompletionDate()); + +        // Verify completion +        long now = System.currentTimeMillis(); +        record.complete(); +        assertTrue(record.getRequired()); +        assertTrue(record.getComplete()); +        assertTrue(now <= record.getCompletionDate().getTime()); +    } + +    /** +     * Tests for Playlist and Chapter methods not covered in the deserialization test. +     */ +    @Test +    public void testPlaylistAndChapter() { +        // Create a playlist for the test +        Playlist playlist = new Playlist(); +        playlist.add("chapter1", "video1"); +        playlist.add("chapter1", "video2"); + +        // Chapter should not be complete +        assertFalse(playlist.isChapterComplete("chapter1")); + +        // We should find the chapter in the map +        Map<String, Chapter> chapterMap = playlist.getChaptersMap(); +        Chapter chapter1 = chapterMap.get("chapter1"); +        assertTrue(null != chapter1); + +        // We should find the videos in the map. +        Map<String, VideoRecord> videoMap = chapter1.getVideos(); +        assertTrue(null != videoMap.get("video1")); +        assertTrue(null != videoMap.get("video2")); +        assertTrue(null == videoMap.get("video3")); + +        // Mark the videos as complete +        VideoRecord video1 = videoMap.get("video1"); +        VideoRecord video2 = videoMap.get("video2"); +        video1.complete(); +        video2.complete(); + +        // Chapter should be complete now. +        assertTrue(playlist.isChapterComplete("chapter1")); +        assertFalse(playlist.isChapterComplete("bogusChapter")); +    } + +    /** +     * Tests for Playlist default values. +     */ +    @Test +    public void testPlaylistDefaults() { +        Date before = new Date(); +        Playlist p = new Playlist(); + +        // Verify that a playlist without an explicit lastUpdated date is older than now. +        assertTrue(p.getLastUpdated().before(before)); +    } + +    /** +     * Tests for the Playlist merge method. +     */ +    @Test +    public void testMergePlaylist() { +        Playlist oldList = new Playlist(); +        oldList.add("chapter1", "video1").setRequired(true); +        oldList.add("chapter2", "video2").setRequired(false); +        oldList.add("chapter2", "video3").complete(); +        oldList.setLastUpdated(new Date(100)); + +        Playlist newList = new Playlist(); +        newList.add("chapter1", "video4").setRequired(true); +        newList.add("chapter2", "video5").setRequired(false); +        newList.add("chapter3", "video6").setRequired(false); +        newList.setLastUpdated(new Date(500)); + +        // Verify that you can't merge the old into the new +        newList.merge(oldList); +        assertTrue(null == newList.find("video2")); + +        // Merge the new list into the old and verify results +        oldList.merge(newList); + +        // All Videos Present +        assertTrue(oldList.find("video1").getRequired()); +        assertFalse(oldList.find("video2").getRequired()); +        assertTrue(oldList.find("video3").getComplete()); +        assertTrue(oldList.find("video4").getRequired()); +        assertFalse(oldList.find("video5").getRequired()); +        assertFalse(oldList.find("video6").getRequired()); + +        // New Chapter added +        Map<String, Chapter> chapters = oldList.getChaptersMap(); +        assertEquals(3, chapters.size()); +        assertTrue(null != chapters.get("chapter3")); + +        // Date updated +        assertEquals(newList.getLastUpdated(), oldList.getLastUpdated()); + +        // Video objects are actually independent +        VideoRecord oldVideo4 = oldList.find("video4"); +        VideoRecord newVideo4 = newList.find("video4"); +        assertTrue(oldVideo4 != newVideo4); +    } +} diff --git a/tst/com/p4square/grow/model/trainingrecord.json b/tst/com/p4square/grow/model/trainingrecord.json new file mode 100644 index 0000000..ea214f3 --- /dev/null +++ b/tst/com/p4square/grow/model/trainingrecord.json @@ -0,0 +1,18 @@ +{ +    "lastVideo": "teacher-1", +    "playlist": { +        "seeker": { +            "seeker-2":{"required":false,"complete":false,"completionDate":null}, +            "seeker-1":{"required":false,"complete":false,"completionDate":null} +        }, +        "disciple":{ +            "disciple-8":{"required":true,"complete":true,"completionDate":1379288805010}, +            "disciple-9":{"required":true,"complete":true,"completionDate":1379288805220}, +            "disciple-1":{"required":true,"complete":true,"completionDate":1379288805266} +        }, +        "teacher":{ +            "teacher-2":{"required":true,"complete":false,"completionDate":null}, +            "teacher-1":{"required":true,"complete":true,"completionDate":1379288806266} +        } +    } +}  | 
