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); }
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 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); }