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));
        }
예제 #2
0
        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;
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
        }
예제 #5
0
        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);
        }
예제 #6
0
        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);
        }
예제 #7
0
        // 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);
            }
        }
예제 #8
0
        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));
        }
예제 #9
0
        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);
        }
예제 #10
0
        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]));
            }
        }
예제 #11
0
        public void TestIndexes()
        {
            var db = new CSALDatabase(DB_URL);

            db.InsureIndexes();
            Assert.IsTrue(true); //If insuring indexes didn't fail, we're OK :)
        }
예제 #12
0
        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));
        }
예제 #13
0
        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);
        }
예제 #14
0
        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);
        }
예제 #16
0
        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);
        }
예제 #18
0
        public void TestBadSingleLessonSaveNoID()
        {
            var db = new CSALDatabase(DB_URL);

            db.SaveLesson(new CSALMongo.Model.Lesson {
                LessonID = "", TurnCount = 6
            });
        }
예제 #19
0
        public void TestBadSingleStudentSaveNoID()
        {
            var db = new CSALDatabase(DB_URL);

            db.SaveStudent(new CSALMongo.Model.Student {
                UserID = ""
            });
        }
예제 #20
0
        public void TestBadSingleClassSaveNoID()
        {
            var db = new CSALDatabase(DB_URL);

            db.SaveClass(new CSALMongo.Model.Class {
                ClassID = ""
            });
        }
예제 #21
0
        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);
        }
예제 #22
0
        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));
        }
예제 #23
0
        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));
        }
예제 #24
0
        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);
        }
예제 #25
0
        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);
        }
예제 #26
0
        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));
        }
예제 #27
0
        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));
        }
예제 #28
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);
        }
예제 #29
0
        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));
        }
예제 #30
0
        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));
        }
예제 #31
0
        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);
        }
예제 #32
0
        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);
        }
예제 #33
0
        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);
        }
예제 #34
0
        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 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);
        }
예제 #36
0
        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 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);
        }
예제 #38
0
        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));
        }
예제 #39
0
        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);
        }
예제 #40
0
        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);
        }
예제 #41
0
        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 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 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 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]));
            }
        }
예제 #46
0
        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 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 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 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 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 TestIndexes()
 {
     var db = new CSALDatabase(DB_URL);
     db.InsureIndexes();
     Assert.IsTrue(true); //If insuring indexes didn't fail, we're OK :)
 }
        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);
        }
예제 #57
0
        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 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 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));
        }