public void Save_AddNew_Active_LecturerNotInList_Success()
        {
            //Arrange
            ClearDatabase();
            CreateMySessionTestData(_lecturer);
            VM                = new MySessionsLecturerPageVM(_lecturer, dbConName);
            VM.FormContext    = FormContext.Create;
            VM.SubgridContext = SubgridContext.ActiveSessions;

            ObservableCollection <Lecturer> LecLst = new ObservableCollection <Lecturer>();

            LecLst.Add(VM.AvailableLecturers.Where(l => l.Id == 555).FirstOrDefault());
            Group    group     = VM.Groups.Where(g => g.Id == 1).FirstOrDefault();
            DateTime startDate = DateTime.Now.Date;
            DateTime endDate   = DateTime.Now.Date;
            DateTime createdOn = DateTime.Now.Date.AddDays(-3);

            VM.SelectedSession = new Session("Test Session", startDate, endDate, LecLst, group, null, createdOn, _lecturer.Id);

            //Act
            bool result = VM.Save();
            //Assert
            int expectedSessions  = 1;
            int expectedLecturers = 2;
            int expectedGroups    = 3;

            Assert.IsTrue(result, $"Save Returned False: Message: {VM.FeedbackMessage}");
            Assert.AreEqual(FormContext.Create, VM.FormContext, "FormContext in wrong initial mode");
            Assert.AreEqual(Role.Lecturer, VM.UserRole, "UserRole in wrong initial mode for lecturer");
            Assert.AreEqual(expectedSessions, VM.MySessions.Count, $"VM Sessions Count Wrong.");
            Assert.AreEqual(expectedLecturers, VM.AvailableLecturers.Count, "VM Lecturer Count Wrong");
            Assert.AreEqual(expectedGroups, VM.Groups.Count, "VM Groups Count Wrong");//one null and the test one(s)
        }
        public void Delete_Cancel_Fail()
        {
            //Arrange
            //nothing changes since no delete
            int expectedQuestionCount = 6;
            int expectedAnswerCount   = 4;
            int expectedStudentCount  = 3;
            int expectedGroupCount    = 2;
            int expectedLectuerCount  = 2;
            int expectedSessionCount  = 5;

            ClearDatabase();
            CreateMySessionTestData(_lecturer);
            VM = new MySessionsLecturerPageVM(_lecturer, dbConName);
            VM.SubgridContext = SubgridContext.FutureSessions;// were going to work with the future sessions
            VM.GetAllMyFutureSessions();
            VM.SelectedSession = VM.MySessions.Where(s => s.Name.Equals("Delete Sesh")).FirstOrDefault();
            //delete message box CANCELED - NO DELETE
            VM.IsConfirmationAccepted = false;
            //Act
            var result = VM.Delete(VM.SelectedSession);

            //Assert
            using (UnitOfWork u = new UnitOfWork(new LabAssistantContext(dbConName)))
            {
                Assert.IsFalse(result);
                Assert.AreEqual(expectedQuestionCount, u.QuestionRepository.Count(), "Question Count Wrong");
                Assert.AreEqual(expectedAnswerCount, u.AnswerRepository.Count(), "Answer count wrong");
                Assert.AreEqual(expectedStudentCount, u.StudentRepo.Count(), "Student count wrong");
                Assert.AreEqual(expectedGroupCount, u.GroupRepository.Count(), "Group count wrong");
                Assert.AreEqual(expectedLectuerCount, u.LecturerRepo.Count(), "Lecturer count wrong");
                Assert.AreEqual(expectedSessionCount, u.SessionRepository.Count(), "Session count wrong");
            }
        }
        public void Save_UpdateSelected_Success()
        {
            //Arrange
            ClearDatabase();
            CreateMySessionTestData(_lecturer);
            VM             = new MySessionsLecturerPageVM(_lecturer, dbConName);
            VM.FormContext = FormContext.Create;
            //Act - update session details
            //select a session
            VM.SelectedSession = VM.MySessions.Where(s => s.Id == 2).FirstOrDefault();
            //update it
            VM.SelectedSession.Name  = "UpdatedTo";
            VM.SelectedSession.Group = VM.Groups.Where(g => g.Id == 2).FirstOrDefault();
            VM.SelectedSession.Lecturers.Add(VM.AvailableLecturers.Where(l => l.Id == 555).FirstOrDefault());
            VM.SelectedSession.StartTime = new DateTime(2019, 12, 06);
            VM.SelectedSession.EndTime   = new DateTime(2019, 12, 06);
            bool result = VM.Save();
            //Assert
            int expectedSessions  = 1;
            int expectedLecturers = 2;
            int expectedGroups    = 3;

            Assert.IsTrue(result, $"Save Returned False: Message: {VM.FeedbackMessage}");
            Assert.AreEqual(FormContext.Update, VM.FormContext, "FormContext in wrong initial mode");
            Assert.AreEqual(Role.Lecturer, VM.UserRole, "UserRole in wrong initial mode for lecturer");
            Assert.AreEqual(expectedSessions, VM.MySessions.Count, $"VM Sessions Count Wrong {VM.MySessions.Count} : should be {expectedSessions}");
            Assert.AreEqual(expectedLecturers, VM.AvailableLecturers.Count, "VM Lecturer Count Wrong");
            Assert.AreEqual(expectedGroups, VM.Groups.Count, "VM Groups Count Wrong");//one null and the test one(s)
        }
        public void Delete_Confirm_DeletePreviousSesh_Success()
        {
            //Arrange
            //questions answers should cascade  - nothing else
            int expectedQuestionCount = 4;
            int expectedAnswerCount   = 4;
            int expectedStudentCount  = 3;
            int expectedGroupCount    = 2;
            int expectedLectuerCount  = 2;
            int expectedSessionCount  = 4;

            ClearDatabase();
            CreateMySessionTestData(_lecturer);
            VM = new MySessionsLecturerPageVM(_lecturer, dbConName);
            VM.SubgridContext = SubgridContext.PreviousSessions;// were going to work with the future sessions
            VM.GetAllMyPreviousSessions();
            VM.SelectedSession = VM.MySessions.Where(s => s.Name.Equals("Previous Sesh")).FirstOrDefault();
            //delete message box confirmed
            VM.IsConfirmationAccepted = true;
            //Act
            var result = VM.Delete(VM.SelectedSession);

            //Assert
            using (UnitOfWork u = new UnitOfWork(new LabAssistantContext(dbConName)))
            {
                Assert.IsTrue(result, VM.FeedbackMessage);
                Assert.AreEqual(expectedQuestionCount, u.QuestionRepository.Count(), "Question Count Wrong");
                Assert.AreEqual(expectedAnswerCount, u.AnswerRepository.Count(), "Answer count wrong");
                Assert.AreEqual(expectedStudentCount, u.StudentRepo.Count(), "Student count wrong");
                Assert.AreEqual(expectedGroupCount, u.GroupRepository.Count(), "Group count wrong");
                Assert.AreEqual(expectedLectuerCount, u.LecturerRepo.Count(), "Lecturer count wrong");
                Assert.AreEqual(expectedSessionCount, u.SessionRepository.Count(), "Session count wrong");
            }
        }
        public void LoadVM_Sucess()
        {
            //Arrange
            ClearDatabase();
            CreateMySessionTestData(_lecturer);
            VM = new MySessionsLecturerPageVM(_lecturer, dbConName);
            //Act
            // -- VM constructor is Act
            //Assert
            int expectedSessions  = 1;
            int expectedGroups    = 3;
            int expectedLecturers = 2;

            Assert.AreEqual(FormContext.Create, VM.FormContext, "FormContext in wrong initial mode");
            Assert.AreEqual(Role.Lecturer, VM.UserRole, "UserRole in wrong initial mode for lecturer");
            Assert.AreEqual(expectedSessions, VM.MySessions.Count, $"VM Sessions Count Wrong expected {expectedSessions}  : actual {VM.MySessions.Count}");
            Assert.AreEqual(expectedGroups, VM.Groups.Count, $"VM Groups Count Wrong. Expected {expectedGroups}   : actual {VM.Groups.Count}");//one null and the test one(s)
            Assert.AreEqual(expectedLecturers, VM.AvailableLecturers.Count);
        }