public void Should_return_original_set_when_no_recipe_is_specified( )
        {
            var data = new SampleRepository( ).GetSampleData( );

            var roasted = data.Roast( null );

            Assert.AreEqual( 2, roasted.Count( ) );
        }
        public void Should_return_original_set_when_recipe_has_no_parameters_specified( )
        {
            Recipe testKitchen = new Recipe( );

            var data = new SampleRepository().GetSampleData( );

            var roasted = data.Roast( testKitchen );

            Assert.AreEqual( 2, roasted.Count( ) );
        }
        public void Should_return_one_record_when_one_filter_is_requested( )
        {
            Recipe testKitchen = new Recipe
                                     {
                                         Instructions = new[ ]
                                                      {
                                                          "Address eq 'Test 1'"
                                                      }
                                     };

            var data = new SampleRepository( ).GetSampleData( );

            var roasted = data.Roast( testKitchen );

            Assert.AreEqual( 1, roasted.Count( ) );
        }
        public void Context( )
        {
            _expressionToTest = "Address lk 'Test' and Value gt '20'";

            _set = new InstructionSet<SampleData>( _expressionToTest );

            _repository = new SampleRepository
                              {
                                  DataSource = new[ ]
                                                   {
                                                       new SampleData() {Address = "Test 1"},
                                                       new SampleData() {Address = "Test 2", Value = 21},
                                                       new SampleData() {Address = "Could Not Pass", Value = 45},
                                                       new SampleData() {Address = "No Pass", Value = 33},
                                                   }
                              };
        }
        public void Context( )
        {
            _expressionToTest = "Address lk 'Test' and ( Value gt '20' or AddDate gt '1/1/2011' )";

            _set = new InstructionSet<SampleData>( _expressionToTest );

            _repository = new SampleRepository
                              {
                                  DataSource = new[ ]
                                                   {
                                                       new SampleData() {Address = "Test 1"},
                                                       new SampleData() {Address = "Test 2", Value = 21, AddDate = new DateTime(2012,1,1)},
                                                       new SampleData() {Address = "Could Not Pass", Value = 45},
                                                       new SampleData() {Address = "No Pass", Value = 33},
                                                   }
                              };
        }
        public void Should_build_a_single_expression_when_given_two_query_parameters_with_an_and( )
        {
            var r = new Recipe<SampleData>( "Address lk 'Test' and Value gt '20'" );

            var data = new SampleRepository
                           {
                               DataSource = new[ ]
                                                {
                                                    new SampleData {Address = "Test 2", Value = 21},
                                                    new SampleData {Address = "Test 3", Value = 19},
                                                    new SampleData {Address = "Not like anything else", Value = 30},
                                                }
                           }.DataSource;

            data = data.Where( r.Prepare( ) );

            Assert.AreEqual( 1, data.Count( ) );
        }
        public void Should_filter_list_given_single_decimal_property_equals( )
        {
            const string instruction = "Value eq '23.95'";

            var result = instruction.AsExpressionOf<SampleData>( );

            var data = new SampleRepository
                           {
                               DataSource = new[ ]
                                                {
                                                    new SampleData {Value = 100},
                                                    new SampleData {Value = 23.95M}
                                                }
                           }.DataSource;

            data = data.Where( result.Compile( ) );

            Assert.AreEqual( 1, data.Count( ) );
        }
        public void Should_filter_list_given_single_date_when_asked_for_only_date_property_equals( )
        {
            const string instruction = "AddDate.Date eq '1/1/2012'";

            var result = instruction.AsExpressionOf<SampleData>( );

            var data = new SampleRepository
                           {
                               DataSource = new[ ]
                                                {
                                                    new SampleData {AddDate = new DateTime(2012, 1, 3)},
                                                    new SampleData {AddDate = new DateTime(2012, 1, 1, 23, 55, 0, 0)}
                                                }
                           }.DataSource;

            data = data.Where( result.Compile( ) );

            Assert.AreEqual( 1, data.Count( ) );
        }
        public void Should_filter_list_given_date_property_in( )
        {
            const string instruction = "AddDate.Date in '1/1/2012','1/1/2011'";

            var result = instruction.AsExpressionOf<SampleData>( );

            var data = new SampleRepository
                           {
                               DataSource = new[ ]
                                                {
                                                    new SampleData() {AddDate = new DateTime(2012, 1, 1)},
                                                    new SampleData() {AddDate = new DateTime(2011, 1, 1)},
                                                    new SampleData() {AddDate = new DateTime(2010, 1, 1)}
                                                }
                           }.DataSource;

            data = data.Where( result.Compile( ) );

            Assert.AreEqual( 2, data.Count( ) );
        }
        public void Should_return_only_items_greater_than( )
        {
            const string instruction = "Value gt '50'";

            var result = instruction.AsExpressionOf<SampleData>( );

            var data = new SampleRepository
                           {
                               DataSource = new[ ]
                                                {
                                                    new SampleData() {Value = 25M},
                                                    new SampleData() {Value = 51M},
                                                    new SampleData() {Value = 100M}
                                                }
                           }.DataSource;

            data = data.Where( result.Compile( ) );

            Assert.AreEqual( 2, data.Count( ) );
        }
        public void Should_filter_list_given_integer_property_in( )
        {
            const string instruction = "Id in '22','1'";

            var result = instruction.AsExpressionOf<SampleData>( );

            var data = new SampleRepository
                           {
                               DataSource = new[ ]
                                                {
                                                    new SampleData() {Id = 1},
                                                    new SampleData() {Id = 22},
                                                    new SampleData() {Id = 1023}
                                                }
                           }.DataSource;

            data = data.Where( result.Compile( ) );

            Assert.AreEqual( 2, data.Count( ) );
        }
        public void Should_return_items_as_expected_when_provided_date_range( )
        {
            const string instruction = "AddDate bt '1/1/2012','5/1/2012'";

            var result = instruction.AsExpressionOf<SampleData>( );

            var data = new SampleRepository
            {
                DataSource = new[ ]
                                                {
                                                    new SampleData() {AddDate = new DateTime(2011,1,1)},
                                                    new SampleData() {AddDate = new DateTime(2012,1,1)},
                                                    new SampleData() {AddDate = new DateTime(2012,4,1)},
                                                    new SampleData() {AddDate = new DateTime(2013,1,1)},
                                                }
            }.DataSource;

            data = data.Where( result.Compile( ) );

            Assert.AreEqual( 2, data.Count( ) );
        }
        public void Should_return_items_less_than_or_equal_to_when_specified( )
        {
            const string instruction = "Value lte '51'";

            var result = instruction.AsExpressionOf<SampleData>( );

            var data = new SampleRepository
            {
                DataSource = new[ ]
                                                {
                                                    new SampleData() {Value = 10M},
                                                    new SampleData() {Value = 25M},
                                                    new SampleData() {Value = 51M},
                                                    new SampleData() {Value = 100M}
                                                }
            }.DataSource;

            data = data.Where( result.Compile( ) );

            Assert.AreEqual( 3, data.Count( ) );
        }
        public void Should_build_a_single_expression_when_given_a_complex_parameter_string( )
        {
            var r = new Recipe<SampleData>( "Address lk 'Test' and (Value gt '20' or Id eq '1')" );

            var data = new SampleRepository
                           {
                               DataSource = new[ ]
                                                {
                                                    new SampleData {Address = "Test 2", Value = 21, Id = 2},
                                                    new SampleData {Address = "Test 3", Value = 19, Id = 13},
                                                    new SampleData
                                                        {Address = "Test else", Value = 18, Id = 1},
                                                    new SampleData
                                                        {Address = "Not like anything else", Value = 30, Id = 4},
                                                }
                           }.DataSource;

            data = data.Where( r.Prepare( ) );

            Assert.AreEqual( 2, data.Count( ) );
        }
        public void Should_return_items_greater_than_or_equal_to_and_less_than_or_equal_to( )
        {
            const string instruction = "Id bt '5','20'";

            var result = instruction.AsExpressionOf<SampleData>( );

            var data = new SampleRepository
                           {
                               DataSource = new[ ]
                                                {
                                                    new SampleData() {Id = 3},
                                                    new SampleData() {Id = 5},
                                                    new SampleData() {Id = 10},
                                                    new SampleData() {Id = 20},
                                                    new SampleData() {Id= 24}
                                                }
                           }.DataSource;

            data = data.Where( result.Compile( ) );

            Assert.AreEqual( 3, data.Count( ) );
        }
        public void Should_return_items_as_expected_when_provided_decimal( )
        {
            const string instruction = "Value bt '15.5','21'";

            var result = instruction.AsExpressionOf<SampleData>( );

            var data = new SampleRepository
                           {
                               DataSource = new[ ]
                                                {
                                                    new SampleData() {Value = 3},
                                                    new SampleData() {Value = 15.499999996M},
                                                    new SampleData() {Value = 15.51M},
                                                    new SampleData() {Value = 20},
                                                    new SampleData() {Value = 24}
                                                }
                           }.DataSource;

            data = data.Where( result.Compile( ) );

            Assert.AreEqual( 2, data.Count( ) );
        }
        public void Should_filter_list_given_string_property_equals( )
        {
            const string instruction = "Address eq 'Test 1'";

            var result = instruction.AsExpressionOf<SampleData>( );

            var data = new SampleRepository( ).GetSampleData( );

            data = data.Where( result.Compile( ) );

            Assert.AreEqual( 1, data.Count( ) );
        }
        public void Should_build_a_working_expression_given_one_value_query( )
        {
            var r = new Recipe<SampleData>( "Address lk 'Test'" );

            var data = new SampleRepository
                           {
                               DataSource = new[ ]
                                                {
                                                    new SampleData {Address = "Test 2"},
                                                    new SampleData {Address = "Test 3"},
                                                    new SampleData {Address = "Not like anything else"},
                                                }
                           }.DataSource;
            data = data.Where( r.Prepare( ) );

            Assert.AreEqual( 2, data.Count( ) );
        }
        public void Should_filter_list_given_in_string_property_in( )
        {
            const string instruction = "Address in 'Test 1','Test 2'";

            var result = instruction.AsExpressionOf<SampleData>( );

            var data = new SampleRepository
                           {
                               DataSource = new[ ]
                                                {
                                                    new SampleData() {Address = "Test 1"},
                                                    new SampleData() {Address = "Test 2"},
                                                    new SampleData() {Address = "Test 4"}
                                                }
                           }.DataSource;

            data = data.Where( result.Compile( ) );

            Assert.AreEqual( 2, data.Count( ) );
        }