it{expect(described_class.new('some-default-value',[:"players.name"],:"players.name").where_clause).toeq(['CAST(players.name AS TEXT) ILIKE ?','%some-default-value%'])}
it{expect(described_class.new('"ab"',[:"players.name",:"players.device_id"],:"players.device_id").where_clause).toeq(["CAST(players.device_id AS TEXT) ILIKE ?","%ab%"])}
it{expect(described_class.new('tags:"ab"',[:"players.name",:"players.tags"],:"players.device_id").where_clause).toeq(["CAST(players.tags AS TEXT) ILIKE ?","%ab%"])}
it{expect(described_class.new('123 456',[:"players.name",:"players.device_id"],:"players.device_id").where_clause).toeq(["(CAST(players.device_id AS TEXT) ILIKE ? OR CAST(players.device_id AS TEXT) ILIKE ?)","%123%","%456%"])}
it{expect(described_class.new('123 or 456',[:"players.name",:"players.device_id"],:"players.device_id").where_clause).toeq(["(CAST(players.device_id AS TEXT) ILIKE ? OR CAST(players.device_id AS TEXT) ILIKE ?)","%123%","%456%"])}
it{expect(described_class.new('123 and 456',[:"players.name",:"players.device_id"],:"players.device_id").where_clause).toeq(["(CAST(players.device_id AS TEXT) ILIKE ? AND CAST(players.device_id AS TEXT) ILIKE ?)","%123%","%456%"])}
it{expect(described_class.new('name:ab and not value:hf-1',[:"players.name",:"players.value"],:"players.device_id").where_clause).toeq(['(CAST(players.name AS TEXT) ILIKE ? AND NOT CAST(players.value AS TEXT) ILIKE ?)','%ab%','%hf-1%'])}
it{expect(described_class.new('name:a and name:b or name:c',[:"players.name",:"players.value"],:"players.device_id").where_clause).toeq(['((CAST(players.name AS TEXT) ILIKE ? AND CAST(players.name AS TEXT) ILIKE ?) OR CAST(players.name AS TEXT) ILIKE ?)','%a%','%b%','%c%'])}
it{expect(described_class.new('name:a and (name:b or name:c)',[:"players.name",:"players.value"],:"players.device_id").where_clause).toeq(['(CAST(players.name AS TEXT) ILIKE ? AND (CAST(players.name AS TEXT) ILIKE ? OR CAST(players.name AS TEXT) ILIKE ?))','%a%','%b%','%c%'])}
it{expect(described_class.new('name:a and not (name:b or name:c)',[:"players.name",:"players.value"],:"players.device_id").where_clause).toeq(['(CAST(players.name AS TEXT) ILIKE ? AND NOT (CAST(players.name AS TEXT) ILIKE ? OR CAST(players.name AS TEXT) ILIKE ?))','%a%','%b%','%c%'])}
it{expect(described_class.new('name:"%a_\"',[:"players.name",:"players.value"],:"players.device_id").where_clause).toeq(['CAST(players.name AS TEXT) ILIKE ?','%\%a\_\\%'])}
it{expect(described_class.new('tags:h1-r',[:'players.name',:'players.value',:'players.device_id'],:"players.device_id",{tags:"tags.value"}).where_clause).toeq(['CAST(tags.value AS TEXT) ILIKE ?','%h1-r%'])}
it{expect(described_class.new('tags:h1-r',[:'players.name',:'players.tags',:'players.device_id'],:"players.device_id",{tags:"tags.value"}).where_clause).toeq(["CAST(tags.value AS TEXT) ILIKE ?","%h1-r%"])}
it{expect(described_class.new('(device_id:"with space" tags:mta no-quotes-id-123) or "id with quotes-5" and ( ("id with q 10" or "id with q 20") and ("id with Q 30" "id with Q 40") and not id-without-Q-50)',[:'players.name',:'players.value',:'players.device_id'],:"players.device_id",{tags:'tags.name'}).where_clause).toeq(['((CAST(players.device_id AS TEXT) ILIKE ? OR (CAST(tags.name AS TEXT) ILIKE ? OR CAST(players.device_id AS TEXT) ILIKE ?)) OR (CAST(players.device_id AS TEXT) ILIKE ? AND (((CAST(players.device_id AS TEXT) ILIKE ? OR CAST(players.device_id AS TEXT) ILIKE ?) AND (CAST(players.device_id AS TEXT) ILIKE ? OR CAST(players.device_id AS TEXT) ILIKE ?)) AND NOT CAST(players.device_id AS TEXT) ILIKE ?)))','%with space%','%mta%','%no-quotes-id-123%','%id with quotes-5%','%id with q 10%','%id with q 20%','%id with Q 30%','%id with Q 40%','%id-without-Q-50%'])}
it{expect(described_class.new('123-and-456 -or-2 -not_not_1',[:'players.title',:'players.tag',:'players.device_id'],:'players.device_id').where_clause).toeq(['(CAST(players.device_id AS TEXT) ILIKE ? OR (CAST(players.device_id AS TEXT) ILIKE ? OR CAST(players.device_id AS TEXT) ILIKE ?))','%123-and-456%','%-or-2%','%-not\_not\_1%'])}
it{expect(described_class.new('andrew or ornela',[:'players.title',:'players.tag',:'players.device_id'],:'players.device_id').where_clause).toeq(['(CAST(players.device_id AS TEXT) ILIKE ? OR CAST(players.device_id AS TEXT) ILIKE ?)','%andrew%','%ornela%'])}