Site Search
-----------

This tests the Solr-based replacement for Plone's site search feature.  We'll
use a testbrowser to created an object and then search for it.  First we need
to activate Solr support and reindex the site's content, though:

  >>> from collective.solr.testing import activateAndReindex
  >>> from plone.app.testing import setRoles
  >>> from plone.app.testing import TEST_USER_ID
  >>> from plone.app.testing import TEST_USER_NAME
  >>> from plone.app.testing import TEST_USER_PASSWORD
  >>> from plone.testing.z2 import Browser
  >>> from transaction import commit
  >>> portal = layer['portal']
  >>> activateAndReindex(layer['portal'])

  >>> setRoles(layer['portal'], TEST_USER_ID, ['Manager'])
  >>> commit()
  >>> browser = Browser(layer['app'])
  >>> browser.open('http://nohost/plone/login_form')
  >>> browser.getControl(name='__ac_name').value = TEST_USER_NAME
  >>> browser.getControl(name='__ac_password').value = TEST_USER_PASSWORD
  >>> browser.getControl(name='submit').click()
  >>> browser.getLink('Home').click()
  >>> browser.getLink('Page').click()
  >>> browser.getControl('Title').value = 'Foo'
  >>> browser.getControl('Save').click()
  >>> commit()
  >>> browser.url
  'http://nohost/plone/foo'
  >>> browser.contents
  '...Info...Changes saved...
   ...documentFirstHeading...Foo...'

  >>> browser.getControl('Search Site').value = 'Foo'
  >>> browser.getForm(name='searchform').submit()
  >>> browser.contents
  '...Search results...1...items matching your search terms...
   ...http://nohost/plone/foo...Foo...'
  >>> browser.getLink('Foo')
  <Link text='Foo' url='http://nohost/plone/foo'>

Some content items, for example files and image, don't have an associated
workflow state.  Hence they cannot provide data for a `review_state` index
as well.  However, Plone's search results listing template (`search.pt`)
contains the string expression "state-${result/review_state}", and the TAL
engine will attempt to traverse `result` in case dictionary and attribute
lookups for `review_state` weren't successful.  Let's make sure this
behaviour won't break things:

  >>> portal.invokeFactory('File', id='file', title='my first foo file')
  'file'
  >>> commit()
  >>> browser.open('http://nohost/plone/')
  >>> browser.getControl('Search Site').value = 'my first foo file'
  >>> browser.getForm(name='searchform').submit()
  >>> browser.contents
  '...Search results...1...items matching your search terms...
   ...http://nohost/plone/file...my first foo file...'


Wildcard searches
-----------------

Simple searches should be wildcard searches to reflect (and not change)
Plone's default behaviour.  So at least for single words the search should
be automatically adjusted:

  >>> browser.open('http://nohost/plone/')
  >>> browser.getControl('Search Site').value = 'Fo'
  >>> browser.getForm(name='searchform').submit()
  >>> browser.contents
  '...Search results...2...items matching your search terms...
   ...http://nohost/plone/foo...Foo...'
  >>> browser.getLink('Foo')
  <Link text='Foo' url='http://nohost/plone/foo'>
