Esempio n. 1
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);
        }
Esempio n. 2
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);
        }
        public async Task GetLessonReturnsNotFoundResultWhenLessonIdIsWrong()
        {
            // Arrange
            var id = 0;

            mock.Setup(serv => serv.GetByIdAsync(id, LessonExtensions.ToDto)).Returns(Task.Run(() => GetTestLessons().FirstOrDefault(x => x.Id == id)));
            var controller = new LessonsController(mock.Object);

            // Act
            var result = await controller.Get(id);

            // Arrange
            Assert.IsType <NotFoundObjectResult>(result.Result);
        }
        public async Task FailedAddLessonReturnsIActionResult()
        {
            // Arrange
            var controller = new LessonsController(mock.Object);
            var newLesson  = new LessonViewModel();

            // Act
            var result = await controller.Post(newLesson);

            // Assert
            var viewResult = Assert.IsAssignableFrom <IActionResult>(result);

            Assert.Equal(result, viewResult);
        }
        public void GetAllReturnsAnAsyncEnumerableResultWithLessons()
        {
            // Arrange
            mock.Setup(serv => serv.GetAllAsync(LessonExtensions.ToDto)).Returns(GetTestLessons().ToAsyncEnumerable());
            var controller = new LessonsController(mock.Object);

            // Act
            var result = controller.Get();

            // Assert
            var lessons = Assert.IsAssignableFrom <IAsyncEnumerable <LessonViewModel> >(result);

            Assert.Equal(lessons, result);
        }
Esempio n. 6
0
        public void BadPostById()
        {
            var controller = new LessonsController();

            controller.AppSettings = this.AppSettings;

            Assert.IsNull(controller.Get("single-id"));

            //Try to save to wrong ID
            controller.Post("wrong-id", @"{
                _id: 'single-id', 
                LessonID: 'single-id', 
                LastTurnTime: ISODate('2012-05-02T13:07:17.000Z'), 
                TurnCount: 42, 
                Students: ['s1', 's2']
            }");
        }
        public async Task GetLessonReturnsOkResultWithLesson()
        {
            // Arrange
            int id = 1;

            mock.Setup(repo => repo.GetByIdAsync(id, LessonExtensions.ToDto))
            .Returns(Task.Run(() => new LessonDto {
                Id = 1, Marks = new List <MarkDto>(), Title = "lesson1"
            }));
            var controller = new LessonsController(mock.Object);

            // Act
            var result = await controller.Get(id);

            //var lesson = Assert.IsAssignableFrom<ActionResult<LessonViewModel>>(result);
            //Assert.Equal("lessonId", lesson.Value.Title);
            Assert.IsType <OkObjectResult>(result.Result);
        }
        public async Task GetByIdReturnsAnActionResultWithLessonAsync()
        {
            // Arrange
            var id             = 1;
            var expectedLesson = GetTestLessons().FirstOrDefault(x => x.Id == id);

            mock.Setup(serv => serv.GetByIdAsync(id, LessonExtensions.ToDto)).Returns(Task.Run(() => expectedLesson));
            var controller = new LessonsController(mock.Object);

            // Act
            var result = await controller.Get(id);

            // Assert
            var lesson = Assert.IsAssignableFrom <ActionResult <LessonViewModel> >(result);

            Assert.Equal(lesson, result);
            //Assert.Equal(expectedLesson., result);
        }
Esempio n. 9
0
        public void PostById()
        {
            var controller = new LessonsController();

            controller.AppSettings = this.AppSettings;

            Assert.IsNull(controller.Get("single-id"));

            controller.Post("single-id", @"{
                _id: 'single-id', 
                LessonID: 'single-id', 
                LastTurnTime: ISODate('2012-05-02T13:07:17.000Z'), 
                TurnCount: 42, 
                Students: ['s1', 's2']
            }");

            Lesson lesson = controller.Get("single-id");

            Assert.AreEqual("single-id", lesson.Id);
            Assert.AreEqual("single-id", lesson.LessonID);
            Assert.AreEqual(new DateTime(2012, 5, 2, 13, 7, 17), lesson.LastTurnTime);
            Assert.AreEqual(42, lesson.TurnCount);
            CollectionAssert.AreEquivalent(new string[] { "s1", "s2" }, lesson.Students);
        }
 public void SetupContext()
 {
     controller = new LessonsController();
     result     = controller.Index() as ViewResult;
 }
        public async Task <ActionResult> UpdateBookingByCoach(LessonTimeViewModel viewModel)
        {
            ViewBag.ViewModel = viewModel;
            var profile = await HttpContext.GetUserAsync();

            if (viewModel.KeyID != null)
            {
                viewModel.LessonID = viewModel.DecryptKeyValue();
            }

            LessonTime item = models.GetTable <LessonTime>().Where(l => l.LessonID == viewModel.LessonID).FirstOrDefault();

            if (item == null)
            {
                return(View("~/Views/Shared/JsAlert.cshtml", model: "修改上課時間資料不存在!!"));
            }

            if (item.LessonAttendance != null)
            {
                return(View("~/Views/ConsoleHome/Shared/JsAlert.cshtml", model: "已完成上課,不可修改!!"));
            }

            if (item.ContractTrustTrack.Any(t => t.SettlementID.HasValue))
            {
                return(View("~/Views/ConsoleHome/Shared/JsAlert.cshtml", model: "課程資料已信託,不可修改!!"));
            }

            var coach = models.GetTable <ServingCoach>().Where(c => c.CoachID == viewModel.CoachID).FirstOrDefault();

            if (coach == null)
            {
                return(View("~/Views/ConsoleHome/Shared/JsAlert.cshtml", model: "上課教練資料錯誤!!"));
            }

            if (!viewModel.ClassDate.HasValue)
            {
                return(View("~/Views/ConsoleHome/Shared/JsAlert.cshtml", model: "請選擇上課日期間!!"));
            }

            if (!item.BranchStore.IsVirtualClassroom() && !item.IsSTSession() && !models.GetTable <CoachWorkplace>()
                .Any(c => c.BranchID == item.BranchID &&
                     c.CoachID == item.AttendingCoach) &&
                viewModel.ClassDate.Value < DateTime.Today.AddDays(1))
            {
                return(View("~/Views/ConsoleHome/Shared/JsAlert.cshtml", model: "此時段不允許跨店預約!!"));
            }


            LessonTime timeItem = new LessonTime
            {
                InvitedCoach      = item.InvitedCoach,
                AttendingCoach    = item.AttendingCoach,
                ClassTime         = viewModel.ClassDate,
                DurationInMinutes = item.DurationInMinutes
            };

            if (item.IsPTSession())
            {
                if (models.GetTable <Settlement>().Any(s => s.StartDate <= viewModel.ClassDate && s.EndExclusiveDate > viewModel.ClassDate))
                {
                    ViewBag.Message = "修改上課時間(" + String.Format("{0:yyyy/MM/dd}", viewModel.ClassDate) + "已信託結算!!";
                    return(View("~/Views/ConsoleHome/Shared/JsAlert.cshtml"));
                }
            }

            if (!item.IsCoachPISession() && !item.IsSTSession())
            {
                var users = models.CheckOverlappingBooking(timeItem, item);
                if (users.Count() > 0)
                {
                    ViewBag.Message = "上課成員(" + String.Join("、", users.Select(u => u.RealName)) + ")上課時間重複!!";
                    return(View("~/Views/ConsoleHome/Shared/JsAlert.cshtml"));
                }
            }
            else
            {
                if (viewModel.ClassEndTime.HasValue)
                {
                    timeItem.DurationInMinutes =
                        (int)(viewModel.ClassEndTime.Value - viewModel.ClassDate.Value).TotalMinutes;
                }
            }

            if (!ModelState.IsValid)
            {
                ViewBag.ModelState = this.ModelState;
                return(View(Startup.Properties["ReportInputError"]));
            }

            var changeCoach = item.AttendingCoach != viewModel.CoachID;

            if (item.IsCoachPISession())
            {
                if (viewModel.AttendeeID == null || viewModel.AttendeeID.Length == 0)
                {
                    models.DeleteAll <LessonTime>(r => r.LessonID != item.LessonID && r.GroupID == item.GroupID);
                    models.DeleteAll <RegisterLesson>(r => r.RegisterID != item.RegisterID && r.RegisterGroupID == item.GroupID);
                }
                else
                {
                    models.DeleteAll <LessonTime>(r => r.LessonID != item.LessonID && r.GroupID == item.GroupID &&
                                                  !viewModel.AttendeeID.Contains(r.AttendingCoach.Value));
                    models.DeleteAll <RegisterLesson>(r => r.RegisterID != item.RegisterID && r.RegisterGroupID == item.GroupID &&
                                                      !viewModel.AttendeeID.Contains(r.UID));
                    foreach (var uid in viewModel.AttendeeID.Distinct())
                    {
                        if (!models.GetTable <RegisterLesson>().Any(r => r.UID == uid && r.RegisterGroupID == item.GroupID))
                        {
                            var coachPI = models.GetTable <ServingCoach>().Any(s => s.CoachID == uid)
                                    ? LessonsController.SpawnCoachPI(item, uid, uid)
                                    : LessonsController.SpawnCoachPI(item, uid, coach.CoachID);
                            models.GetTable <LessonTime>().InsertOnSubmit(coachPI);
                        }
                    }
                }

                models.SubmitChanges();

                foreach (var s in models.GetTable <LessonTime>().Where(l => l.GroupID == item.GroupID))
                {
                    s.ClassTime = viewModel.ClassDate;
                    if (models.GetTable <DailyWorkingHour>().Any(d => d.Hour == viewModel.ClassDate.Value.Hour))
                    {
                        s.HourOfClassTime = viewModel.ClassDate.Value.Hour;
                    }

                    s.DurationInMinutes = timeItem.DurationInMinutes;
                    s.BranchID          = viewModel.BranchID;

                    //item.TrainingBySelf = viewModel.TrainingBySelf;
                }
            }
            else
            {
                item.InvitedCoach = viewModel.CoachID;
                item.AssignLessonAttendingCoach(coach);
                item.ClassTime = viewModel.ClassDate;
                if (models.GetTable <DailyWorkingHour>().Any(d => d.Hour == viewModel.ClassDate.Value.Hour))
                {
                    item.HourOfClassTime = viewModel.ClassDate.Value.Hour;
                }

                item.DurationInMinutes = timeItem.DurationInMinutes;
                item.BranchID          = viewModel.BranchID;
                foreach (var t in item.ContractTrustTrack)
                {
                    t.EventDate = viewModel.ClassDate.Value;
                }
                //item.TrainingBySelf = viewModel.TrainingBySelf;
            }

            models.SubmitChanges();

            if (item.IsPISession())
            {
                models.ExecuteCommand("update TuitionInstallment set PayoffDate = {0} where RegisterID = {1} ", item.ClassTime, item.RegisterID);
            }

            if (!item.IsSTSession())
            {
                item.BookingLessonTimeExpansion(models, item.ClassTime.Value, item.DurationInMinutes.Value);

                models.ExecuteCommand("delete PreferredLessonTime where LessonID = {0}", item.LessonID);
                item.ProcessBookingWhenCrossBranch(models);
            }

            return(Json(new
            {
                result = true,
                message = "上課時間修改完成!!",
                changeCoach = changeCoach,
                classTime = String.Format("{0:yyyy/MM/dd H:mm}", item.ClassTime) + "-" + String.Format("{0:H:mm}", item.ClassTime.Value.AddMinutes(item.DurationInMinutes.Value))
            }));
        }
Esempio n. 12
0
 public ConsoleHost()
 {
     this._studentsController = new StudentsController();
     this._lessonsController  = new LessonsController();
 }
Esempio n. 13
0
 private void InitControllers()
 {
     Lessons = new LessonsController();
     Tiles   = new TilesController();
 }
Esempio n. 14
0
 public LessonsControllerTests()
 {
     _mapper        = new Mock <IMapper>();
     _lessonService = new Mock <ILessonService>();
     _sut           = new LessonsController(_mapper.Object, _lessonService.Object);
 }