require 'test_helper'

module Workarea
  class QueryStringTest < TestCase
    def test_id
      query = QueryString.new('testing tests')
      assert_equal('test_test', query.id)

      query = QueryString.new('FOO BaR')
      assert_equal('foo_bar', query.id)

      query = QueryString.new('<script>alert("hello")<script>;')
      assert_equal('alert_hello', query.id)
    end

    def test_global_id
      tests = [
        'testing tests',
        'FOO BaR',
        '<script>alert("hello")<script>;',
        'wierd.query',
        '\\query',
        '4" tree',
        'tool set AND'
      ]

      tests.each do |string|
        query = QueryString.new(string)
        assert_equal(query.id, GlobalID.find(query.to_gid).id)
      end
    end

    def test_sanitized
      query = QueryString.new('<script>alert("hello")<script>;')
      refute_includes(query.sanitized, 'script')

      query = QueryString.new('<script>alert("hello")<script>;')
      refute_includes(query.sanitized, '(')
      refute_includes(query.sanitized, ')')

      query = QueryString.new('wierd.query')
      refute_includes(query.sanitized, '.')

      query = QueryString.new('\\query')
      refute_includes(query.sanitized, "\\")

      query = QueryString.new('/query')
      refute_includes(query.sanitized, '/')

      query = QueryString.new('{query}')
      refute_includes(query.sanitized, '{')
      refute_includes(query.sanitized, '}')

      query = QueryString.new('query!')
      refute_includes(query.sanitized, '!')

      query = QueryString.new('~query~')
      refute_includes(query.sanitized, '~')

      query = QueryString.new('query - - ')
      refute_includes(query.sanitized, ' - ')

      query = QueryString.new('test -')
      assert_equal('test', query.sanitized)

      query = QueryString.new('test - ')
      assert_equal('test', query.sanitized)

      query = QueryString.new('4" tree')
      assert_equal('4\" tree', query.sanitized)

      query = QueryString.new('"4 tree"')
      assert_equal('"4 tree"', query.sanitized)

      query_string = QueryString.new('tool set AND')
      assert_equal('tool set and', query_string.sanitized)

      query_string = QueryString.new('tool set OR')
      assert_equal('tool set or', query_string.sanitized)

      query_string = QueryString.new('tool set')
      assert_equal('tool set', query_string.sanitized)
    end

    def test_phrase
      assert(QueryString.new('tool set').phrase?)
      refute(QueryString.new('tool').phrase?)
    end
  end
end