require "#{File.dirname(__FILE__)}/test_helper" describe Boogex do it 'turns OR into |' do string = 'This OR That' expecting = '(?:This|That)' result = Boogex.convert(string)[:inclusive_regex] assert_equal expecting, result end it 'turns boolean AND into AND array string' do string = 'This AND That' expecting = "AND(['(?:This)','(?:That)'])" result = Boogex.convert(string)[:inclusive_regex] assert_equal expecting, result end it 'understands bracketing' do string = '(This OR That) AND My self' expecting = "AND(['(?:This|That)','(?:My self)'])" result = Boogex.convert(string)[:inclusive_regex] assert_equal expecting, result end it 'correctly convert this Lucene boolean query string' do string = '(((asd OR dd) AND that) AND this) OR What?' expecting = "AND([AND(['(?:asd|dd)','(?:that)']),'(?:this)'])|What?" result = Boogex.convert(string)[:inclusive_regex] assert_equal expecting, result end it 'understands embedded AND' do string = '((im AND researching) AND travelling)' expecting = "AND([AND(['(?:im)','(?:researching)']),'(?:travelling)'])" result = Boogex.convert(string)[:inclusive_regex] assert_equal expecting, result end it 'understands double embedded AND' do string = 'Peeps OR ((dude OR roos) AND (what OR Footy))' expecting = "Peeps|AND(['(?:dude|roos)','(?:what|Footy)'])" result = Boogex.convert(string)[:inclusive_regex] assert_equal expecting, result end it 'escapes hyphens' do string = '("John Gordon-Smith" OR "hair") AND ("none" OR "all")' expecting = "AND(['(?:John Gordon\\-Smith|hair)','(?:none|all)'])" result = Boogex.convert(string)[:inclusive_regex] assert_equal expecting, result end it 'handles unclosed brackets' do string = '("@AUSOlympicTeam" OR "Olympics") AND ("boxing" OR "@Shelley__watts"))' assert_raises do result = Boogex.convert(string)[:inclusive_regex] end end it 'handles multiple brackets' do string = '((@officialcsa OR "south africa" OR "south african") AND ("cricket" OR "proteas") AND ("national" OR "international") AND ("team"))' expecting = "AND(['(?:@officialcsa|south africa|south african)','(?:cricket|proteas)','(?:national|international)','(?:team)'])" result = Boogex.convert(string)[:inclusive_regex] assert_equal expecting, result end end