public void TestLessonModel() { var db = new CSALDatabase(DB_URL); db.SaveRawStudentLessonAct(Properties.Resources.SampleRawAct); var origLesson = db.FindLessons()[0]; var lesson1 = db.FindLessons()[0]; var lesson2 = db.FindLessons()[0]; Assert.AreEqual(SAMPLE_RAW_LESSON.ToLowerInvariant(), lesson1.Id); Assert.AreEqual(SAMPLE_RAW_LESSON.ToLowerInvariant(), lesson1.LessonID); Assert.AreEqual(SAMPLE_RAW_LESSON.ToLowerInvariant(), lesson2.Id); Assert.AreEqual(SAMPLE_RAW_LESSON.ToLowerInvariant(), lesson2.LessonID); //Need to verify that lesson ID and _id are tied together lesson1.Id = "changed2"; lesson2.LessonID = "changed2"; Assert.AreEqual("changed2", lesson1.Id); Assert.AreEqual("changed2", lesson1.LessonID); Assert.AreEqual("changed2", lesson2.Id); Assert.AreEqual("changed2", lesson2.LessonID); //Also need to check that we didn't somehow break JSON compat lesson2.Id = SAMPLE_RAW_LESSON; lesson1.LessonID = SAMPLE_RAW_LESSON; Assert.AreEqual(GetJSON(origLesson), GetJSON(lesson1)); Assert.AreEqual(GetJSON(lesson1), GetJSON(lesson2)); }
public CSALDatabase DBConn() { //Note that both our static checks need to do a check-lock-check //to be safe var conn = new CSALDatabase(AppSettings["MongoURL"]); //Check that conventions are set (one-time) if (!CONV_CHECK) { lock (convLock) { if (!CONV_CHECK) { //note that we set the check *after* to make sure //everyone blocks until it's done conn.HandleConventions(); CONV_CHECK = true; } } } //Check that indexes have been handled (one-time) if (!INDEX_CHECK) { lock (indexLock) { //note that we set INDEX_CHECK *before* doing an insure so //other callers don't block while indexes are getting created if (!INDEX_CHECK) { INDEX_CHECK = true; conn.InsureIndexes(); } } } //Finally done return conn; }
public void GetById() { var controller = new ClassesController(); controller.AppSettings = this.AppSettings; //Initially no classes Assert.IsNull(controller.Get("not-there")); //Now add some classes var db = new CSALDatabase(DB_URL); db.SaveClass(new Class { ClassID = "c1", Location = "l1", TeacherName = "t1", Students = new List <string> { "sa", "sb" } }); db.SaveClass(new Class { ClassID = "c2", Location = "l2", TeacherName = "t2", Students = new List <string> { "sc", "sd" } }); //Still missing Assert.IsNull(controller.Get("not-there")); //Find what we inserted var oneClass = controller.Get("c1"); Assert.AreEqual("c1", oneClass.Id); Assert.AreEqual("l1", oneClass.Location); }
public void Get() { var controller = new LessonsController(); controller.AppSettings = this.AppSettings; //Initially no lessons var noLessons = controller.Get(); Assert.AreEqual(0, noLessons.Count()); //Now add some lessons var db = new CSALDatabase(DB_URL); db.SaveLesson(new Lesson { LessonID = "l1", TurnCount = 1 }); db.SaveLesson(new Lesson { LessonID = "l2", TurnCount = 2 }); var twoLessons = controller.Get().OrderBy(c => c.Id).ToList(); Assert.AreEqual(2, twoLessons.Count); Assert.AreEqual("l1", twoLessons[0].Id); Assert.AreEqual("l2", twoLessons[1].Id); }
public void Get() { var controller = new StudentsController(); controller.AppSettings = this.AppSettings; //Initially no lessons var noStudents = controller.Get(); Assert.AreEqual(0, noStudents.Count()); //Now add some lessons var db = new CSALDatabase(DB_URL); db.SaveStudent(new Student { UserID = "u1" }); db.SaveStudent(new Student { UserID = "u2" }); var twoStudents = controller.Get().OrderBy(c => c.Id).ToList(); Assert.AreEqual(2, twoStudents.Count); Assert.AreEqual("u1", twoStudents[0].Id); Assert.AreEqual("u2", twoStudents[1].Id); }
public void GetById() { var controller = new StudentsController(); controller.AppSettings = this.AppSettings; //Initially no classes Assert.IsNull(controller.Get("not-there")); //Now add some classes var db = new CSALDatabase(DB_URL); db.SaveStudent(new Student { UserID = "u1" }); db.SaveStudent(new Student { UserID = "u2" }); //Still missing Assert.IsNull(controller.Get("not-there")); //Find what we inserted var oneStudent = controller.Get("u2"); Assert.AreEqual("u2", oneStudent.Id); }
// lesson 8 public List <int> getPerLesson8(String studentName, String lessonID) { var db = new CSALDatabase(DB_URL); var oneTurn = db.FindTurns(lessonID, studentName); int questionID = 0, lastTurnID = 0, score = 0; List <int> quesNum = new List <int>(); if (oneTurn == null || oneTurn.Count < 1 || oneTurn[0].Turns.Count < 1) { return(null); } else { foreach (var turn in oneTurn[0].Turns) { // student tried more than 1, reset everything if (turn.TurnID < lastTurnID) { break; } else { foreach (var transition in turn.Transitions) { foreach (var action in transition.Actions) { if (action.Act == "AddUserScore" && action.Data.Contains("1")) { questionID++; score += 1; break; } else if (action.Act == "GetMediaFeedback" && action.Data.Contains("SAGoodAnswer")) { questionID++; break; } } } lastTurnID = turn.TurnID; } } if (quesNum == null || quesNum.Count < 1) { quesNum.Add(0); quesNum.Add(questionID); quesNum.Add(score); } if (quesNum[0] == 1) { quesNum.Add(questionID); quesNum.Add(score); } return(quesNum); } }
public void Get() { var controller = new ClassesController(); controller.AppSettings = this.AppSettings; //Initially no classes var noClasses = controller.Get(); Assert.AreEqual(0, noClasses.Count()); //Now add some classes var db = new CSALDatabase(DB_URL); db.SaveClass(new Class { ClassID = "c1", Location = "l1", TeacherName = "t1", Students = new List <string> { "sa", "sb" } }); db.SaveClass(new Class { ClassID = "c2", Location = "l2", TeacherName = "t2", Students = new List <string> { "sc", "sd" } }); var twoClasses = controller.Get().OrderBy(c => c.Id).ToList(); Assert.AreEqual(2, twoClasses.Count); Assert.AreEqual("c1", twoClasses[0].Id); Assert.AreEqual("c2", twoClasses[1].Id); }
public void TestMultipleClasses() { var db = new CSALDatabase(DB_URL); Assert.AreEqual(0, db.FindClasses().Count); //NOTE - three classes in key order var madeClasses = new List <CSALMongo.Model.Class>(); foreach (var key in new string[] { "key1", "key2", "key3" }) { madeClasses.Add(new CSALMongo.Model.Class { ClassID = key, Location = "loc" + key, TeacherName = "teach" + key, Students = new List <String> { "a" + key, "b" + key } }); db.SaveClass(madeClasses.Last()); } Assert.AreEqual(3, madeClasses.Count); var foundClasses = db.FindClasses().OrderBy(e => e.Id).ToList(); Assert.AreEqual(madeClasses.Count, foundClasses.Count); //Note our hard-coded list size - just making sure we haven't done //anything hinky since we created the list for (int i = 0; i < 3; ++i) { Assert.AreEqual(GetJSON(madeClasses[i]), GetJSON(foundClasses[i])); } }
public void TestIndexes() { var db = new CSALDatabase(DB_URL); db.InsureIndexes(); Assert.IsTrue(true); //If insuring indexes didn't fail, we're OK :) }
public void TestStudentModel() { var db = new CSALDatabase(DB_URL); db.SaveRawStudentLessonAct(Properties.Resources.SampleRawAct); var origStudent = db.FindStudents()[0]; var student1 = db.FindStudents()[0]; var student2 = db.FindStudents()[0]; Assert.AreEqual(SAMPLE_RAW_USER.ToLowerInvariant(), student1.Id); Assert.AreEqual(SAMPLE_RAW_USER.ToLowerInvariant(), student1.UserID); Assert.AreEqual(SAMPLE_RAW_USER.ToLowerInvariant(), student2.Id); Assert.AreEqual(SAMPLE_RAW_USER.ToLowerInvariant(), student2.UserID); //Need to verify that lesson ID and _id are tied together student1.Id = "changed2"; student2.UserID = "changed2"; Assert.AreEqual("changed2", student1.Id); Assert.AreEqual("changed2", student1.UserID); Assert.AreEqual("changed2", student2.Id); Assert.AreEqual("changed2", student2.UserID); //Also need to check that we didn't somehow break JSON compat student2.Id = SAMPLE_RAW_USER; student1.UserID = SAMPLE_RAW_USER; Assert.AreEqual(GetJSON(origStudent), GetJSON(student1)); Assert.AreEqual(GetJSON(student1), GetJSON(student2)); }
public void TestSaveReadingTargetExisting() { var db = new CSALDatabase(DB_URL); db.SaveRawStudentLessonAct(Properties.Resources.SampleRawAct); var students = db.FindStudents(); Assert.AreEqual(1, students.Count); Assert.IsNotNull(students[0].ReadingURLs); DateTime preWrite = DateTime.Now.AddSeconds(-1); db.SaveStudentReadingTarget("{UserID:'" + SAMPLE_RAW_USER + "', TargetURL:'http://test/a'}"); students = db.FindStudents(); Assert.AreEqual(1, students.Count); var student = students[0]; Assert.AreEqual(1, student.TurnCount); Assert.AreEqual(SAMPLE_RAW_USER.ToLowerInvariant(), student.UserID); Assert.AreEqual(1, student.ReadingURLs.Count); var visit = student.ReadingURLs[0]; Assert.AreEqual(visit.TargetURL, "http://test/a"); Assert.IsTrue(preWrite < visit.VisitTime); }
public void TestMultiLessonLookup() { var db = new CSALDatabase(DB_URL); Assert.IsNull(db.FindLesson("key1")); Assert.IsNull(db.FindLesson("key2")); Assert.AreEqual(0, db.FindLessonNames().Count); var lesson1 = new CSALMongo.Model.Lesson { LessonID = "key1", TurnCount = 42, Students = new List <String> { "sa", "sb" } }; db.SaveLesson(lesson1); var dict = db.FindLessonNames(); Assert.AreEqual(1, dict.Count); Assert.AreEqual("key1", dict["key1"]); var lesson2 = new CSALMongo.Model.Lesson { LessonID = "key2", ShortName = "Name2", TurnCount = 42, Students = new List <String> { "sa", "sb" } }; db.SaveLesson(lesson2); dict = db.FindLessonNames(); Assert.AreEqual(2, dict.Count); Assert.AreEqual("key1", dict["key1"]); Assert.AreEqual("Name2", dict["key2"]); }
public void Get() { var controller = new StudentsAtLocationController(); controller.AppSettings = this.AppSettings; //Initially no lessons Assert.AreEqual(0, controller.Get(null).Count); Assert.AreEqual(0, controller.Get("").Count); Assert.AreEqual(0, controller.Get("nowhere").Count); //Now add some students in a class var db = new CSALDatabase(DB_URL); db.SaveStudent(new Student { UserID = "u1" }); db.SaveStudent(new Student { UserID = "u2" }); db.SaveClass(new Class { ClassID = "c1", Location = "somewhere", Students = new List <string> { "u1", "u2" } }); Assert.AreEqual(0, controller.Get("nowhere").Count); var twoStudents = controller.Get("somewhere").OrderBy(c => c.Id).ToList(); Assert.AreEqual(2, twoStudents.Count); Assert.AreEqual("u1", twoStudents[0].Id); Assert.AreEqual("u2", twoStudents[1].Id); }
public void GetById() { var controller = new LessonsController(); controller.AppSettings = this.AppSettings; //Initially no classes Assert.IsNull(controller.Get("not-there")); //Now add some classes var db = new CSALDatabase(DB_URL); db.SaveLesson(new Lesson { LessonID = "l1", TurnCount = 1 }); db.SaveLesson(new Lesson { LessonID = "l2", TurnCount = 2 }); //Still missing Assert.IsNull(controller.Get("not-there")); //Find what we inserted var oneLesson = controller.Get("l2"); Assert.AreEqual("l2", oneLesson.Id); Assert.AreEqual(2, oneLesson.TurnCount); }
public List <double> getPerLesson(String studentName, String lessonID) { var db = new CSALDatabase(DB_URL); int lastTurnID = 99, attempCount = 0; var oneTurn = db.FindTurns(lessonID, studentName); List <double> attempTime = new List <double>(); if (oneTurn == null || oneTurn.Count < 1 || oneTurn[0].Turns.Count < 1) { return(null); } else { // calculate total time of every Attempt // list starts at 0 foreach (var turn in oneTurn[0].Turns) { if (turn.TurnID < lastTurnID) { attempCount++; double turnDura = (int)turn.Duration; turnDura = turnDura / 1000; attempTime.Add(turnDura); } else { double turnDura = (int)turn.Duration; attempTime[attempCount - 1] += turnDura / 1000; } lastTurnID = turn.TurnID; } } return(attempTime); }
public void TestBadSingleLessonSaveNoID() { var db = new CSALDatabase(DB_URL); db.SaveLesson(new CSALMongo.Model.Lesson { LessonID = "", TurnCount = 6 }); }
public void TestBadSingleStudentSaveNoID() { var db = new CSALDatabase(DB_URL); db.SaveStudent(new CSALMongo.Model.Student { UserID = "" }); }
public void TestBadSingleClassSaveNoID() { var db = new CSALDatabase(DB_URL); db.SaveClass(new CSALMongo.Model.Class { ClassID = "" }); }
public void TestEmpties() { var db = new CSALDatabase(DB_URL); Assert.AreEqual(0, db.FindLessons().Count); Assert.AreEqual(0, db.FindStudents().Count); Assert.AreEqual(0, db.FindTurns(null, null).Count); Assert.AreEqual(0, db.FindTurns("Wakka", "Wakka").Count); }
public void LessonDetails() { ActionResult act = controller.LessonDetails("nolessons"); Assert.AreEqual(act.GetType(), typeof(HttpNotFoundResult)); var db = new CSALDatabase(DB_URL); db.SaveLesson(new Lesson { LessonID = "somelesson" }); act = controller.LessonDetails("somelesson"); Assert.AreNotEqual(act.GetType(), typeof(HttpNotFoundResult)); }
public void ClassDetails() { ActionResult act = controller.ClassDetails("noclass"); Assert.AreEqual(act.GetType(), typeof(HttpNotFoundResult)); var db = new CSALDatabase(DB_URL); db.SaveClass(new Class { ClassID = "someclass" }); act = controller.ClassDetails("someclass"); Assert.AreNotEqual(act.GetType(), typeof(HttpNotFoundResult)); }
public void TestStudentByLocation() { var db = new CSALDatabase(DB_URL); var students = db.FindStudentsByLocation("no-where"); Assert.AreEqual(0, students.Count); var evenStudents = new List <string>(); var oddStudents = new List <string>(); for (int i = 1; i < 2048; ++i) { string key = "student" + i.ToString(); if (i % 2 == 0) { evenStudents.Add(key); } else { oddStudents.Add(key); } db.SaveStudent(new CSALMongo.Model.Student { UserID = key, FirstName = "Test", LastName = key, TurnCount = 0 }); } db.SaveClass(new CSALMongo.Model.Class { ClassID = "a", Students = new List <string> { }, Location = "no-where" }); db.SaveClass(new CSALMongo.Model.Class { ClassID = "b", Students = oddStudents, Location = "odd" }); db.SaveClass(new CSALMongo.Model.Class { ClassID = "c", Students = evenStudents, Location = "even" }); students = db.FindStudentsByLocation("no-where"); Assert.AreEqual(0, students.Count); students = db.FindStudentsByLocation("odd"); var foundKeys = (from s in students.AsQueryable() select s.Id).ToList <string>(); CollectionAssert.AreEquivalent(oddStudents, foundKeys); students = db.FindStudentsByLocation("even"); foundKeys = (from s in students.AsQueryable() select s.Id).ToList <string>(); CollectionAssert.AreEquivalent(evenStudents, foundKeys); }
public string getPerLesson(List <string> studentIds, string lessonID) { string records = ""; var min_dura = new TimeSpan(2, 0, 0); var max_dura = new TimeSpan(0, 0, 0); string date = ""; var db = new CSALDatabase(DB_URL); foreach (string studentId in studentIds) { var oneTurn = db.FindTurns(lessonID, studentId); // student didn't do the lesson if (oneTurn == null || oneTurn.Count < 1 || oneTurn[0].Turns.Count < 1) { continue; } else { var startDt = new DateTime(); foreach (var turn in oneTurn[0].Turns) { if (turn.TurnID == 1) { startDt = new DateTime(2010, 1, 1, 0, 0, 0, 0).AddSeconds(Math.Round(turn.DBTimestamp / 1000)).ToLocalTime(); } foreach (var tran in turn.Transitions) { if (tran.RuleID == "End") { var Enddt = new DateTime(2010, 1, 1, 0, 0, 0, 0).AddSeconds(Math.Round(turn.DBTimestamp / 1000)).ToLocalTime(); TimeSpan dura = Enddt.Subtract(startDt); if (dura < min_dura) { min_dura = dura; date = startDt.Date.ToString(); } if (dura > max_dura) { max_dura = dura; } } } } } } records = date + "\t" + min_dura.TotalMinutes.ToString() + "\t" + max_dura.TotalMinutes.ToString(); return(records); }
public void StudentDetails() { ActionResult act = controller.StudentDetails("nostudent"); Assert.AreEqual(act.GetType(), typeof(HttpNotFoundResult)); var db = new CSALDatabase(DB_URL); db.SaveStudent(new Student { UserID = "somestudent" }); act = controller.StudentDetails("somestudent"); Assert.AreNotEqual(act.GetType(), typeof(HttpNotFoundResult)); }
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 TestSingleStudent() { var db = new CSALDatabase(DB_URL); Assert.IsNull(db.FindStudent("")); Assert.IsNull(db.FindStudent("key")); var student = new CSALMongo.Model.Student { UserID = "key", TurnCount = 42 }; db.SaveStudent(student); var student2 = db.FindStudent("key"); Assert.IsNotNull(student2); Assert.AreEqual(GetJSON(student), GetJSON(student2)); }
public void Post() { var controller = new TurnController(); controller.AppSettings = this.AppSettings; const int ITS = 128; for (int i = 0; i < ITS; ++i) { controller.Post(GetSampleRawAct()); } var db = new CSALDatabase(DB_URL); var lessons = db.FindLessons(); Assert.AreEqual(1, lessons.Count); Assert.AreEqual(ITS, lessons[0].TurnCount); Assert.AreEqual(SAMPLE_RAW_LESSON, lessons[0].LessonID); CollectionAssert.AreEquivalent(new string[] { SAMPLE_RAW_USER }, lessons[0].Students); var students = db.FindStudents(); Assert.AreEqual(1, students.Count); Assert.AreEqual(ITS, students[0].TurnCount); Assert.AreEqual(SAMPLE_RAW_USER.ToLowerInvariant(), students[0].UserID.ToLowerInvariant()); //Raw has "simple" user ID, so no class/location information var classes = db.FindClasses(); Assert.AreEqual(0, classes.Count); var turns = db.FindTurns(null, null); Assert.AreEqual(1, turns.Count); Assert.AreEqual(1, db.FindTurns(SAMPLE_RAW_LESSON, null).Count); Assert.AreEqual(1, db.FindTurns(null, SAMPLE_RAW_USER).Count); Assert.AreEqual(1, db.FindTurns(SAMPLE_RAW_LESSON, SAMPLE_RAW_USER).Count); Assert.AreEqual(SAMPLE_RAW_USER.ToLowerInvariant(), turns[0].UserID.ToLowerInvariant()); Assert.AreEqual(SAMPLE_RAW_LESSON.ToLowerInvariant(), turns[0].LessonID.ToLowerInvariant()); Assert.AreEqual(ITS, turns[0].Turns.Count); }
public void TestRawActSave() { var db = new CSALDatabase(DB_URL); const int ITS = 128; for (int i = 0; i < ITS; ++i) { db.SaveRawStudentLessonAct(Properties.Resources.SampleRawAct); } var lessons = db.FindLessons(); Assert.AreEqual(1, lessons.Count); Assert.AreEqual(ITS, lessons[0].TurnCount); Assert.AreEqual(SAMPLE_RAW_LESSON.ToLowerInvariant(), lessons[0].LessonID); CollectionAssert.AreEquivalent(new string[] { SAMPLE_RAW_USER.ToLowerInvariant() }, lessons[0].Students); var students = db.FindStudents(); Assert.AreEqual(1, students.Count); Assert.AreEqual(ITS, students[0].TurnCount); Assert.AreEqual(SAMPLE_RAW_USER.ToLowerInvariant(), students[0].UserID); //Raw has "simple" user ID, so no class/location information var classes = db.FindClasses(); Assert.AreEqual(0, classes.Count); var turns = db.FindTurns(null, null); Assert.AreEqual(1, turns.Count); Assert.AreEqual(1, db.FindTurns(SAMPLE_RAW_LESSON, null).Count); Assert.AreEqual(1, db.FindTurns(null, SAMPLE_RAW_USER).Count); Assert.AreEqual(1, db.FindTurns(SAMPLE_RAW_LESSON, SAMPLE_RAW_USER).Count); Assert.AreEqual(SAMPLE_RAW_USER, turns[0].UserID); Assert.AreEqual(SAMPLE_RAW_LESSON, turns[0].LessonID); Assert.AreEqual(ITS, turns[0].Turns.Count); //The sample act has no completion action and is turn ID 4 - so no attempts and no completions Assert.AreEqual(0, turns[0].Attempts); Assert.AreEqual(0, turns[0].Completions); }
public void TestMinimalRawAct() { //Note our use of the "extended" user id var db = new CSALDatabase(DB_URL); const int TURN_ID_START = CSALMongo.Model.StudentLessonActs.TURN_ID_START; db.SaveRawStudentLessonAct("{'LessonID': 'lesson', 'UserID': 'memphis-semiotics-fozzy-bear', 'TurnID': " + TURN_ID_START.ToString() + "}"); var lessons = db.FindLessons(); Assert.AreEqual(1, lessons.Count); Assert.AreEqual(1, lessons[0].TurnCount); Assert.AreEqual("lesson", lessons[0].LessonID); CollectionAssert.AreEquivalent(new string[] { "fozzy-bear" }, lessons[0].Students); var students = db.FindStudents(); Assert.AreEqual(1, students.Count); Assert.AreEqual(1, students[0].TurnCount); Assert.AreEqual("fozzy-bear", students[0].UserID); var classes = db.FindClasses(); Assert.AreEqual(1, classes.Count); Assert.AreEqual("semiotics", classes[0].ClassID); Assert.AreEqual("memphis", classes[0].Location); CollectionAssert.AreEquivalent(new string[] { "fozzy-bear" }, classes[0].Students); CollectionAssert.AreEquivalent(new string[] { "lesson" }, classes[0].Lessons); var turns = db.FindTurns(null, null); Assert.AreEqual(1, turns.Count); Assert.AreEqual(1, db.FindTurns("lesson", null).Count); Assert.AreEqual(1, db.FindTurns(null, "fozzy-bear").Count); Assert.AreEqual(1, db.FindTurns("lesson", "fozzy-bear").Count); Assert.AreEqual("fozzy-bear", turns[0].UserID); Assert.AreEqual("lesson", turns[0].LessonID); Assert.AreEqual(1, turns[0].Turns.Count); //Turn ID of 0 - we should show one attempt and 0 completions Assert.AreEqual(1, turns[0].Attempts); Assert.AreEqual(0, turns[0].Completions); }
public void Get() { var controller = new ClassesController(); controller.AppSettings = this.AppSettings; //Initially no classes var noClasses = controller.Get(); Assert.AreEqual(0, noClasses.Count()); //Now add some classes var db = new CSALDatabase(DB_URL); db.SaveClass(new Class { ClassID = "c1", Location = "l1", TeacherName = "t1", Students = new List<string> { "sa", "sb" } }); db.SaveClass(new Class { ClassID = "c2", Location = "l2", TeacherName = "t2", Students = new List<string> { "sc", "sd" } }); var twoClasses = controller.Get().OrderBy(c => c.Id).ToList(); Assert.AreEqual(2, twoClasses.Count); Assert.AreEqual("c1", twoClasses[0].Id); Assert.AreEqual("c2", twoClasses[1].Id); }
public void TestSingleLesson() { var db = new CSALDatabase(DB_URL); Assert.IsNull(db.FindLesson("")); Assert.IsNull(db.FindLesson("key")); var lesson = new CSALMongo.Model.Lesson { LessonID = "key", TurnCount = 42, Students = new List <String> { "sa", "sb" } }; db.SaveLesson(lesson); var lesson2 = db.FindLesson("key"); Assert.IsNotNull(lesson2); Assert.AreEqual(GetJSON(lesson), GetJSON(lesson2)); }
public void GetById() { var controller = new ClassesController(); controller.AppSettings = this.AppSettings; //Initially no classes Assert.IsNull(controller.Get("not-there")); //Now add some classes var db = new CSALDatabase(DB_URL); db.SaveClass(new Class { ClassID = "c1", Location = "l1", TeacherName = "t1", Students = new List<string> { "sa", "sb" } }); db.SaveClass(new Class { ClassID = "c2", Location = "l2", TeacherName = "t2", Students = new List<string> { "sc", "sd" } }); //Still missing Assert.IsNull(controller.Get("not-there")); //Find what we inserted var oneClass = controller.Get("c1"); Assert.AreEqual("c1", oneClass.Id); Assert.AreEqual("l1", oneClass.Location); }
public void Get() { var controller = new StudentsAtLocationController(); controller.AppSettings = this.AppSettings; //Initially no lessons Assert.AreEqual(0, controller.Get(null).Count); Assert.AreEqual(0, controller.Get("").Count); Assert.AreEqual(0, controller.Get("nowhere").Count); //Now add some students in a class var db = new CSALDatabase(DB_URL); db.SaveStudent(new Student { UserID = "u1" }); db.SaveStudent(new Student { UserID = "u2" }); db.SaveClass(new Class { ClassID = "c1", Location = "somewhere", Students = new List<string> { "u1", "u2" } }); Assert.AreEqual(0, controller.Get("nowhere").Count); var twoStudents = controller.Get("somewhere").OrderBy(c => c.Id).ToList(); Assert.AreEqual(2, twoStudents.Count); Assert.AreEqual("u1", twoStudents[0].Id); Assert.AreEqual("u2", twoStudents[1].Id); }
public void TestMultiLessonLookup() { var db = new CSALDatabase(DB_URL); Assert.IsNull(db.FindLesson("key1")); Assert.IsNull(db.FindLesson("key2")); Assert.AreEqual(0, db.FindLessonNames().Count); var lesson1 = new CSALMongo.Model.Lesson { LessonID = "key1", TurnCount = 42, Students = new List<String> { "sa", "sb" } }; db.SaveLesson(lesson1); var dict = db.FindLessonNames(); Assert.AreEqual(1, dict.Count); Assert.AreEqual("key1", dict["key1"]); var lesson2 = new CSALMongo.Model.Lesson { LessonID = "key2", ShortName = "Name2", TurnCount = 42, Students = new List<String> { "sa", "sb" } }; db.SaveLesson(lesson2); dict = db.FindLessonNames(); Assert.AreEqual(2, dict.Count); Assert.AreEqual("key1", dict["key1"]); Assert.AreEqual("Name2", dict["key2"]); }
public void TestMultipleClasses() { var db = new CSALDatabase(DB_URL); Assert.AreEqual(0, db.FindClasses().Count); //NOTE - three classes in key order var madeClasses = new List<CSALMongo.Model.Class>(); foreach(var key in new string[] {"key1", "key2", "key3"}) { madeClasses.Add(new CSALMongo.Model.Class { ClassID = key, Location = "loc" + key, TeacherName = "teach" + key, Students = new List<String> { "a"+key, "b"+key } }); db.SaveClass(madeClasses.Last()); } Assert.AreEqual(3, madeClasses.Count); var foundClasses = db.FindClasses().OrderBy(e => e.Id).ToList(); Assert.AreEqual(madeClasses.Count, foundClasses.Count); //Note our hard-coded list size - just making sure we haven't done //anything hinky since we created the list for (int i = 0; i < 3; ++i) { Assert.AreEqual(GetJSON(madeClasses[i]), GetJSON(foundClasses[i])); } }
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 TestStudentByLocation() { var db = new CSALDatabase(DB_URL); var students = db.FindStudentsByLocation("no-where"); Assert.AreEqual(0, students.Count); var evenStudents = new List<string>(); var oddStudents = new List<string>(); for (int i = 1; i < 2048; ++i) { string key = "student" + i.ToString(); if (i % 2 == 0) evenStudents.Add(key); else oddStudents.Add(key); db.SaveStudent(new CSALMongo.Model.Student { UserID = key, FirstName = "Test", LastName = key, TurnCount = 0 }); } db.SaveClass(new CSALMongo.Model.Class { ClassID = "a", Students = new List<string> { }, Location = "no-where" }); db.SaveClass(new CSALMongo.Model.Class { ClassID = "b", Students = oddStudents, Location = "odd" }); db.SaveClass(new CSALMongo.Model.Class { ClassID = "c", Students = evenStudents, Location = "even" }); students = db.FindStudentsByLocation("no-where"); Assert.AreEqual(0, students.Count); students = db.FindStudentsByLocation("odd"); var foundKeys = (from s in students.AsQueryable() select s.Id).ToList<string>(); CollectionAssert.AreEquivalent(oddStudents, foundKeys); students = db.FindStudentsByLocation("even"); foundKeys = (from s in students.AsQueryable() select s.Id).ToList<string>(); CollectionAssert.AreEquivalent(evenStudents, foundKeys); }
public void TestSingleClass() { var db = new CSALDatabase(DB_URL); Assert.IsNull(db.FindClass("")); Assert.IsNull(db.FindClass("key")); var clazz = new CSALMongo.Model.Class { ClassID = "key", Location = "Somewhere", TeacherName = "Teach", Students = new List<String> { "a", "b" } }; db.SaveClass(clazz); var clazz2 = db.FindClass("key"); Assert.IsNotNull(clazz2); Assert.AreEqual(GetJSON(clazz), GetJSON(clazz2)); }
public void TestSaveReadingTargetMissing() { var db = new CSALDatabase(DB_URL); var students = db.FindStudents(); Assert.AreEqual(0, students.Count); DateTime preWrite = DateTime.Now.AddSeconds(-1); db.SaveStudentReadingTarget("{UserID:'" + SAMPLE_RAW_USER + "', TargetURL:'http://test/a'}"); students = db.FindStudents(); Assert.AreEqual(1, students.Count); var student = students[0]; Assert.AreEqual(0, student.TurnCount); Assert.AreEqual(SAMPLE_RAW_USER.ToLowerInvariant(), student.UserID); Assert.AreEqual(1, student.ReadingURLs.Count); var visit = student.ReadingURLs[0]; Assert.AreEqual(visit.TargetURL, "http://test/a"); Assert.IsTrue(preWrite < visit.VisitTime); db.SaveStudentReadingTarget("{UserID:'" + SAMPLE_RAW_USER + "', TargetURL:'http://test/b'}"); students = db.FindStudents(); Assert.AreEqual(1, students.Count); student = students[0]; Assert.AreEqual(0, student.TurnCount); Assert.AreEqual(SAMPLE_RAW_USER.ToLowerInvariant(), student.UserID); Assert.AreEqual(2, student.ReadingURLs.Count); Assert.AreEqual(student.ReadingURLs[0].TargetURL, "http://test/a"); Assert.AreEqual(student.ReadingURLs[1].TargetURL, "http://test/b"); Assert.IsTrue(preWrite < student.ReadingURLs[0].VisitTime); Assert.IsTrue(preWrite < student.ReadingURLs[1].VisitTime); }
public void TestBadTurnMissingLessonID() { var db = new CSALDatabase(DB_URL); db.SaveRawStudentLessonAct("{'LessonID': '', 'UserID': 'user'}"); }
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 TestBadStartupNull() { var db = new CSALDatabase(null); }
public void TestSingleLesson() { var db = new CSALDatabase(DB_URL); Assert.IsNull(db.FindLesson("")); Assert.IsNull(db.FindLesson("key")); var lesson = new CSALMongo.Model.Lesson { LessonID = "key", TurnCount = 42, Students = new List<String> { "sa", "sb" } }; db.SaveLesson(lesson); var lesson2 = db.FindLesson("key"); Assert.IsNotNull(lesson2); Assert.AreEqual(GetJSON(lesson), GetJSON(lesson2)); }