require "#{File.dirname(__FILE__)}/spec_helper"


describe "example filters (with)" do


  it_behaves_like 'a name filterable target set', 'examples', {:exact_name => {:fixture_location => "#{CQL_FEATURE_FIXTURES_DIRECTORY}/examples/name_filter",
                                                                               :expected_results => {'name1' => [{"name" => "name1"}]}},
                                                               :regexp => {:fixture_location => "#{CQL_FEATURE_FIXTURES_DIRECTORY}/examples/name_filter",
                                                                           :expected_results => {/name/ => [{"name" => "name1"}, {"name" => "name2"}, {"name" => "name3"}],
                                                                                                 /name1/ => [{"name" => "name1"}]}}
                                                }

  it_behaves_like 'a tag filterable target set', 'examples', {:single_tag => {:fixture_location => "#{CQL_FEATURE_FIXTURES_DIRECTORY}/examples/filters/tags",
                                                                              :expected_results => {'@one' => [{'name' => 'Next'}, {'name' => 'Another'}]}},

                                                              :multiple_tags => {:fixture_location => "#{CQL_FEATURE_FIXTURES_DIRECTORY}/examples/filters/tags2",
                                                                                 :expected_results => {['@one', '@five'] => [{'name' => 'Next'}]}},

                                                              :tc_lt => {:fixture_location => "#{CQL_FEATURE_FIXTURES_DIRECTORY}/examples/filters/tag_count",
                                                                         :expected_results => {0 => [],
                                                                                               1 => [],
                                                                                               2 => [{"name" => "1 tag"}],
                                                                                               3 => [{"name" => "1 tag"}, {"name" => "2 tags"}],
                                                                                               4 => [{"name" => "1 tag"}, {"name" => "2 tags"}, {"name" => "3 tags"}],
                                                                                               5 => [{"name" => "1 tag"}, {"name" => "2 tags"}, {"name" => "3 tags"}, {"name" => "4 tags"}]}},

                                                              :tc_lte => {:fixture_location => "#{CQL_FEATURE_FIXTURES_DIRECTORY}/examples/filters/tag_count",
                                                                          :expected_results => {0 => [],
                                                                                                1 => [{"name" => "1 tag"}],
                                                                                                2 => [{"name" => "1 tag"}, {"name" => "2 tags"}],
                                                                                                3 => [{"name" => "1 tag"}, {"name" => "2 tags"}, {"name" => "3 tags"}],
                                                                                                4 => [{"name" => "1 tag"}, {"name" => "2 tags"}, {"name" => "3 tags"}, {"name" => "4 tags"}],
                                                                                                5 => [{"name" => "1 tag"}, {"name" => "2 tags"}, {"name" => "3 tags"}, {"name" => "4 tags"}]}},

                                                              :tc_gt => {:fixture_location => "#{CQL_FEATURE_FIXTURES_DIRECTORY}/examples/filters/tag_count",
                                                                         :expected_results => {0 => [{"name" => "1 tag"}, {"name" => "2 tags"}, {"name" => "3 tags"}, {"name" => "4 tags"}],
                                                                                               1 => [{"name" => "2 tags"}, {"name" => "3 tags"}, {"name" => "4 tags"}],
                                                                                               2 => [{"name" => "3 tags"}, {"name" => "4 tags"}],
                                                                                               3 => [{"name" => "4 tags"}],
                                                                                               4 => []}},

                                                              :tc_gte => {:fixture_location => "#{CQL_FEATURE_FIXTURES_DIRECTORY}/examples/filters/tag_count",
                                                                          :expected_results => {0 => [{"name" => "1 tag"}, {"name" => "2 tags"}, {"name" => "3 tags"}, {"name" => "4 tags"}],
                                                                                                1 => [{"name" => "1 tag"}, {"name" => "2 tags"}, {"name" => "3 tags"}, {"name" => "4 tags"}],
                                                                                                2 => [{"name" => "2 tags"}, {"name" => "3 tags"}, {"name" => "4 tags"}],
                                                                                                3 => [{"name" => "3 tags"}, {"name" => "4 tags"}],
                                                                                                4 => [{"name" => "4 tags"}],
                                                                                                5 => []}}
                                               }

  it 'should filter by multiple filters' do
    gs = CQL::Repository.new("#{@feature_fixtures_directory}/examples/filters/tag_count")

    result = gs.query do
      select name
      from examples
      with tc gt 1
      with tc lt 3
    end

    expect(result).to eq([{"name" => "2 tags"}])
  end

end