public function testItShould_fetchRandomExercise()
 {
     $previousExerciseId = rand(1, 100);
     $exercise = $this->createExercise();
     $this->exerciseRepository->method('fetchRandomExerciseOfLesson')->with($this->lesson->id, $this->user->id, $previousExerciseId)->willReturn($exercise);
     $this->assertEquals($exercise, $this->lesson->fetchRandomExercise($this->user->id, $previousExerciseId));
 }
 private function assertExerciseCanWin(Lesson $lesson, int $userId, int $exerciseId, int $previousId = null)
 {
     // 1000 retries is more then enough
     $counter = 1000;
     do {
         if (!$counter--) {
             $this->fail('Unable to fetch random exercise.');
         }
         $result = $lesson->fetchRandomExercise($userId, $previousId);
         $this->assertInstanceOf(Exercise::class, $result);
     } while ($result->id != $exerciseId && $result->id && $previousId);
 }
 /**
  * @param FetchRandomExerciseOfLessonRequest $request
  * @param Lesson $lesson
  * @return JsonResponse
  * @throws NotEnoughExercisesException
  */
 public function fetchRandomExerciseOfLesson(FetchRandomExerciseOfLessonRequest $request, Lesson $lesson)
 {
     $exercise = $lesson->fetchRandomExercise($this->user()->id, $request->previous_exercise_id);
     return $this->response($exercise);
 }