예제 #1
0
        public void GetMunros_WhenCalledWithSpecificCategory_ReturnsOnlyMunrosWithThatCategory(int numMuns, int numTops, HillCategory category)
        {
            const int numBlanks       = 20;
            var       fakeDataContext = FakeMunroDataContext.GenerateFakeMunroDataContext(numMuns, numTops, numBlanks, 10, 1000);

            var service = new MunroService(fakeDataContext, testMapper);

            var result = service.GetMunros(new MunroQuery
            {
                Category = category
            }).ToList();

            switch (category)
            {
            case HillCategory.Munro:
                Assert.Equal(numMuns, result.Count);
                Assert.All(result, munro => Assert.Equal("MUN", munro.HillCategory));
                break;

            case HillCategory.Top:
                Assert.Equal(numTops, result.Count);
                Assert.All(result, munro => Assert.Equal("TOP", munro.HillCategory));
                break;

            case HillCategory.Either:
                Assert.Equal(numMuns + numTops, result.Count);
                Assert.All(result, munro => Assert.NotEqual("", munro.HillCategory));
                break;
            }

            Assert.NotEqual(result.Count, fakeDataContext.Munros.Count());
        }
예제 #2
0
        public void ShouldReturnGreaterThanOrEqualOfHeightMetres_And_SortHeightMetresDescending_Munros()
        {
            var munrosService = new MunroService(_invokeHandler, _expressionBuilder);

            var conditions = new List <Condition>
            {
                new Condition
                {
                    ColumnName = nameof(MunroModel.HeightMetres),
                    Type       = ConditionType.GreaterThanOrEqual, Values = new object[] { 1000.0 }
                }
            };

            var sorts = new List <Sort>
            {
                new Sort
                {
                    ColumnName = nameof(MunroModel.HeightMetres),
                    Type       = SortDirectionType.Descending
                }
            };

            var result = munrosService.GetMunrosByQuery(_munros, conditions, sorts, null);

            Assert.True(result.IsSuccess);
            Assert.NotNull(result.Result);
            Assert.IsNotEmpty(result.Result);
            Assert.AreEqual(result.Result.Count(), 2);
            Assert.That(result.Result, Is.Ordered.Descending.By("HeightMetres"));
        }
예제 #3
0
        public void GetMunros_WhenCalledWithValidMinAndMaxHeightsEitherCategory_ReturnsOnlyMunrosWithinHeightRange()
        {
            var fakeMunros = FakeMunroDataContext.GenerateFakeMunros(10, 10, 5, 600, 1500);

            const int minimumHeight = 650;
            const int maximumHeight = 1250;


            var count = fakeMunros.Count(fm => !string.IsNullOrEmpty(fm.HillCategoryPost1997) &&
                                         fm.HeightInMetres >= minimumHeight &&
                                         fm.HeightInMetres <= maximumHeight);


            var fakeDataContext = new FakeMunroDataContext(fakeMunros);

            var service = new MunroService(fakeDataContext, testMapper);

            var result = service.GetMunros(new MunroQuery
            {
                MinHeightInMetres = minimumHeight,
                MaxHeightInMetres = maximumHeight
            }).ToList();

            Assert.Equal(count, result.Count);
            Assert.NotEqual(fakeMunros.Count, result.Count);

            Assert.All(result, munro => Assert.InRange(munro.HeightInMetres, minimumHeight, maximumHeight));
        }
        public MunroControllerTest()
        {
            var dataContext = new MunroDataContext();
            var service     = new MunroService(dataContext, MockAutoMapper.CreateMockMapper());

            controller = new MunrosController(service);
        }
예제 #5
0
        public void ShouldReturnErrorIfEmptyMunrosList()
        {
            var munrosService = new MunroService(_invokeHandler, _expressionBuilder);

            var result = munrosService.GetMunrosByQuery(null, null, null, null);

            Assert.Null(result.Exception);
            Assert.False(result.IsSuccess);
            Assert.Null(result.Result);
            Assert.AreEqual(ResultCode.ObjectMissing, result.Code);
        }
예제 #6
0
        public void ShouldReturn_Limit_Munros(int limit)
        {
            var munrosService = new MunroService(_invokeHandler, _expressionBuilder);

            var result = munrosService.GetMunrosByQuery(_munros, null, null, limit);

            Assert.True(result.IsSuccess);
            Assert.NotNull(result.Result);
            Assert.IsNotEmpty(result.Result);
            Assert.AreEqual(result.Result.Count(), limit);
        }
예제 #7
0
        public void GetMunros_WhenCalledWithDefaultMunroQuery_ReturnsAllMunrosWithAPost1997Category()
        {
            const int numberOfMuns = 10;
            const int numberOfTops = 10;
            var       fakeMunros   = FakeMunroDataContext.GenerateFakeMunros(numberOfMuns, numberOfTops, 20, 600, 1500);

            var fakeDataContext = new FakeMunroDataContext(fakeMunros);

            var service = new MunroService(fakeDataContext, testMapper);

            var result = service.GetMunros(new MunroQuery()).ToList();

            Assert.Equal(result.Count, numberOfMuns + numberOfTops);
            Assert.All(result, munro => Assert.NotEqual("", munro.HillCategory));
        }
예제 #8
0
        public void GetMunros_WhenCalledWithLimit_ReturnsLimitNumberOfValidMunros(int limit, int numMuns, int numTops)
        {
            var fakeMunros = FakeMunroDataContext.GenerateFakeMunros(numMuns, numTops, 0, 600, 1500);

            var fakeDataContext = new FakeMunroDataContext(fakeMunros);

            var service = new MunroService(fakeDataContext, testMapper);

            var result = service.GetMunros(new MunroQuery
            {
                Limit = limit
            }).ToList();

            Assert.Equal(result.Count, Math.Min(limit, numMuns + numTops));
            Assert.All(result, munro => Assert.NotEqual("", munro.HillCategory));
        }
예제 #9
0
        public void ShouldReturnEqualHillCategoryMUN_And_EqualHillCategoryTOP_And_RangeOfHeightMetres_SortAscendingByName_And_Limit_Munros()
        {
            var munrosService = new MunroService(_invokeHandler, _expressionBuilder);

            var conditions = new List <Condition>
            {
                new Condition
                {
                    ColumnName = nameof(MunroModel.HillCategory), Type = ConditionType.Equal,
                    Values     = new object[] { HillCategory.MUN }
                },
                new Condition
                {
                    ColumnName = nameof(MunroModel.HillCategory), Type = ConditionType.Equal,
                    Values     = new object[] { HillCategory.TOP }
                },
                new Condition
                {
                    ColumnName = nameof(MunroModel.HeightMetres), Type = ConditionType.Range,
                    Values     = new object[] { 940.0, 2000.0 }
                }
            };

            var sorts = new List <Sort>
            {
                new Sort
                {
                    ColumnName = nameof(MunroModel.HeightMetres),
                    Type       = SortDirectionType.Descending
                },
                new Sort
                {
                    ColumnName = nameof(MunroModel.Name),
                    Type       = SortDirectionType.Ascending
                }
            };

            var result = munrosService.GetMunrosByQuery(_munros, conditions, sorts, 2);

            Assert.True(result.IsSuccess);
            Assert.NotNull(result.Result);
            Assert.IsNotEmpty(result.Result);
            Assert.AreEqual(result.Result.Count(), 2);
            Assert.That(result.Result, Is.Ordered.Descending.By("HeightMetres").Then.Ascending.By("Name"));
        }
예제 #10
0
        public void GetMunros_WhenCalledWithEitherCategorySortByNameDescThenByNameAsc_ReturnsMunrosInCorrectDescendingOrder()
        {
            var fakeMunros = FakeMunroDataContext.GenerateFakeMunros(20, 15, 10, 500, 2000);

            var orderedFakeMunros = fakeMunros.Where(m => !string.IsNullOrEmpty(m.HillCategoryPost1997))
                                    .OrderByDescending(m => m.Name).ToList();

            var fakeDataContext = new FakeMunroDataContext(fakeMunros);

            var service = new MunroService(fakeDataContext, testMapper);

            var result = service.GetMunros(new MunroQuery
            {
                SortBy = "desc(name),asc(name)"
            }).ToList();

            Assert.Equal(orderedFakeMunros.Count, result.Count);

            Assert.Equal(orderedFakeMunros.Select(m => m.Name), result.Select(m => m.Name));
        }
예제 #11
0
        public void ShouldReturnGreaterThanOrEqualOfHeightMetresMunros()
        {
            var munrosService = new MunroService(_invokeHandler, _expressionBuilder);

            var conditions = new List <Condition>
            {
                new Condition
                {
                    ColumnName = nameof(MunroModel.HeightMetres),
                    Type       = ConditionType.GreaterThanOrEqual, Values = new object[] { 1000.0 }
                }
            };

            var result = munrosService.GetMunrosByQuery(_munros, conditions, null, null);

            Assert.True(result.IsSuccess);
            Assert.NotNull(result.Result);
            Assert.IsNotEmpty(result.Result);
            Assert.AreEqual(result.Result.Count(), 2);
        }
예제 #12
0
        public void GetMunros_WhenCalledSortByWithEmptyStringBetweenCriteria_ReturnsMunrosInCorrectOrder()
        {
            var fakeMunros = FakeMunroDataContext.GenerateFakeMunros(20, 15, 10, 500, 2000);

            var orderedFakeMunros = fakeMunros.Where(m => !string.IsNullOrEmpty(m.HillCategoryPost1997))
                                    .OrderByDescending(m => m.Name).ToList();

            var fakeDataContext = new FakeMunroDataContext(fakeMunros);

            var service = new MunroService(fakeDataContext, testMapper);

            var query = new MunroQuery
            {
                SortBy = "desc(name),,asc(name)"
            };

            var result = service.GetMunros(query).ToList();

            Assert.Equal(2, query.SortingCriterias.Count);

            Assert.Equal(orderedFakeMunros.Count, result.Count);

            Assert.Equal(orderedFakeMunros.Select(m => m.Name), result.Select(m => m.Name));
        }