public void WhenUserProfileLeaveClassRoom(string userprofileId, string classRoomId)
        {
            var mockClassRoomRepo = ScenarioContext.Current.Get <Mock <IClassRoomRepository> >();

            mockClassRoomRepo.Setup(it => it.UpsertClassRoom(It.IsAny <ClassRoom>()));

            var mockClassCalendarRepo = ScenarioContext.Current.Get <Mock <IClassCalendarRepository> >();

            mockClassCalendarRepo.Setup(it => it.UpsertClassCalendar(It.IsAny <ClassCalendar>()));

            var mockUserProfileRepo = ScenarioContext.Current.Get <Mock <IUserProfileRepository> >();

            mockUserProfileRepo.Setup(it => it.UpsertUserProfile(It.IsAny <UserProfile>()));

            var mockUserActivityRepo = ScenarioContext.Current.Get <Mock <IUserActivityRepository> >();

            mockUserActivityRepo.Setup(it => it.UpsertUserActivity(It.IsAny <UserActivity>()));

            var mockStudentKeyRepo = ScenarioContext.Current.Get <Mock <IStudentKeyRepository> >();

            mockStudentKeyRepo.Setup(it => it.UpsertStudentKey(It.IsAny <StudentKey>()));

            var mycourseCtrl = ScenarioContext.Current.Get <MyCourseController>();
            var body         = new LeaveCourseRequest
            {
                ClassRoomId   = classRoomId,
                UserProfileId = userprofileId
            };

            mycourseCtrl.Leave(body);
        }
Beispiel #2
0
        public void Leave(LeaveCourseRequest body)
        {
            var areArgumentsValid = body != null &&
                                    !string.IsNullOrEmpty(body.ClassRoomId) &&
                                    !string.IsNullOrEmpty(body.UserProfileId);

            if (!areArgumentsValid)
            {
                return;
            }

            UserProfile userprofile;
            var         canAccessToTheClassRoom = _userprofileRepo.CheckAccessPermissionToSelectedClassRoom(body.UserProfileId, body.ClassRoomId, out userprofile);

            if (!canAccessToTheClassRoom)
            {
                return;
            }

            var isTeacherAccount = userprofile.Subscriptions.First(it => it.ClassRoomId == body.ClassRoomId).Role == UserProfile.AccountRole.Teacher;

            if (!isTeacherAccount)
            {
                return;
            }

            var selectedClassRoom = _classRoomRepo.GetClassRoomById(body.ClassRoomId);

            if (selectedClassRoom == null)
            {
                return;
            }

            var students = _userprofileRepo.GetUserProfilesByClassRoomId(body.ClassRoomId).ToList();

            if (students == null)
            {
                return;
            }

            var selectedClassCalendar = _classCalendarRepo.GetClassCalendarByClassRoomId(body.ClassRoomId);

            if (selectedClassCalendar == null)
            {
                return;
            }

            var now = _dateTime.GetCurrentTime();

            selectedClassRoom.DeletedDate = now;
            _classRoomRepo.UpsertClassRoom(selectedClassRoom);

            selectedClassCalendar.DeletedDate = now;
            _classCalendarRepo.UpsertClassCalendar(selectedClassCalendar);

            var subscriptions = students.SelectMany(it => it.Subscriptions)
                                .Where(it => it.ClassRoomId.Equals(body.ClassRoomId))
                                .Where(it => !it.DeletedDate.HasValue)
                                .ToList();

            subscriptions.ForEach(it => it.DeletedDate = now);
            students.ForEach(it => _userprofileRepo.UpsertUserProfile(it));

            var activities = students.Select(it => _userActivityRepo.GetUserActivityByUserProfileIdAndClassRoomId(it.id, body.ClassRoomId))
                             .Where(it => it != null)
                             .Where(it => !it.DeletedDate.HasValue)
                             .ToList();

            activities.ForEach(it =>
            {
                it.DeletedDate = now;
                _userActivityRepo.UpsertUserActivity(it);
            });

            var selectedStudentKey = _studentKeyRepo.GetStudentKeyByClassRoomId(body.ClassRoomId);

            if (selectedStudentKey == null)
            {
                return;
            }

            selectedStudentKey.DeletedDate = now;
            _studentKeyRepo.UpsertStudentKey(selectedStudentKey);
        }