Example #1
0
        public void TestRawActComplexUserDefaultValsForMissing()
        {
            var db = new CSALDatabase(DB_URL);

            var turns = db.FindTurns(null, null);

            Assert.AreEqual(0, turns.Count);

            const int TURN_ID_START = CSALMongo.Model.StudentLessonActs.TURN_ID_START;

            var attempted = new CSALMongo.TurnModel.ConvLog {
                UserID   = "memphis-semiotics-fozzy-bear",
                LessonID = "lesson",
                TurnID   = TURN_ID_START
            };

            db.SaveRawStudentLessonAct(attempted.ToJson());
            attempted.TurnID++;
            db.SaveRawStudentLessonAct(attempted.ToJson());

            //Make sure DB looks correct
            Assert.IsNull(db.FindClass("semiotics-miss"));
            Assert.IsNull(db.FindLesson("lesson-miss"));
            Assert.IsNull(db.FindStudent("fozzy-bear-miss"));

            Assert.IsNotNull(db.FindClass("semiotics"));
            Assert.IsNotNull(db.FindLesson("lesson"));
            Assert.IsNotNull(db.FindStudent("fozzy-bear"));

            Assert.AreEqual(1, db.FindTurns(null, null).Count);

            //Class defaults
            var clazz = db.FindClass("semiotics");

            Assert.AreEqual(1, clazz.Lessons.Count);
            Assert.AreEqual(1, clazz.Students.Count);

            //Lesson defaults
            var lesson = db.FindLesson("lesson");

            Assert.AreEqual(1, lesson.AttemptTimes.Count);
            Assert.AreEqual(1, lesson.Students.Count);
            Assert.AreEqual(1, lesson.StudentsAttempted.Count);
            Assert.AreEqual(0, lesson.StudentsCompleted.Count);

            //Student defaults
            var student = db.FindStudent("fozzy-bear");

            Assert.AreEqual(2, student.TurnCount);
        }
Example #2
0
        public void TestSingleLessonComplexID()
        {
            var db = new CSALDatabase(DB_URL);

            Assert.IsNull(db.FindLesson(""));
            Assert.IsNull(db.FindLesson("key"));

            string simpleId = "lesson25";

            Assert.IsNull(db.FindLesson(simpleId));

            var idList = new List <string> {
                simpleId,
                "http://somewhere/good/scripts/Lesson25/activity",
                "http://elsewhere/bad/scripts/Lesson25/activity/doh"
            };

            const int TURN_ID_START = CSALMongo.Model.StudentLessonActs.TURN_ID_START;

            foreach (var lessonId in idList)
            {
                var attempted = new CSALMongo.TurnModel.ConvLog {
                    UserID   = "memphis-semiotics-fozzy-bear",
                    LessonID = lessonId,
                    TurnID   = TURN_ID_START
                };

                db.SaveRawStudentLessonAct(attempted.ToJson());
            }

            Assert.AreEqual(1, db.FindLessons().Count);

            var lesson2 = db.FindLesson(simpleId);

            Assert.IsNotNull(lesson2);

            Assert.AreEqual(GetJSON(lesson2), GetJSON(lesson2));
        }
Example #3
0
        public void TestAttemptedRawActs()
        {
            var db = new CSALDatabase(DB_URL);

            var turns = db.FindTurns(null, null);

            Assert.AreEqual(0, turns.Count);

            const int TURN_ID_START = CSALMongo.Model.StudentLessonActs.TURN_ID_START;

            var attempted = new CSALMongo.TurnModel.ConvLog {
                UserID   = "memphis-semiotics-fozzy-bear",
                LessonID = "lesson",
                TurnID   = TURN_ID_START
            };

            var completion = new CSALMongo.TurnModel.ConvLog {
                UserID      = "memphis-semiotics-fozzy-bear",
                LessonID    = "lesson",
                TurnID      = TURN_ID_START + 1,
                Transitions = new List <CSALMongo.TurnModel.TransitionLog> {
                    new CSALMongo.TurnModel.TransitionLog {
                        StateID = "TestEnding",
                        RuleID  = "TestHint",
                        Actions = new List <CSALMongo.TurnModel.ActionLog> {
                            new CSALMongo.TurnModel.ActionLog {
                                Agent = "System", Act = "End", Data = "Doesn't Matter"
                            }
                        }
                    }
                }
            };

            db.SaveRawStudentLessonAct(attempted.ToJson());
            turns = db.FindTurns(null, null);
            Assert.AreEqual(1, turns.Count);
            Assert.AreEqual(1, turns[0].Attempts);
            Assert.AreEqual(0, turns[0].Completions);

            db.SaveRawStudentLessonAct(completion.ToJson());
            turns = db.FindTurns(null, null);
            Assert.AreEqual(1, turns.Count);
            Assert.AreEqual(1, turns[0].Attempts);
            Assert.AreEqual(1, turns[0].Completions);

            db.SaveRawStudentLessonAct(attempted.ToJson());
            turns = db.FindTurns(null, null);
            Assert.AreEqual(1, turns.Count);
            Assert.AreEqual(2, turns[0].Attempts);
            Assert.AreEqual(1, turns[0].Completions);

            completion.TurnID++;
            db.SaveRawStudentLessonAct(completion.ToJson());
            turns = db.FindTurns(null, null);
            Assert.AreEqual(1, turns.Count);
            Assert.AreEqual(2, turns[0].Attempts);
            Assert.AreEqual(2, turns[0].Completions);

            completion.TurnID = TURN_ID_START;
            db.SaveRawStudentLessonAct(completion.ToJson());
            turns = db.FindTurns(null, null);
            Assert.AreEqual(1, turns.Count);
            Assert.AreEqual(3, turns[0].Attempts);
            Assert.AreEqual(3, turns[0].Completions);

            //We have saved five turns
            Assert.AreEqual(5, turns[0].Turns.Count);

            //Final test - make sure that we don't break on poorly formed transitions/actions
            //Note that now we need to start checking stuff with raw turn access

            db.SaveRawStudentLessonAct(@"{
                'UserID': 'memphis-semiotics-fozzy-bear',
                'LessonID': 'lesson',
                'TurnID': $TURN_ID_START,
                'Transitions': 42
            }".Replace("$TURN_ID_START", TURN_ID_START.ToString()));
            var rawTurns = db.FindTurnsRaw(null, null);

            Assert.AreEqual(1, rawTurns.Count);
            Assert.AreEqual(4, rawTurns[0].GetValue("Attempts", -1).AsInt32);
            Assert.AreEqual(3, rawTurns[0].GetValue("Completions", -1).AsInt32);
            Assert.AreEqual(6, rawTurns[0].GetValue("Turns").AsBsonArray.Count);

            db.SaveRawStudentLessonAct(@"{
                'UserID': 'memphis-semiotics-fozzy-bear',
                'LessonID': 'lesson',
                'TurnID': 10,
                'Transitions': [42]
            }");
            rawTurns = db.FindTurnsRaw(null, null);
            Assert.AreEqual(1, rawTurns.Count);
            Assert.AreEqual(4, rawTurns[0].GetValue("Attempts", -1).AsInt32);
            Assert.AreEqual(3, rawTurns[0].GetValue("Completions", -1).AsInt32);
            Assert.AreEqual(7, rawTurns[0].GetValue("Turns").AsBsonArray.Count);

            db.SaveRawStudentLessonAct(@"{
                'UserID': 'memphis-semiotics-fozzy-bear',
                'LessonID': 'lesson',
                'TurnID': 12,
                'Transitions': [{'Actions': 42}]
            }");
            rawTurns = db.FindTurnsRaw(null, null);
            Assert.AreEqual(1, rawTurns.Count);
            Assert.AreEqual(4, rawTurns[0].GetValue("Attempts", -1).AsInt32);
            Assert.AreEqual(3, rawTurns[0].GetValue("Completions", -1).AsInt32);
            Assert.AreEqual(8, rawTurns[0].GetValue("Turns").AsBsonArray.Count);

            db.SaveRawStudentLessonAct(@"{
                'UserID': 'memphis-semiotics-fozzy-bear',
                'LessonID': 'lesson',
                'TurnID': 12,
                'Transitions': [{'Actions': [42]}]
            }");
            rawTurns = db.FindTurnsRaw(null, null);
            Assert.AreEqual(1, rawTurns.Count);
            Assert.AreEqual(4, rawTurns[0].GetValue("Attempts", -1).AsInt32);
            Assert.AreEqual(3, rawTurns[0].GetValue("Completions", -1).AsInt32);
            Assert.AreEqual(9, rawTurns[0].GetValue("Turns").AsBsonArray.Count);

            db.SaveRawStudentLessonAct(@"{
                'UserID': 'memphis-semiotics-fozzy-bear',
                'LessonID': 'lesson',
                'TurnID': 13,
                'Transitions': [{'Actions': [{'Agent':'system', 'Act':'end'}]}]
            }");
            rawTurns = db.FindTurnsRaw(null, null);
            Assert.AreEqual(1, rawTurns.Count);
            Assert.AreEqual(4, rawTurns[0].GetValue("Attempts", -1).AsInt32);
            Assert.AreEqual(4, rawTurns[0].GetValue("Completions", -1).AsInt32);
            Assert.AreEqual(10, rawTurns[0].GetValue("Turns").AsBsonArray.Count);

            //Make sure fozzy bear is in memphis
            bool foundFozzy = false;

            foreach (var student in db.FindStudentsByLocation("memphis"))
            {
                if (student.UserID == "fozzy-bear")
                {
                    foundFozzy = true;
                    break;
                }
            }
            Assert.IsTrue(foundFozzy);
        }
        public void TestSingleLessonComplexID()
        {
            var db = new CSALDatabase(DB_URL);
            Assert.IsNull(db.FindLesson(""));
            Assert.IsNull(db.FindLesson("key"));

            string simpleId = "lesson25";
            Assert.IsNull(db.FindLesson(simpleId));

            var idList = new List<string> {
                simpleId,
                "http://somewhere/good/scripts/Lesson25/activity",
                "http://elsewhere/bad/scripts/Lesson25/activity/doh"
            };

            const int TURN_ID_START = CSALMongo.Model.StudentLessonActs.TURN_ID_START;

            foreach (var lessonId in idList) {
                var attempted = new CSALMongo.TurnModel.ConvLog {
                    UserID = "memphis-semiotics-fozzy-bear",
                    LessonID = lessonId,
                    TurnID = TURN_ID_START
                };

                db.SaveRawStudentLessonAct(attempted.ToJson());
            }

            Assert.AreEqual(1, db.FindLessons().Count);

            var lesson2 = db.FindLesson(simpleId);
            Assert.IsNotNull(lesson2);

            Assert.AreEqual(GetJSON(lesson2), GetJSON(lesson2));
        }
        public void TestRawActSimpleUserDefaultValsForMissing()
        {
            var db = new CSALDatabase(DB_URL);

            Assert.AreEqual(0, db.FindTurns(null, null).Count);

            const int TURN_ID_START = CSALMongo.Model.StudentLessonActs.TURN_ID_START;

            var attempted = new CSALMongo.TurnModel.ConvLog {
                UserID = "fozzy-bear",
                LessonID = "lesson",
                TurnID = TURN_ID_START
            };

            db.SaveRawStudentLessonAct(attempted.ToJson());
            attempted.TurnID++;
            db.SaveRawStudentLessonAct(attempted.ToJson());

            //Make sure DB looks correct
            Assert.AreEqual(0, db.FindClasses().Count);
            Assert.IsNull(db.FindLesson("lesson-miss"));
            Assert.IsNull(db.FindStudent("fozzy-bear-miss"));

            Assert.IsNotNull(db.FindLesson("lesson"));
            Assert.IsNotNull(db.FindStudent("fozzy-bear"));

            Assert.AreEqual(1, db.FindTurns(null, null).Count);

            //Lesson defaults
            var lesson = db.FindLesson("lesson");
            Assert.AreEqual(1, lesson.AttemptTimes.Count);
            Assert.AreEqual(1, lesson.Students.Count);
            Assert.AreEqual(1, lesson.StudentsAttempted.Count);
            Assert.AreEqual(0, lesson.StudentsCompleted.Count);

            //Student defaults
            var student = db.FindStudent("fozzy-bear");
            Assert.AreEqual(2, student.TurnCount);
        }
        public void TestAttemptedRawActs()
        {
            var db = new CSALDatabase(DB_URL);

            var turns = db.FindTurns(null, null);
            Assert.AreEqual(0, turns.Count);

            const int TURN_ID_START = CSALMongo.Model.StudentLessonActs.TURN_ID_START;

            var attempted = new CSALMongo.TurnModel.ConvLog {
                UserID = "memphis-semiotics-fozzy-bear",
                LessonID = "lesson",
                TurnID = TURN_ID_START
            };

            var completion = new CSALMongo.TurnModel.ConvLog {
                UserID = "memphis-semiotics-fozzy-bear",
                LessonID = "lesson",
                TurnID = TURN_ID_START + 1,
                Transitions = new List<CSALMongo.TurnModel.TransitionLog> {
                    new CSALMongo.TurnModel.TransitionLog {
                        StateID="TestEnding",
                        RuleID="TestHint",
                        Actions=new List<CSALMongo.TurnModel.ActionLog> {
                            new CSALMongo.TurnModel.ActionLog { Agent="System", Act="End", Data="Doesn't Matter"}
                        }
                    }
                }
            };

            db.SaveRawStudentLessonAct(attempted.ToJson());
            turns = db.FindTurns(null, null);
            Assert.AreEqual(1, turns.Count);
            Assert.AreEqual(1, turns[0].Attempts);
            Assert.AreEqual(0, turns[0].Completions);

            db.SaveRawStudentLessonAct(completion.ToJson());
            turns = db.FindTurns(null, null);
            Assert.AreEqual(1, turns.Count);
            Assert.AreEqual(1, turns[0].Attempts);
            Assert.AreEqual(1, turns[0].Completions);

            db.SaveRawStudentLessonAct(attempted.ToJson());
            turns = db.FindTurns(null, null);
            Assert.AreEqual(1, turns.Count);
            Assert.AreEqual(2, turns[0].Attempts);
            Assert.AreEqual(1, turns[0].Completions);

            completion.TurnID++;
            db.SaveRawStudentLessonAct(completion.ToJson());
            turns = db.FindTurns(null, null);
            Assert.AreEqual(1, turns.Count);
            Assert.AreEqual(2, turns[0].Attempts);
            Assert.AreEqual(2, turns[0].Completions);

            completion.TurnID = TURN_ID_START;
            db.SaveRawStudentLessonAct(completion.ToJson());
            turns = db.FindTurns(null, null);
            Assert.AreEqual(1, turns.Count);
            Assert.AreEqual(3, turns[0].Attempts);
            Assert.AreEqual(3, turns[0].Completions);

            //We have saved five turns
            Assert.AreEqual(5, turns[0].Turns.Count);

            //Final test - make sure that we don't break on poorly formed transitions/actions
            //Note that now we need to start checking stuff with raw turn access

            db.SaveRawStudentLessonAct(@"{
                'UserID': 'memphis-semiotics-fozzy-bear',
                'LessonID': 'lesson',
                'TurnID': $TURN_ID_START,
                'Transitions': 42
            }".Replace("$TURN_ID_START", TURN_ID_START.ToString()));
            var rawTurns = db.FindTurnsRaw(null, null);
            Assert.AreEqual(1, rawTurns.Count);
            Assert.AreEqual(4, rawTurns[0].GetValue("Attempts", -1).AsInt32);
            Assert.AreEqual(3, rawTurns[0].GetValue("Completions", -1).AsInt32);
            Assert.AreEqual(6, rawTurns[0].GetValue("Turns").AsBsonArray.Count);

            db.SaveRawStudentLessonAct(@"{
                'UserID': 'memphis-semiotics-fozzy-bear',
                'LessonID': 'lesson',
                'TurnID': 10,
                'Transitions': [42]
            }");
            rawTurns = db.FindTurnsRaw(null, null);
            Assert.AreEqual(1, rawTurns.Count);
            Assert.AreEqual(4, rawTurns[0].GetValue("Attempts", -1).AsInt32);
            Assert.AreEqual(3, rawTurns[0].GetValue("Completions", -1).AsInt32);
            Assert.AreEqual(7, rawTurns[0].GetValue("Turns").AsBsonArray.Count);

            db.SaveRawStudentLessonAct(@"{
                'UserID': 'memphis-semiotics-fozzy-bear',
                'LessonID': 'lesson',
                'TurnID': 12,
                'Transitions': [{'Actions': 42}]
            }");
            rawTurns = db.FindTurnsRaw(null, null);
            Assert.AreEqual(1, rawTurns.Count);
            Assert.AreEqual(4, rawTurns[0].GetValue("Attempts", -1).AsInt32);
            Assert.AreEqual(3, rawTurns[0].GetValue("Completions", -1).AsInt32);
            Assert.AreEqual(8, rawTurns[0].GetValue("Turns").AsBsonArray.Count);

            db.SaveRawStudentLessonAct(@"{
                'UserID': 'memphis-semiotics-fozzy-bear',
                'LessonID': 'lesson',
                'TurnID': 12,
                'Transitions': [{'Actions': [42]}]
            }");
            rawTurns = db.FindTurnsRaw(null, null);
            Assert.AreEqual(1, rawTurns.Count);
            Assert.AreEqual(4, rawTurns[0].GetValue("Attempts", -1).AsInt32);
            Assert.AreEqual(3, rawTurns[0].GetValue("Completions", -1).AsInt32);
            Assert.AreEqual(9, rawTurns[0].GetValue("Turns").AsBsonArray.Count);

            db.SaveRawStudentLessonAct(@"{
                'UserID': 'memphis-semiotics-fozzy-bear',
                'LessonID': 'lesson',
                'TurnID': 13,
                'Transitions': [{'Actions': [{'Agent':'system', 'Act':'end'}]}]
            }");
            rawTurns = db.FindTurnsRaw(null, null);
            Assert.AreEqual(1, rawTurns.Count);
            Assert.AreEqual(4, rawTurns[0].GetValue("Attempts", -1).AsInt32);
            Assert.AreEqual(4, rawTurns[0].GetValue("Completions", -1).AsInt32);
            Assert.AreEqual(10, rawTurns[0].GetValue("Turns").AsBsonArray.Count);

            //Make sure fozzy bear is in memphis
            bool foundFozzy = false;
            foreach (var student in db.FindStudentsByLocation("memphis")) {
                if (student.UserID == "fozzy-bear") {
                    foundFozzy = true;
                    break;
                }
            }
            Assert.IsTrue(foundFozzy);
        }