==================
Requesting reports
==================

Here we will test some of the report request forms.  At present only the
failing report request form is complex enough to warant testing.

Let's start by setting up the application and logging in as manager.

    >>> from schooltool.app.browser.ftests import setup
    >>> setup.setUpBasicSchool()
    >>> manager = Browser('manager', 'schooltool')

We will need a custom score system that has a maximum passing score rather
than a minimum in order to test how the minimum passing score select field
and label get rendered in the case of maximum passing score systems.

    >>> manager.getLink('Manage').click()
    >>> manager.getLink('Score Systems').click()
    >>> manager.getLink('Add Score System').click()

    >>> manager.getControl('Title').value = 'Max'

    >>> manager.getControl(name='displayed1').value = 'A'
    >>> manager.getControl(name='value1').value = '4'
    >>> manager.getControl(name='percent1').value = '75'
    >>> manager.getControl('Add a lower score').click()

    >>> manager.getControl(name='displayed2').value = 'B'
    >>> manager.getControl(name='value2').value = '3'
    >>> manager.getControl(name='percent2').value = '50'
    >>> manager.getControl('Add a lower score').click()

    >>> manager.getControl(name='displayed3').value = 'C'
    >>> manager.getControl(name='value3').value = '2'
    >>> manager.getControl(name='percent3').value = '25'
    >>> manager.getControl('Add a lower score').click()

    >>> manager.getControl(name='displayed4').value = 'D'
    >>> manager.getControl(name='value4').value = '1'
    >>> manager.getControl(name='percent4').value = '0'
    >>> manager.getControl('Add a lower score').click()

    >>> manager.getControl(name='minMax').displayValue = ['Maximum']
    >>> manager.getControl(name='minScore').value = ['C']

    >>> manager.getControl('Save').click()

We will set up a report sheet template with three activities, one standard
discrete, one custom discrete maximum passing, and one ranged values.

    >>> manager.getLink('Manage').click()
    >>> manager.getLink('Report Sheet Templates').click()

    >>> manager.getLink('New Report Sheet').click()
    >>> manager.getControl('Title').value = 'Test'
    >>> manager.getControl('Add').click()

    >>> manager.getLink('Test').click()
    >>> manager.getLink('New Report Activity').click()
    >>> manager.getControl('Title').value = 'Activity 1'
    >>> manager.getControl('Score System').value = ['letter-grade-']
    >>> manager.getControl('Add').click()

    >>> manager.getLink('New Report Activity').click()
    >>> manager.getControl('Title').value = 'Activity 2'
    >>> manager.getControl('Score System').displayValue = ['Max']
    >>> manager.getControl('Add').click()

    >>> manager.getLink('New Report Activity').click()
    >>> manager.getControl('Title').value = 'Activity 3'
    >>> manager.getControl('Score System').displayValue = ['-- Use range below --']
    >>> manager.getControl('Add').click()

Now we'll deploy it.

    >>> manager.getLink('2005-2006').click()
    >>> manager.getLink('Spring').click()
    >>> manager.getLink('Deploy Report Sheet').click()
    >>> manager.getControl('Template').displayValue = ['Test']
    >>> manager.getControl('Deploy').click()

We need to build the url for requesting the failures report manually
because the onchange="this.form.submit()" will not run in tests.  We need to
specify the source in a query string in order to test the resultant contents
of the scores field.

    >>> manager.getLink('Reports').click()
    >>> manager.getLink('Failures by Term').click()
    >>> manager.printQuery('//h3/text()')
    Request Failures by Term Report

The first report activity is letter grade, minimum passing score of 'D'.

    >>> manager.printQuery('id("source")/option/text()')
    Choose a report activity
    Spring - Test - Activity 1
    Spring - Test - Activity 2
    Spring - Test - Activity 3
    
    >>> manager.getControl('Report Activity').displayValue = ['Spring - Test - Activity 1']
    >>> manager.getForm().submit()

    >>> manager.printQuery('//label[@for="score"]')
    <label for="score">Minimum Passing Score</label>
    >>> manager.printQuery('id("score")/option')
    <option value="A">A</option>
    <option value="B">B</option>
    <option value="C">C</option>
    <option selected="selected" value="D">D</option>
    <option value="F">F</option>

The second report activity is a maximum passing score system with max of 'C'.

    >>> manager.getControl('Report Activity').displayValue = ['Spring - Test - Activity 2']
    >>> manager.getForm().submit()

    >>> manager.printQuery('//label[@for="score"]')
    <label for="score">Maximum Passing Score</label>
    >>> manager.printQuery('id("score")//option')
    <option value="A">A</option>
    <option value="B">B</option>
    <option selected="selected" value="C">C</option>
    <option value="D">D</option>

The third report activity is a ranged values score system so the min field is
a text box.

    >>> manager.getControl('Report Activity').displayValue = ['Spring - Test - Activity 3']
    >>> manager.getForm().submit()

    >>> manager.printQuery('//label[@for="score"]')
    <label for="score">Minimum Passing Score</label>
    >>> manager.printQuery('id("score")')
    <input type="text" id="score" name="score" />
