Example #1
0
        public void ShouldThrowArgumentException_WhenDishesCountParameterIsNegative(int invalidDishesCount)
        {
            var mockDbSet     = new Mock <DbSet <Dish> >();
            var mockDbContext = new Mock <IWhenItsDoneDbContext>();

            mockDbContext.Setup(mock => mock.Set <Dish>()).Returns(mockDbSet.Object);

            var asyncDishesRepositoryInstace = new DishesAsyncRepository(mockDbContext.Object);

            var fakeData = new List <Dish>()
            {
                new Mock <Dish>().Object,
                new Mock <Dish>().Object,
                new Mock <Dish>().Object,
                new Mock <Dish>().Object,
                new Mock <Dish>().Object,
                new Mock <Dish>().Object
            }
            .AsQueryable();

            mockDbSet.As <IQueryable <Dish> >().Setup(m => m.Provider).Returns(fakeData.Provider);
            mockDbSet.As <IQueryable <Dish> >().Setup(m => m.Expression).Returns(fakeData.Expression);
            mockDbSet.As <IQueryable <Dish> >().Setup(m => m.ElementType).Returns(fakeData.ElementType);
            mockDbSet.As <IQueryable <Dish> >().Setup(m => m.GetEnumerator()).Returns(fakeData.GetEnumerator());

            Assert.That(
                async() => await asyncDishesRepositoryInstace.GetTopCountDishesByRating(invalidDishesCount),
                Throws.InstanceOf <ArgumentException>().With.Message.Contains("dishesCount parameter must be greater than or equal to 0."));
        }
Example #2
0
        public void ShouldCreateAnObjectWhichImplementsIAsyncRepository()
        {
            var fakeDbSet     = new Mock <DbSet <Dish> >();
            var mockDbContext = new Mock <IWhenItsDoneDbContext>();

            mockDbContext.Setup(mock => mock.Set <Dish>()).Returns(fakeDbSet.Object);

            var asyncDishesRepository = new DishesAsyncRepository(mockDbContext.Object);

            Assert.That(asyncDishesRepository, Is.InstanceOf <IDishesAsyncRepository>());
        }
Example #3
0
        public void ShouldReturnCreateSampleDataWithThreeElements_WhenAccessingDbSetThrows()
        {
            Mapper.Initialize(config =>
            {
                config.CreateMap <Dish, NamePhotoRatingDishViewDTO>()
                .ForMember(dest => dest.Name, opts => opts.MapFrom(src => src.Recipe.Name));
            });

            var mockDbSet     = new Mock <DbSet <Dish> >();
            var mockDbContext = new Mock <IWhenItsDoneDbContext>();

            mockDbContext.Setup(mock => mock.Set <Dish>()).Returns(mockDbSet.Object);

            var asyncDishesRepositoryInstace = new DishesAsyncRepository(mockDbContext.Object);

            var ratingValues = new[] { 42, 32, 33, 100, 50, -33, -42 };
            var fakeData     = new List <Dish>();

            for (int i = 0; i < ratingValues.Length; i++)
            {
                var nextDish = new Mock <Dish>();
                var nextDto  = new Mock <NamePhotoRatingDishViewDTO>();
                nextDish.Object.Rating = ratingValues[i];
                nextDish.SetupGet(dish => dish.Recipe).Returns(new Mock <Recipe>().Object);
                nextDish.SetupGet(dish => dish.PhotoItems).Returns(new List <PhotoItem>()
                {
                    new Mock <PhotoItem>().Object
                });
                nextDish.Object.Recipe.Name = i.ToString();
                nextDto.Object.Name         = i.ToString();
                nextDto.Object.Rating       = ratingValues[i];

                fakeData.Add(nextDish.Object);
            }

            var fakeDataQueryable = fakeData.AsQueryable();

            mockDbSet.As <IQueryable <Dish> >().Setup(m => m.Provider).Throws(new ArgumentException());
            mockDbSet.As <IQueryable <Dish> >().Setup(m => m.Expression).Returns(fakeDataQueryable.Expression);
            mockDbSet.As <IQueryable <Dish> >().Setup(m => m.ElementType).Returns(fakeDataQueryable.ElementType);
            mockDbSet.As <IQueryable <Dish> >().Setup(m => m.GetEnumerator()).Returns(fakeDataQueryable.GetEnumerator());

            var dishesCount = 3;
            var actualReturnedCollection = asyncDishesRepositoryInstace.GetTopCountDishesByRating(dishesCount);
            var actualResult             = actualReturnedCollection.Result;

            var bindingFlags = BindingFlags.NonPublic | BindingFlags.Instance;
            var sampleNamePhotoDishViewDataField = typeof(DishesAsyncRepository).GetField("sampleNamePhotoRatingDishViewData", bindingFlags);
            var sampleNamePhotoDishViewDataValue = (IEnumerable <NamePhotoRatingDishViewDTO>)sampleNamePhotoDishViewDataField.GetValue(asyncDishesRepositoryInstace);

            Assert.That(sampleNamePhotoDishViewDataValue.Count(), Is.EqualTo(3));
        }
Example #4
0
        public void ShouldReturnCollection_WhichContainsLessThanOrEqualToDishesCountItems(int dishesCount)
        {
            Mapper.Initialize(config =>
            {
                config.CreateMap <Dish, NamePhotoRatingDishViewDTO>()
                .ForMember(dest => dest.Name, opts => opts.MapFrom(src => src.Recipe.Name));
            });

            var mockDbSet     = new Mock <DbSet <Dish> >();
            var mockDbContext = new Mock <IWhenItsDoneDbContext>();

            mockDbContext.Setup(mock => mock.Set <Dish>()).Returns(mockDbSet.Object);

            var asyncDishesRepositoryInstace = new DishesAsyncRepository(mockDbContext.Object);

            var ratingValues = new[] { 42, 32, 33, 100, 50, -33, -42 };
            var fakeData     = new List <Dish>();

            for (int i = 0; i < ratingValues.Length; i++)
            {
                var nextDish = new Mock <Dish>();
                var nextDto  = new Mock <NamePhotoRatingDishViewDTO>();
                nextDish.Object.Rating = ratingValues[i];
                nextDish.SetupGet(dish => dish.Recipe).Returns(new Mock <Recipe>().Object);
                nextDish.SetupGet(dish => dish.PhotoItems).Returns(new List <PhotoItem>()
                {
                    new Mock <PhotoItem>().Object
                });
                nextDish.Object.Recipe.Name = i.ToString();
                nextDto.Object.Name         = i.ToString();
                nextDto.Object.Rating       = ratingValues[i];

                fakeData.Add(nextDish.Object);
            }

            var fakeDataQueryable = fakeData.AsQueryable();

            mockDbSet.As <IQueryable <Dish> >().Setup(m => m.Provider).Returns(fakeDataQueryable.Provider);
            mockDbSet.As <IQueryable <Dish> >().Setup(m => m.Expression).Returns(fakeDataQueryable.Expression);
            mockDbSet.As <IQueryable <Dish> >().Setup(m => m.ElementType).Returns(fakeDataQueryable.ElementType);
            mockDbSet.As <IQueryable <Dish> >().Setup(m => m.GetEnumerator()).Returns(fakeDataQueryable.GetEnumerator());

            var actualReturnedCollection = asyncDishesRepositoryInstace.GetTopCountDishesByRating(dishesCount);
            var actualResult             = actualReturnedCollection.Result;

            Assert.That(actualResult.Count(), Is.LessThanOrEqualTo(dishesCount));
        }
Example #5
0
        public void ShouldReturnTaskOfCorrectStatus_WhenItemIsFound()
        {
            var mockDbSet     = new Mock <DbSet <Dish> >();
            var mockDbContext = new Mock <IWhenItsDoneDbContext>();

            mockDbContext.Setup(mock => mock.Set <Dish>()).Returns(mockDbSet.Object);

            var asyncDishesRepositoryInstace = new DishesAsyncRepository(mockDbContext.Object);

            var fakeData = new List <Dish>()
            {
                new Mock <Dish>().Object,
                new Mock <Dish>().Object,
                new Mock <Dish>().Object,
                new Mock <Dish>().Object
            };

            mockDbSet.As <IDbSet <Dish> >().Setup(mock => mock.GetEnumerator()).Returns(fakeData.GetEnumerator());

            var dishesCount = 3;
            var actualReturnedCollection = asyncDishesRepositoryInstace.GetTopCountDishesByRating(dishesCount);

            Assert.That(actualReturnedCollection.Status, Is.EqualTo(TaskStatus.Running).Or.EqualTo(TaskStatus.WaitingToRun).Or.EqualTo(TaskStatus.RanToCompletion));
        }
Example #6
0
        public void ShouldReturnTaskOfCorrectType_WhenItemIsFound()
        {
            var mockDbSet     = new Mock <DbSet <Dish> >();
            var mockDbContext = new Mock <IWhenItsDoneDbContext>();

            mockDbContext.Setup(mock => mock.Set <Dish>()).Returns(mockDbSet.Object);

            var asyncDishesRepositoryInstace = new DishesAsyncRepository(mockDbContext.Object);

            var fakeData = new List <Dish>()
            {
                new Mock <Dish>().Object,
                new Mock <Dish>().Object,
                new Mock <Dish>().Object,
                new Mock <Dish>().Object
            };

            mockDbSet.As <IDbSet <Dish> >().Setup(mock => mock.GetEnumerator()).Returns(fakeData.GetEnumerator());

            var dishesCount = 3;
            var actualReturnedCollection = asyncDishesRepositoryInstace.GetTopCountDishesByRating(dishesCount);

            Assert.That(actualReturnedCollection.GetType(), Is.EqualTo(typeof(Task <ICollection <NamePhotoRatingDishViewDTO> >)));
        }
Example #7
0
        public void ShouldReturnCollection_WhichIsSortedInDescendingOrderByRating()
        {
            Mapper.Initialize(config =>
            {
                config.CreateMap <Dish, NamePhotoRatingDishViewDTO>()
                .ForMember(dest => dest.Name, opts => opts.MapFrom(src => src.Recipe.Name));
            });

            var mockDbSet     = new Mock <DbSet <Dish> >();
            var mockDbContext = new Mock <IWhenItsDoneDbContext>();

            mockDbContext.Setup(mock => mock.Set <Dish>()).Returns(mockDbSet.Object);

            var asyncDishesRepositoryInstace = new DishesAsyncRepository(mockDbContext.Object);

            var firstDish = new Mock <Dish>();
            var firstDto  = new Mock <NamePhotoRatingDishViewDTO>();

            firstDish.Object.Rating = 100;
            firstDish.SetupGet(dish => dish.Recipe).Returns(new Mock <Recipe>().Object);
            firstDish.SetupGet(dish => dish.PhotoItems).Returns(new List <PhotoItem>()
            {
                new Mock <PhotoItem>().Object
            });
            firstDish.Object.Recipe.Name = "first";
            firstDto.Object.Name         = "first";

            var secondDish = new Mock <Dish>();
            var secondDto  = new Mock <NamePhotoRatingDishViewDTO>();

            secondDish.Object.Rating = 50;
            secondDish.SetupGet(dish => dish.Recipe).Returns(new Mock <Recipe>().Object);
            secondDish.SetupGet(dish => dish.PhotoItems).Returns(new List <PhotoItem>()
            {
                new Mock <PhotoItem>().Object
            });
            secondDish.Object.Recipe.Name = "second";
            secondDto.Object.Name         = "second";

            var thirdDish = new Mock <Dish>();
            var thirdDto  = new Mock <NamePhotoRatingDishViewDTO>();

            thirdDish.Object.Rating = -33;
            thirdDish.SetupGet(dish => dish.Recipe).Returns(new Mock <Recipe>().Object);
            thirdDish.SetupGet(dish => dish.PhotoItems).Returns(new List <PhotoItem>()
            {
                new Mock <PhotoItem>().Object
            });
            thirdDish.Object.Recipe.Name = "third";
            thirdDto.Object.Name         = "third";

            var forthDish = new Mock <Dish>();
            var forthDto  = new Mock <NamePhotoRatingDishViewDTO>();

            forthDish.Object.Rating = -42;
            forthDish.SetupGet(dish => dish.Recipe).Returns(new Mock <Recipe>().Object);
            forthDish.SetupGet(dish => dish.PhotoItems).Returns(new List <PhotoItem>()
            {
                new Mock <PhotoItem>().Object
            });
            forthDish.Object.Recipe.Name = "forth";
            forthDto.Object.Name         = "forth";

            var fakeData = new List <Dish>()
            {
                forthDish.Object,
                firstDish.Object,
                thirdDish.Object,
                secondDish.Object
            }
            .AsQueryable();

            mockDbSet.As <IQueryable <Dish> >().Setup(m => m.Provider).Returns(fakeData.Provider);
            mockDbSet.As <IQueryable <Dish> >().Setup(m => m.Expression).Returns(fakeData.Expression);
            mockDbSet.As <IQueryable <Dish> >().Setup(m => m.ElementType).Returns(fakeData.ElementType);
            mockDbSet.As <IQueryable <Dish> >().Setup(m => m.GetEnumerator()).Returns(fakeData.GetEnumerator());

            var dishesCount = 3;
            var actualReturnedCollection = asyncDishesRepositoryInstace.GetTopCountDishesByRating(dishesCount);

            var expectedResult = new List <NamePhotoRatingDishViewDTO>()
            {
                firstDto.Object, secondDto.Object, thirdDto.Object
            };
            var actualResult = actualReturnedCollection.Result;

            var dishesAreSorted = true;
            var index           = 0;

            foreach (var dto in actualResult)
            {
                if (dto.Name != expectedResult[index++].Name)
                {
                    dishesAreSorted = false;
                    break;
                }
            }

            Assert.That(dishesAreSorted, Is.True);
        }