public void SearchShouldWorkProperly()
        {
            var model = new SearchDogViewModel
            {
                Province      = Province.SofiaCityProvince,
                Breed         = DogBreed.Affenpinscher,
                IsDisinfected = false,
                IsVaccinated  = false,
                HasVetNotes   = false,
                MaxAge        = 20,
                MinAge        = 0
            };

            var result = dogsController.Search(model) as ViewResult;

            var res = result.Model as List <DogViewModel>;

            Assert.IsInstanceOf <List <DogViewModel> >(res);

            Assert.AreEqual(0, res.Count);

            this.createDog.Name          = "Pavel";
            this.createDog.Breed         = DogBreed.Affenpinscher;
            this.createDog.BirthDate     = DateTime.Parse("20.01.2019");
            this.createDog.Province      = Province.SofiaCityProvince;
            this.createDog.IsDisinfected = false;
            this.createDog.IsVaccinated  = true;

            this.dogsController.New(this.createDog);

            var resultat = dogsController.Search(model) as ViewResult;

            var final = resultat.Model as List <DogViewModel>;

            Assert.AreEqual(1, final.Count);

            Assert.AreEqual("Pavel", final.First().Name);

            Assert.AreEqual("SearchResults", resultat.ViewName);

            model.IsDisinfected = true;

            var newResult = dogsController.Search(model) as ViewResult;

            var newRes = newResult.Model as List <DogViewModel>;

            Assert.AreEqual(0, newRes.Count);
        }
Example #2
0
        public IActionResult Search(SearchDogViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var dogs = new List <Dog>();

            dogs = context
                   .Dogs
                   .Include(d => d.Owner)
                   .Include(d => d.Vet)
                   .Include(d => d.VetNotes)
                   .Include(d => d.Images)
                   .ToList()
                   .Where(d => DateTime.Now.Subtract(d.BirthDate).Days >= model.MinAge * 365 &&
                          DateTime.Now.Subtract(d.BirthDate).Days <= model.MaxAge * 365 &&
                          d.Province == model.Province &&
                          d.Breed == model.Breed &&
                          d.Gender == model.Gender &&
                          d.Adopted == false)
                   .ToList();

            if (model.IsVaccinated == true)
            {
                foreach (var dog in dogs.Where(d => d.IsVaccinated == false).ToList())
                {
                    dogs.Remove(dog);
                }
            }

            if (model.IsDisinfected == true)
            {
                foreach (var dog in dogs.Where(d => d.IsDisinfected == false).ToList())
                {
                    dogs.Remove(dog);
                }
            }

            if (model.IsCastrated == true)
            {
                foreach (var dog in dogs.Where(d => d.IsCastrated == false).ToList())
                {
                    dogs.Remove(dog);
                }
            }

            if (model.HasVetNotes == true)
            {
                foreach (var dog in dogs.Where(d => d.VetNotes.Count == 0).ToList())
                {
                    dogs.Remove(dog);
                }
            }

            var result = new List <DogViewModel>();

            foreach (var dog in dogs)
            {
                var dogModel = new DogViewModel
                {
                    Id            = dog.Id,
                    Name          = dog.Name,
                    Gender        = dog.Gender,
                    BirthDate     = dog.BirthDate,
                    Province      = dog.Province,
                    IsVaccinated  = dog.IsVaccinated,
                    IsDisinfected = dog.IsDisinfected,
                    IsCastrated   = dog.IsCastrated,
                    Owner         = dog.Owner.FirstName + " " + dog.Owner.LastName,
                    OwnerNotes    = dog.OwnerNotes,
                    Vet           = dog.Vet != null ? dog.Vet.FirstName + " " + dog.Vet.LastName : "No vet",
                    Breed         = dog.Breed
                };

                foreach (var pic in dog.Images)
                {
                    dogModel.Images.Add(pic.Id, pic.ImageUrl);
                }

                result.Add(dogModel);
            }

            return(View("SearchResults", result));
        }