public async Task ItShouldSearchAllExistingCoursesWithAnEmptyCriteria()
        {
            var existingCourse        = BackofficeCourseMother.Random();
            var anotherExistingCourse = BackofficeCourseMother.Random();

            var existingCourses = new List <BackofficeCourse>
            {
                existingCourse, anotherExistingCourse
            };

            await ElasticRepository.Save(existingCourse);

            await ElasticRepository.Save(anotherExistingCourse);

            await WaitFor(async() => (await ElasticRepository.SearchAll()).Any());

            Assert.Equal(existingCourses, (await ElasticRepository.Matching(CriteriaMother.Empty())).ToList());
        }
        public async Task ItShouldFilterByCriteria()
        {
            var dddInPhpCourse      = BackofficeCourseMother.WithName("DDD en PHP");
            var dddInCSharpCourse   = BackofficeCourseMother.WithName("DDD en C#");
            var exprimiendoIntellij = BackofficeCourseMother.WithName("Exprimiendo Intellij");

            var courses = new List <BackofficeCourse>()
            {
                dddInPhpCourse, dddInCSharpCourse
            };

            var nameContainsDddCriteria = BackofficeCourseCriteriaMother.NameContains("DDD");

            await ElasticRepository.Save(dddInPhpCourse);

            await ElasticRepository.Save(dddInCSharpCourse);

            await ElasticRepository.Save(exprimiendoIntellij);

            await WaitFor(async() => (await ElasticRepository.Matching(nameContainsDddCriteria)).Any());

            Assert.Equal(courses, (await ElasticRepository.Matching(nameContainsDddCriteria)).ToList());
        }