public void CreateExpertTest()
        {
            var exercise = ExerciseFactory.Create(RankLevel.Expert, 2);

            Assert.AreEqual(RankLevel.Expert, exercise.Rank);
            Assert.AreEqual(2, exercise.QuestionNumber);
        }
Beispiel #2
0
        public void WhenWeCreateNextAnExerciseWithValidAnswerWeGetAValidNewExercise()
        {
            var cache   = new ExerciseFactoryCache();
            var factory = new ExerciseFactory(new MockRandomNumberGenerator(new int[]
            {
                9, -3,
                2, 3
            }), cache);

            var initialExercise = factory.CreateInitialExercise();
            var answer          = new Answer()
            {
                AssociatedExercise = initialExercise,
                EquationWithAnswer = "9 + -3 = 6",
            };

            var exercise = factory.CreateNextExercise(answer);

            Assert.IsNotNull(exercise);
            Assert.IsNotNull(exercise.QuestionToAsk);
            Assert.AreEqual("2 + 3 = ?", exercise.QuestionToAsk.EquationWithoutAnswer);
            Assert.AreEqual("2 + 3 = 5", factory.GetAnswer(exercise.QuestionToAsk));

            // second question for current rank
            Assert.AreEqual(2, exercise.QuestionToAsk.QuestionNumberWithinCurrentRank);
            Assert.IsTrue(exercise.QuestionToAsk.TimeToAnswer > 0);
            Assert.AreEqual(Rank.Beginner, exercise.QuestionToAsk.Rank);

            Console.WriteLine(answer.Display());

            // {"AssociatedExercise":{"QuestionToAsk":{"EquationWithoutAnswer":"9 + -3 = ?","Rank":0,"QuestionNumberWithinCurrentRank":1,"TimeToAnswer":30},"CurrentStatus":null},"EquationWithAnswer":"9 + -3 = 6"}
        }
        public void CreateIntermediateTest()
        {
            var exercise = ExerciseFactory.Create(RankLevel.Intermediate, 3);

            Assert.AreEqual(RankLevel.Intermediate, exercise.Rank);
            Assert.AreEqual(3, exercise.QuestionNumber);
        }
        public void CreateAdvancedTest()
        {
            var exercise = ExerciseFactory.Create(RankLevel.Advanced, 1);

            Assert.AreEqual(RankLevel.Advanced, exercise.Rank);
            Assert.AreEqual(1, exercise.QuestionNumber);
        }
        public void CreateBeginnerTest()
        {
            var exercise = ExerciseFactory.Create(RankLevel.Beginner, 1);

            Assert.AreEqual(RankLevel.Beginner, exercise.Rank);
            Assert.AreEqual(1, exercise.QuestionNumber);
        }
        public void CreateTalentedTest()
        {
            var exercise = ExerciseFactory.Create(RankLevel.Talented, 2);

            Assert.AreEqual(RankLevel.Talented, exercise.Rank);
            Assert.AreEqual(2, exercise.QuestionNumber);
        }
        public void CreateExercise_ReturnsNotFinishedExercise()
        {
            var fixture  = new Fixture();
            var words    = fixture.CreateMany <Word>();
            var userMock = new Mock <IUser>();

            userMock.SetupGet(mock => mock.StudiedWords).Returns(new StudiedWord[0]);
            var userRepositoryMock = new Mock <IUserRepository>();

            userRepositoryMock
            .Setup(mock => mock.Load(It.IsAny <Guid>()))
            .Returns(userMock.Object);
            var wordRepositoryMock = new Mock <IWordsRepository>();

            wordRepositoryMock.Setup(mock => mock.LoadAll()).Returns(words);
            var settings = new TranslationTrainerSettings(5, 3);
            var factory  = new ExerciseFactory(
                userRepositoryMock.Object,
                wordRepositoryMock.Object,
                settings);

            var exercise = factory.Create(Guid.NewGuid());

            Assert.IsFalse(exercise.Status.IsFinished);
        }
Beispiel #8
0
        public void WhenWeCallCreateNextExerciseWithInvalidAnswerWeGetAInvalidNewExercise()
        {
            var cache   = new ExerciseFactoryCache();
            var factory = new ExerciseFactory(new MockRandomNumberGenerator(new int[]
            {
                9, -3,
                2, 3
            }), cache);

            var initialExercise = factory.CreateInitialExercise();
            var answer          = new Answer()
            {
                AssociatedExercise = initialExercise,
                EquationWithAnswer = "9 + -3 = 99",
            };

            var exercise = factory.CreateNextExercise(answer);

            Assert.IsNotNull(exercise);

            // we dont have a question
            Assert.IsNull(exercise.QuestionToAsk);

            // status is in error state
            Assert.IsTrue(exercise.CurrentStatus.IsErrored);
            Assert.IsFalse(exercise.CurrentStatus.IsCompleted);

            // we have message
            Assert.IsNotNull(exercise.CurrentStatus.Message);
        }
Beispiel #9
0
        public void WhenWeAskFinalQuestionAtExpertLevelThenExerciseHasTheStatusCompleted()
        {
            var cache   = new ExerciseFactoryCache();
            var factory = new ExerciseFactory(new MockRandomNumberGenerator(new int[]
            {
                9, -3
            }), cache);

            var lastExercise = factory.CreateInitialExercise();

            lastExercise.QuestionToAsk.QuestionNumberWithinCurrentRank = 3;
            lastExercise.QuestionToAsk.Rank = Rank.Expert;


            var answer = new Answer()
            {
                AssociatedExercise = lastExercise,
                EquationWithAnswer = "9 + -3 = 6",
            };

            var exercise = factory.CreateNextExercise(answer);

            Assert.IsNotNull(exercise);

            // status is in error state
            Assert.IsTrue(exercise.CurrentStatus.IsCompleted);

            // we have message
            Assert.IsNotNull(exercise.CurrentStatus.Message);
        }
            public override async Task <ExerciseDto> Handle(Input request, CancellationToken cancellationToken)
            {
                Exercise exercise;

                if (request.Id == Guid.Empty)
                {
                    exercise = ExerciseFactory.Create(request.Type);
                    Context.Exercises.Add(exercise);
                }
                else
                {
                    switch (request.Type)
                    {
                    case "fill":
                        exercise = await Context.Exercises.OfType <FillTheBlanksExercise>()
                                   .Include(x => x.Sentences)
                                   .SingleOrDefaultAsync(x => x.Id == request.Id, cancellationToken);

                        break;

                    default: throw new Exception("Unrecognized exercise type");
                    }
                }

                Mapper.Map(request, exercise);

                await Context.SaveChangesAsync(cancellationToken);

                return(Mapper.Map <ExerciseDto>(exercise));
            }
 public static async Task Main()
 {
     try
     {
         await ExerciseFactory.ExerciseCreate("Curse_CSharpProgramming_FromNoviceToSpecialist.Exercises.Section9.Section9Exercise3").DoExercise();
     }
     catch (ArgumentException e)
     {
         Console.WriteLine(e.Message);
     }
 }
Beispiel #12
0
        public void WhenWeCreateInitialExerciseWeShouldGetAValidExercise()
        {
            var cache    = new ExerciseFactoryCache();
            var factory  = new ExerciseFactory(new MockRandomNumberGenerator(new int[] { 1, 2 }), cache);
            var exercise = factory.CreateInitialExercise();

            Assert.IsNotNull(exercise);
            Assert.IsNotNull(exercise.QuestionToAsk);
            Assert.AreEqual("1 + 2 = ?", exercise.QuestionToAsk.EquationWithoutAnswer);
            Assert.AreEqual("1 + 2 = 3", factory.GetAnswer(exercise.QuestionToAsk));
            Assert.IsTrue(exercise.QuestionToAsk.TimeToAnswer > 0);
            Assert.AreEqual(Rank.Beginner, exercise.QuestionToAsk.Rank);
        }
Beispiel #13
0
        public Exercise GetNextExercise(Exercise exercise)
        {
            if (exercise == null)
            {
                return(ExerciseFactory.Create(RankLevel.Beginner));
            }

            if (PromoteToNextLevel(exercise.QuestionNumber))
            {
                var currentRank = GetNextLevel(exercise.Rank);
                return(ExerciseFactory.Create(currentRank));
            }
            return(ExerciseFactory.Create(exercise.Rank, exercise.QuestionNumber + 1));
        }
Beispiel #14
0
        static void Main(string[] args)
        {
            Console.WriteLine("Exercises!");

            // My goal here
            // I want to see all available exercises in the system
            // I select one specific exercise and see the basic information about it (description, parameters, example, test action)
            // Test action: executes the test with the provided parameters and returns the result
            // exercise.Execute

            var collection = new ServiceCollection();

            collection.AddScoped <IExerciseRepository, ExerciseRepository>();
            collection.AddScoped <IExerciseManager, ExerciseManager>();
            collection.AddScoped <IParameter, ParameterValue>();

            var serviceProvider = collection.BuildServiceProvider();
            var manager         = serviceProvider.GetService <IExerciseManager>();
            var exercises       = manager.GetAll();

            foreach (var exercise in exercises)
            {
                Console.WriteLine(exercise.ToString());
            }

            var arrayIntSumExercise = exercises.ElementAt(0);
            var exerciseInstance    = ExerciseFactory.Create(arrayIntSumExercise.AssemblyName, arrayIntSumExercise.ParameterTypeEnum);
            var param          = ParamFactory.CreateParameter("1 2 9 10", ParameterTypeEnum.ArrayInt);
            var expectedResult = new int[5] {
                1, 2, 9, 1, 1
            };
            var result = exerciseInstance.Execute(param);

            if (result == expectedResult)
            {
                Console.WriteLine("Test: Ok");
            }
            else
            {
                Console.WriteLine("Test: Failed");
            }

            // My goal in future
            // I want to see all available exercises in the system
            // I select one specific exercise and see the basic information about it (description, parameters, example, submit code, see results)
            // Submit code action: system interprets the code (must have the same parameters), compiles and executes using unit tests (mock data)
            // See results action: system show results of unit tests (when they finish)

            Console.ReadLine();
        }
Beispiel #15
0
        static void ExecuteExerciseAsync(int exerciseCode)
        {
            IExercise Exercise;

            Exercise = ExerciseFactory.Create(exerciseCode);
            if (Exercise == null)
            {
                Console.WriteLine("Error 404! Exercise not found!");
            }
            else
            {
                Exercise.Execute();
                Console.WriteLine("Exercise successfully executed!");
            }
        }
        public ExerciseResult <T> ExecuteExercise <T>(string parameterValue, IExercise exercise)
        {
            // 1 - Instantiate the Exercise
            var execution = ExerciseFactory.Create(exercise.AssemblyName, exercise.ParameterTypeEnum);

            // 2 - Convert the provided parameter values to the respective parameter of the exercise
            var parameterValueConverted = ParamFactory.CreateParameter(parameterValue, exercise.ParameterTypeEnum);

            // 3 - Execute the exercise based on the parameter values
            var result = execution.Execute(parameterValueConverted);

            return(new ExerciseResult <T>()
            {
                Success = true,
                ResultValue = (T)result
            });
        }
Beispiel #17
0
        public Quiz(
            string title,
            ExerciseFactory factory,
            Randomizer randomizer,
            MapperConfiguration mapperConfig,
            List <Idiom> idioms = null
            )
        {
            this.QuizId           = Guid.NewGuid();
            this.Title            = title;
            this.Exercises        = new List <Exercise>();
            this.IdiomsCollection = new List <IdiomInCollection>();
            this.exerciseFactory  = factory;
            this.randomizer       = randomizer;
            this.mapperConfig     = mapperConfig;

            if (idioms != null)
            {
                AddToIdiomsCollection(idioms);
                AddAutoExercises(3, 5);
            }
        }
        private async void AddExerciseToDatabase(int id)
        {
            Exercise exercise1 = ExerciseFactory.CreateExercise("Touwtje springen");

            exercise1.Id = id;
            exercise1.ExerciseRequirements = new List <ExerciseRequirement>()
            {
                ExerciseFactory.CreateExerciseRequirement("Touw")
            };
            exercise1.ExerciseSteps = new List <ExerciseStep>()
            {
                ExerciseFactory.CreateExerciseStep(1, "Spring 30 keer"),
                ExerciseFactory.CreateExerciseStep(2, "Rust"),
                ExerciseFactory.CreateExerciseStep(3, "Spring nog eens 30 keer")
            };
            exercise1.ExerciseForms = new List <ExerciseForm>()
            {
                ExerciseFactory.CreateExerciseForm(MovementForm.springen),
                ExerciseFactory.CreateExerciseForm(MovementForm.balans)
            };
            await this.exerciseRepository.CreateAsync(exercise1);
        }
Beispiel #19
0
        public void WhenWeCallCreateNextExerciseWithMultipleTimesWithTheCorrectAnswerWeChangeRank()
        {
            var cache   = new ExerciseFactoryCache();
            var factory = new ExerciseFactory(new MockRandomNumberGenerator(new int[]
            {
                9, -3,
                2, 3,
                3, 3,
                4, 4
            }), cache);

            var initialExercise = factory.CreateInitialExercise();
            var secondExercise  = factory.CreateNextExercise(new Answer()
            {
                AssociatedExercise = initialExercise,
                EquationWithAnswer = "9 + -3 = 6",
            });

            var thirdExercise = factory.CreateNextExercise(new Answer()
            {
                AssociatedExercise = secondExercise,
                EquationWithAnswer = "2 + 3 = 5",
            });

            var forthExercise = factory.CreateNextExercise(new Answer()
            {
                AssociatedExercise = thirdExercise,
                EquationWithAnswer = "3 + 3 = 6",
            });

            // should be 4 + 4
            Assert.IsNotNull(forthExercise);
            Assert.AreEqual("4 + 4 = ?", forthExercise.QuestionToAsk.EquationWithoutAnswer);
            Assert.AreEqual("4 + 4 = 8", factory.GetAnswer(forthExercise.QuestionToAsk));

            Assert.AreEqual(Rank.Intermmediate, forthExercise.QuestionToAsk.Rank);
            Assert.AreEqual(1, forthExercise.QuestionToAsk.QuestionNumberWithinCurrentRank);
        }
Beispiel #20
0
 public void UpdateExercise(int id, string name, int weight, int repetitions, string skillevel)
 {
     ExerciseFactory.CreateExerciseDAL().UpdateExercise(id, name, weight, repetitions, skillevel);
 }
Beispiel #21
0
        private async void FillDatabase(bool withNonRealExercises = true)
        {
            // create first exercise
            Exercise exercise1 = ExerciseFactory.CreateExercise("Touwtje springen");

            exercise1.ExerciseRequirements = new List <ExerciseRequirement>()
            {
                ExerciseFactory.CreateExerciseRequirement("Touw")
            };
            exercise1.ExerciseSteps = new List <ExerciseStep>()
            {
                ExerciseFactory.CreateExerciseStep(1, "Spring 30 keer"),
                ExerciseFactory.CreateExerciseStep(2, "Rust"),
                ExerciseFactory.CreateExerciseStep(3, "Spring nog eens 30 keer")
            };
            exercise1.ExerciseForms = new List <ExerciseForm>()
            {
                ExerciseFactory.CreateExerciseForm(MovementForm.springen),
                ExerciseFactory.CreateExerciseForm(MovementForm.balans)
            };
            await this.exerciseRepository.CreateAsync(exercise1);

            // create second exercise
            Exercise exercise2 = ExerciseFactory.CreateExercise("Voetballen");

            exercise2.ExerciseRequirements = new List <ExerciseRequirement>()
            {
                ExerciseFactory.CreateExerciseRequirement("Voetbal"),
                ExerciseFactory.CreateExerciseRequirement("Voetbalschoenen")
            };
            exercise2.ExerciseSteps = new List <ExerciseStep>()
            {
                ExerciseFactory.CreateExerciseStep(1, "Houd 40 keer hoog"),
                ExerciseFactory.CreateExerciseStep(2, "Rust"),
                ExerciseFactory.CreateExerciseStep(3, "Probeer je record te verbreken")
            };
            exercise2.ExerciseForms = new List <ExerciseForm>()
            {
                ExerciseFactory.CreateExerciseForm(MovementForm.mikken),
                ExerciseFactory.CreateExerciseForm(MovementForm.balans)
            };
            await this.exerciseRepository.CreateAsync(exercise2);

            // create third exercise
            Exercise exercise3 = ExerciseFactory.CreateExercise("Ping pong");

            exercise3.ExerciseRequirements = new List <ExerciseRequirement>()
            {
                ExerciseFactory.CreateExerciseRequirement("Ping pong batjes"),
                ExerciseFactory.CreateExerciseRequirement("Ping pong balletje")
            };
            exercise3.ExerciseSteps = new List <ExerciseStep>()
            {
                ExerciseFactory.CreateExerciseStep(1, "Probeer de ping pong bal 20 keer hoog te houden"),
                ExerciseFactory.CreateExerciseStep(2, "Probeer het nog eens"),
                ExerciseFactory.CreateExerciseStep(3, "Ben je niet alleen? Probeer dan een 1 v 1")
            };
            exercise3.ExerciseForms = new List <ExerciseForm>()
            {
                ExerciseFactory.CreateExerciseForm(MovementForm.mikken)
            };
            await this.exerciseRepository.CreateAsync(exercise3);

            if (withNonRealExercises)
            {
                // create exercise without requirements
                Exercise exercise4 = ExerciseFactory.CreateExercise("Exercise zonder benodigdheden");
                exercise4.ExerciseRequirements = new List <ExerciseRequirement>()
                {
                };
                exercise4.ExerciseSteps = new List <ExerciseStep>()
                {
                    ExerciseFactory.CreateExerciseStep(1, "Step1")
                };
                exercise4.ExerciseForms = new List <ExerciseForm>()
                {
                    ExerciseFactory.CreateExerciseForm(MovementForm.springen)
                };
                await this.exerciseRepository.CreateAsync(exercise4);

                // create exercise without steps
                Exercise exercise5 = ExerciseFactory.CreateExercise("Exercise zonder stappen");
                exercise5.ExerciseRequirements = new List <ExerciseRequirement>()
                {
                    ExerciseFactory.CreateExerciseRequirement("Requirement1")
                };
                exercise5.ExerciseSteps = new List <ExerciseStep>()
                {
                };
                exercise5.ExerciseForms = new List <ExerciseForm>()
                {
                    ExerciseFactory.CreateExerciseForm(MovementForm.springen)
                };
                await this.exerciseRepository.CreateAsync(exercise5);

                // create exercise without movement forms
                Exercise exercise6 = ExerciseFactory.CreateExercise("Exercise zonder beweegvormen");
                exercise6.ExerciseRequirements = new List <ExerciseRequirement>()
                {
                    ExerciseFactory.CreateExerciseRequirement("Requirement1")
                };
                exercise6.ExerciseSteps = new List <ExerciseStep>()
                {
                    ExerciseFactory.CreateExerciseStep(1, "Step1")
                };
                exercise6.ExerciseForms = new List <ExerciseForm>()
                {
                };
                await this.exerciseRepository.CreateAsync(exercise6);
            }
        }
Beispiel #22
0
 public Exercise GetFirstExercise()
 {
     return(ExerciseFactory.Create(RankLevel.Beginner));
 }