Solr control panel
==================

First some initial setup code:

    >>> self.loginAsManager()
    >>> from zope.component import getUtility
    >>> from collective.solr.interfaces import ISolrConnectionConfig
    >>> config = getUtility(ISolrConnectionConfig)
    >>> config.active
    False
    >>> config.host
    '127.0.0.1'
    >>> config.port
    8983
    >>> config.base
    '/solr'
    >>> config.async
    False
    >>> config.auto_commit
    True
    >>> config.index_timeout
    0.0
    >>> config.search_timeout
    0.0
    >>> config.max_results
    0
    >>> config.required
    ('SearchableText',)
    >>> config.facets
    ('portal_type', 'review_state')
    >>> config.filter_queries
    ('portal_type',)
    >>> config.slow_query_threshold
    0
    >>> config.effective_steps
    1
    >>> config.exclude_user
    False


Viewing the site control panel
------------------------------

    >>> self.browser.open('http://nohost/plone/@@solr-controlpanel')
    >>> self.browser.url
    'http://nohost/plone/@@solr-controlpanel'

Check for the icon to exist:

    >>> self.browser.contents
    '...<img src="http://nohost/plone/++resource++collective.solr.images/icon.png"...'

Click the cancel button:

    >>> self.browser.getControl(name="form.actions.cancel").click()
    >>> self.browser.url.endswith('plone_control_panel')
    True

There should be still no changes:

    >>> 'Changes canceled.' in self.browser.contents
    True


Make some changes
-----------------

    >>> self.browser.open('http://nohost/plone/@@solr-controlpanel')
    >>> self.browser.url.endswith('solr-controlpanel')
    True

    >>> self.browser.getControl(name='form.active').value = True
    >>> self.browser.getControl(name='form.host').value = 'foo.bar'
    >>> self.browser.getControl(name='form.port').value = '1234'
    >>> self.browser.getControl(name='form.base').value = '/solr'
    >>> self.browser.getControl(name='form.async').value = True
    >>> self.browser.getControl(name='form.auto_commit').value = False
    >>> self.browser.getControl(name='form.index_timeout').value = '7'
    >>> self.browser.getControl(name='form.search_timeout').value = '3.1415'
    >>> self.browser.getControl(name='form.max_results').value = '23'
    >>> self.browser.getControl(name='form.required.0.').value = 'foo'
    >>> self.browser.getControl(name='form.required.add').click()
    >>> self.browser.getControl(name='form.required.1.').value = 'bar'
    >>> self.browser.getControl(name='form.facets.0.').value = 'type'
    >>> self.browser.getControl(name='form.facets.1.').value = 'state'
    >>> self.browser.getControl(name='form.slow_query_threshold').value = '50'
    >>> self.browser.getControl(name='form.effective_steps').value = '300'
    >>> self.browser.getControl(name='form.exclude_user').value = True

Filter query parameters cannot be specified until the connection has been
activated.  At the moment only the already configured value shows up:

    >>> self.browser.getControl('portal_type').selected
    True

Click the save button:

    >>> self.browser.getControl(name="form.actions.save").click()
    >>> self.browser.url.endswith('solr-controlpanel')
    True

We should be informed that something has changed:

    >>> 'Changes saved.' in self.browser.contents
    True

Make sure the changes have been applied correctly to the tool:

    >>> config.active
    True
    >>> config.host
    u'foo.bar'
    >>> config.port
    1234
    >>> config.base
    '/solr'
    >>> config.async
    True
    >>> config.auto_commit
    False
    >>> config.index_timeout
    7.0
    >>> config.search_timeout
    3.1415...
    >>> config.max_results
    23
    >>> config.required
    [u'foo', u'bar']
    >>> config.facets
    [u'type', u'state']
    >>> config.slow_query_threshold
    50
    >>> config.effective_steps
    300
    >>> config.exclude_user
    True

Now that the connection is active we can also select more filter query
parameters from the complete list of Solr indexes, provided that we use the
correct host and port:

    >>> self.browser.getControl(name='form.host').value = '127.0.0.1'
    >>> self.browser.getControl(name='form.port').value = '8983'
    >>> self.browser.getControl(name="form.actions.save").click()

    >>> self.browser.getControl('portal_type').selected = False
    >>> self.browser.getControl('review_state').selected = True
    >>> self.browser.getControl('Subject').selected = True
    >>> self.browser.getControl(name="form.actions.save").click()
    >>> sorted(config.filter_queries)
    ['Subject', 'review_state']


Required query parameters
-------------------------

Lastly, let's make sure the "Required query parameters" setting can be set
to an empty list (please see `issue #18`__ for more infos):

  .. __: http://plone.org/products/collective.solr/issues/18

    >>> self.browser.getControl(name='form.required.remove_0').value = True
    >>> self.browser.getControl(name='form.required.remove_1').value = True
    >>> self.browser.getControl(name='form.required.remove').click()
    >>> self.browser.getControl(name="form.actions.save").click()
    >>> 'Changes saved.' in self.browser.contents
    True

    >>> config.required
    []
