示例#1
0
        public static void ShowCourseGoals(Course course = null)
        {
            var goalStore = new GoalStore();

            if (course == null)
            {
                course = AskForCourseById();
                if (course == null)
                {
                    return;
                }
            }

            List <Goal> goals = goalStore.FindByCourseId(course.CourseId).ToList();

            Console.Clear();
            Console.WriteLine($"Kursmål för {course.CourseName}");
            Console.WriteLine(new string('-', Console.WindowWidth));
            Console.WriteLine();
            if (goals.Count > 0)
            {
                Console.WriteLine("Den studerande ska:");
                foreach (Goal goal in goals)
                {
                    Console.WriteLine($" {goal.GoalId}.".PadRight(5) + goal.Description);
                }
            }
            else
            {
                Console.WriteLine("Kursen har inga mål.");
            }

            UserInput.WaitForContinue();
        }
示例#2
0
        private static void RemoveCourseGoal()
        {
            Course course = AskForCourseById();

            var goalStore = new GoalStore();

            List <Goal> goals = goalStore.FindByCourseId(course.CourseId).ToList();

            foreach (var goal in goals)
            {
                Console.WriteLine(goal.GoalId + ":  " + goal.Description.Truncate(Console.WindowWidth));
            }
            Console.WriteLine("Tryck enter för att avbryta");
            Console.WriteLine();
            string input = UserInput.GetInput <string>("Ange mål id");

            goals.RemoveAll(g => g.GoalId == input);
            goalStore.Remove(input);

            for (int i = 0; i < goals.Count; i++)
            {
                goals[i].GoalId = (i + 1).ToString();
            }
            goalStore.Save();
        }
示例#3
0
        private static void EditCourseGoal()
        {
            Course course    = AskForCourseById();
            var    goalStore = new GoalStore();

            List <Goal> goals = goalStore.FindByCourseId(course.CourseId).ToList();

            foreach (var g in goals)
            {
                Console.WriteLine(g.GoalId + ":  " + g.Description.Truncate(Console.WindowWidth));
            }

            UserInput.WaitForContinue();
            Console.WriteLine();
            string input = UserInput.GetInput <string>("Ange mål-id:");

            Console.Clear();
            Goal goal = goals.SingleOrDefault(g => g.GoalId == input);

            if (goal != null)
            {
                Console.WriteLine("Gammal beskrivning: " + goal.Description);
                Console.WriteLine();
                goal.Description = UserInput.GetInput <string>("Den studerande ska: ");
                goalStore.Save();
            }
            else
            {
                Console.WriteLine("Målet finns inte");
            }
        }
示例#4
0
        public void Initialize()
        {
            testGoal = new Goal
            {
                CourseId    = "kurs50",
                GoalId      = "50",
                Description = "Den studerande ska kunna räkna till fem"
            };

            testGoalStore = new GoalStore();
            testGoalStore.AddItem(testGoal);
        }
示例#5
0
        public async Task GetGoalAsync_GivenGoalId_ShouldQueryDb()
        {
            // Arrange.
            var goalDb     = Substitute.For <IGoalDb>();
            var userStore  = Substitute.For <IUserStore>();
            var testObject = new GoalStore(goalDb, userStore);

            // Act.
            await testObject.GetGoalAsync(0);

            // Assert.
            await goalDb.Received(1).GetGoalAsync(0);
        }
示例#6
0
        public void CreateGoalAsync_GivenInvalidUserId_ShouldRaiseException()
        {
            // Arrange.
            var goalDb     = Substitute.For <IGoalDb>();
            var userStore  = Substitute.For <IUserStore>();
            var testObject = new GoalStore(goalDb, userStore);

            // Act & assert.
            Assert.That(
                () => testObject.CreateGoalAsync(0, "SomeGoal", 24, 1, DateTime.Now),
                Throws
                .TypeOf <ArgumentException>()
                .With.Message.EqualTo("User not found with id 0."));
        }
示例#7
0
        public void CreateGoalAsync_GivenInvalidPeriod_ShouldRaiseException()
        {
            // Arrange.
            var goalDb     = Substitute.For <IGoalDb>();
            var userStore  = Substitute.For <IUserStore>();
            var testObject = new GoalStore(goalDb, userStore);

            userStore.GetUserAsync(0).Returns(new User());

            // Act & assert.
            Assert.That(
                () => testObject.CreateGoalAsync(0, "SomeGoal", 0, 1, DateTime.Now),
                Throws
                .TypeOf <ArgumentException>()
                .With.Message.EqualTo("Invalid period value 0."));
        }
示例#8
0
        public void CreateGoalAsync_GivenNullOrBlankName_ShouldRaiseException(string name)
        {
            // Arrange.
            var goalDb     = Substitute.For <IGoalDb>();
            var userStore  = Substitute.For <IUserStore>();
            var testObject = new GoalStore(goalDb, userStore);

            userStore.GetUserAsync(0).Returns(new User());

            // Act & assert.
            Assert.That(
                () => testObject.CreateGoalAsync(0, name, 24, 1, DateTime.Now),
                Throws
                .TypeOf <ArgumentException>()
                .With.Message.EqualTo("Goal name cannot be blank or null."));
        }
示例#9
0
        public async Task RemoveGoalAsync_GivenGoal_ShouldRemoveFromDb()
        {
            // Arrange.
            var goalDb       = Substitute.For <IGoalDb>();
            var userStore    = Substitute.For <IUserStore>();
            var testObject   = new GoalStore(goalDb, userStore);
            var goalToRemove = new Goal();

            // Act.
            await testObject.RemoveGoalAsync(goalToRemove);

            // Assert.
            goalDb.Received(1).RemoveGoal(goalToRemove);

            await goalDb.Received(1).SaveAsync();
        }
示例#10
0
        public void CreateGoalAsync_GivenZeroOrNegativeFrequency_ShouldRaiseException(int frequency)
        {
            // Arrange.
            var goalDb     = Substitute.For <IGoalDb>();
            var userStore  = Substitute.For <IUserStore>();
            var testObject = new GoalStore(goalDb, userStore);

            userStore.GetUserAsync(0).Returns(new User());

            // Act & assert.
            Assert.That(
                () => testObject.CreateGoalAsync(0, "SomeGoal", 24, frequency, DateTime.Now),
                Throws
                .TypeOf <ArgumentException>()
                .With.Message.EqualTo($"Frequency cannot be zero or negative, was {frequency}."));
        }
示例#11
0
        public static void ShowStudentCourseGoals(User student)
        {
            var    goalStore = new GoalStore();
            Course course    = AskForCourseById();

            if (course == null)
            {
                Console.WriteLine("Kursen finns inte");

                UserInput.WaitForContinue();
                return;
            }


            List <Goal> goals = goalStore.FindByCourseId(course.CourseId).ToList();

            Console.Clear();
            Console.WriteLine($"Kursmål för {course.CourseName}");
            Console.WriteLine(new string('-', Console.WindowWidth));
            Console.WriteLine();
            if (goals.Count > 0)
            {
                GradeStore   gradeStore = new GradeStore();
                List <Grade> grades     = gradeStore.FindGradesForStudent(student, course).ToList();
                Console.WriteLine("Den studerande ska:");
                foreach (Goal goal in goals)
                {
                    Grade grade = grades.SingleOrDefault(g => g.CourseGoal == goal.GoalId);
                    Console.WriteLine($" {goal.GoalId}.".PadRight(5) + goal.Description);
                    if (grade == null)
                    {
                        Console.WriteLine("     Ej betygsatt");
                    }
                    else
                    {
                        Console.WriteLine($@"   Betyg: {grade.Result}");
                    }
                }
            }
            else
            {
                Console.WriteLine("Kursen har inga mål.");
            }

            UserInput.WaitForContinue();
        }
示例#12
0
        private static void CreateNewCourseGoal()
        {
            var goalStore = new GoalStore();

            Console.Clear();
            Console.WriteLine("Skapa nytt mål för kurs");
            Console.WriteLine();

            Course course = AskForCourseById();

            if (course == null)
            {
                return;
            }

            Console.Clear();
            Console.WriteLine($"Kurs: {course.CourseName} ({course.CourseId})");

            int goalCount = goalStore.FindByCourseId(course.CourseId).Count();

            Console.WriteLine("Tryck enter för att avbryta");
            Console.WriteLine();
            while (true)
            {
                string description = UserInput.GetInput <string>("Den studerande ska:");

                if (description == string.Empty)
                {
                    break;
                }

                var goal = new Goal
                {
                    CourseId    = course.CourseId,
                    GoalId      = (goalCount + 1).ToString(),
                    Description = description
                };
                goalCount++;
                goalStore.AddItem(goal);
                goalStore.Save();
            }
            ShowCourseGoals(course);
        }
示例#13
0
    private Goal GetRandomGoal()
    {
        var selection = _goals.First().Key;

        var totalWeight = _goals.Values.Sum();

        var roll = Random.Range(0, totalWeight);

        foreach (var goal in _goals.OrderByDescending(g => g.Value))
        {
            var weightedValue = goal.Value;

            if (roll >= weightedValue)
            {
                roll -= weightedValue;
            }
            else
            {
                selection = goal.Key;
                break;
            }
        }
        return(GoalStore.GetGoal(selection));
    }
示例#14
0
        public async Task CreateGoalAsync_GivenValidGoal_ShouldAddToDb()
        {
            // Arrange.
            var goalDb     = Substitute.For <IGoalDb>();
            var userStore  = Substitute.For <IUserStore>();
            var testObject = new GoalStore(goalDb, userStore);
            var now        = DateTime.Now;

            userStore.GetUserAsync(0).Returns(new User());

            // Act.
            Goal goal = await testObject.CreateGoalAsync(0, "SomeGoal", 24, 1, now);

            // Assert.
            goalDb.Received(1).AddGoal(Arg.Any <Goal>());

            await goalDb.Received(1).SaveAsync();

            Assert.AreEqual(0, goal.UserId);
            Assert.AreEqual("SomeGoal", goal.Name);
            Assert.AreEqual(24, goal.PeriodInHours);
            Assert.AreEqual(1, goal.FrequencyWithinPeriod);
            Assert.AreEqual(now, goal.StartDate);
        }
示例#15
0
 public Goal()
 {
     GoalStore = new GoalStore();
 }
示例#16
0
        public static void GradeStudentGoal(User grader)
        {
            var courseStore = new CourseStore();
            var gradeStore  = new GradeStore();
            var goalStore   = new GoalStore();

            List <Course> courses = GetCourses(grader, courseStore).ToList();


            Course course = CoursePresenter.AskForCourseById();

            if (course == null)
            {
                return;
            }
            if (grader.HasLevel(UserLevel.Teacher) && course.CourseTeacher != grader.UserName)
            {
                Console.WriteLine("Du är ej lärare för den kursen");
                UserInput.WaitForContinue();
                return;
            }

            User           student = UserManagerPresenter.SearchForUser(UserLevel.Student);
            EducationClass klass   = student.GetClass();

            if (klass == null)
            {
                Console.WriteLine("Användaren är inte en student");
                UserInput.WaitForContinue();
                return;
            }
            if (!klass.HasCourse(course.CourseId))
            {
                Console.WriteLine("Klassen läser ej den kursen");
                UserInput.WaitForContinue();
                return;
            }

            List <Goal> goals = goalStore.FindByCourseId(course.CourseId).ToList();

            foreach (Goal g in goals)
            {
                Console.WriteLine($"  {g.GoalId}: {g.Description.Truncate(95)}");
            }

            Console.WriteLine();
            string goalToGrade = UserInput.GetInput <string>("Välj mål att betygsätta:");

            Goal goal = goals.SingleOrDefault(g => g.GoalId == goalToGrade);

            if (goal == null)
            {
                Console.WriteLine($"Finns inget mål med id {goalToGrade}");
                UserInput.WaitForContinue();
                return;
            }

            GradeLevel gradeLevel = AskForGrade();

            var grade = new Grade
            {
                StudentId  = student.UserName,
                CourseId   = course.CourseId,
                CourseGoal = goal.GoalId,
                Result     = gradeLevel
            };

            Console.WriteLine();
            Console.WriteLine($"Student: {student.FullName()}");
            Console.WriteLine($"Kursmål: {goal.Description.Truncate(95)}");
            Console.WriteLine($"Betyg:   {grade.Result}");

            bool confirm = UserInput.AskConfirmation("Spara betyg?");

            if (confirm)
            {
                Grade existingGrade = gradeStore.FindById(grade.GradeId);
                if (existingGrade == null)
                {
                    gradeStore.AddItem(grade);
                    gradeStore.Save();
                }
                else
                {
                    gradeStore.GradeStudent(student, grade);
                    gradeStore.Save();
                }
            }

            Console.WriteLine();
            UserInput.WaitForContinue();
        }