Contacts
========

    >>> browser = Browser('manager', 'schooltool')
    >>> browser.getLink('Manage').click()

    >>> from schooltool.contact.browser.ftests import addPerson
    >>> addPerson('Bill Student', 'student', 'pwd')

Let's try and add a contact:

    >>> browser.getLink('Contacts').click()
    >>> browser.getLink('New Contact').click()

    >>> browser.getControl('Prefix').value = 'Mr'
    >>> browser.getControl('First name').value = 'John'
    >>> browser.getControl('Middle name').value = 'J'
    >>> browser.getControl('Last name').value = 'Administrator'
    >>> browser.getControl('Suffix').value = 'Jr'
    >>> browser.getControl('Address line 1').value = 'Frog lane 13'
    >>> browser.getControl('Address line 2').value = ''
    >>> browser.getControl('City').value = 'Toadtown'
    >>> browser.getControl('State').value = 'Arizona'
    >>> browser.getControl('Country').value = 'USA'
    >>> browser.getControl('Postal code').value = '556677'
    >>> browser.getControl('Email').value = 'john@example.com'
    >>> browser.getControl('Home phone').value = '055555555'
    >>> browser.getControl('Work phone').value = '066666666'
    >>> browser.getControl('Mobile phone').value = '077777777'
    >>> browser.getControl('Language').value = 'Lithuanian'

    >>> browser.getControl('Add').click()

After adding a contact we get redirected to the contact list:

    >>> browser.printQuery("id('content-body')/form/table/tbody//tr")
    <tr class="odd"><td>
          <input type="checkbox" name="delete.Contact" id="delete.Contact" /></td>
        <td>
          <a href="http://localhost/contacts/Contact">John</a>
        </td>
        <td>
          <a href="http://localhost/contacts/Contact">Administrator</a>
        </td>
        <td>
          Frog lane 13, Toadtown, Arizona, USA, 556677
        </td>
    </tr>

If you click on the contact and click edit - you can change the
information:

    >>> browser.getLink('John').click()
    >>> browser.getLink('Edit').click()
    >>> browser.getControl('Email').value = 'johny@example.com'
    >>> browser.getControl('Apply').click()
    >>> browser.printQuery("id('form')//div[@class='summary']")
    <div class="summary">Data successfully updated.</div>

We can see that the new data is in the Display view of the contact:

    >>> browser.getLink('View').click()
    >>> browser.printQuery("id('form-widgets-email')")
    <span id="form-widgets-email" class="text-widget textline-field">johny@example.com</span>

We can add contacts directly to persons:

    >>> browser.getLink('Home').click()
    >>> browser.getLink('Contacts').click()
    >>> browser.getLink('Create new contact').click()

    >>> browser.getControl('First name').value = 'Peter'
    >>> browser.getControl('Last name').value = 'Peterson'
    >>> browser.getControl('Address line 1').value = 'Frog lane 14'
    >>> browser.getControl('City').value = 'Toadtown'
    >>> browser.getControl('Email').value = 'peter@example.com'

    >>> relationship = browser.getControl('Relationship')
    >>> relationship.value = ['parent']

    >>> browser.getControl('Add').click()

And attach existing contact entries to a person as well:

    >>> browser.getLink('Home').click()
    >>> browser.getLink('Contacts').click()
    >>> browser.getControl('John').click()
    >>> browser.getControl('Assign').click()

Both contacts should be assigned now:

    >>> browser.printQuery("id('content-body')/form/fieldset[1]//thead//th")
    <th>
    </th>
    <th> <span ...> First Name</span> <img ... alt="(descending)" /></th>
    <th> <span ...> Last Name</span> <img ... alt="(sortable)" /></th>
    <th> Relationship </th>
    <th> Address </th>

    >>> browser.printQuery("id('content-body')/form/fieldset[1]//tbody//tr")
    <tr class="odd"><td>
          <input type="checkbox" name="remove_item.Contact" id="remove_item.Contact" /></td>
        <td>
          <label for="remove_item.Contact">John</label>
        </td>
        <td>
          <a href="http://localhost/contacts/Contact">Administrator</a>
        </td>
        <td>
        </td>
        <td>
          Frog lane 13, Toadtown, Arizona, USA, 556677
        </td>
    </tr>
    <tr class="even"><td>
          <input type="checkbox" name="remove_item.Contact-2" id="remove_item.Contact-2" /></td>
        <td>
          <label for="remove_item.Contact-2">Peter</label>
        </td>
        <td>
          <a href="http://localhost/contacts/Contact-2">Peterson</a>
        </td>
        <td>
          Parent
        </td>
        <td>
          Frog lane 14, Toadtown
        </td>
    </tr>


Contacts can be assigned to multiple persons.

    >>> browser.getLink('Manage').click()
    >>> browser.getLink('Persons').click()
    >>> browser.getLink('Student').click()
    >>> browser.getLink('Contacts').click()

    >>> browser.getControl('Clear').click()
    >>> browser.getControl('John').click()
    >>> browser.getControl('Assign').click()

Now we can see two persons when we navigate to contact's view.

    >>> browser.getLink(url='Contact').click()

    >>> browser.printQuery("id('content-body')//form//fieldset//div")
    <BLANKLINE>
    ...
    ...First name...
    ...John...
    ...Last name...
    ...Administrator...
    ...
    <div class="row">
      Contact of
      <a href="http://localhost/persons/manager">Administrator, SchoolTool</a>
    </div>
    <div class="row">
      Contact of
      <a href="http://localhost/persons/student">Student, Bill</a>
    </div>

Let's change the relationship with Bill.

    >>> browser.getLink('Edit').click()

    >>> relationship = browser.getControl('Relationship', index=1)
    >>> relationship.value = ['parent']
    >>> browser.getControl('Apply').click()

    >>> browser.getLink('View').click()
    >>> browser.printQuery("id('content-body')//form//fieldset//div")
    <BLANKLINE>
    ...
    <div class="row">
      Contact of
      <a href="http://localhost/persons/manager">Administrator, SchoolTool</a>
    </div>
    <div class="row">
      Parent of
      <a href="http://localhost/persons/student">Student, Bill</a>
    </div>

Let's test contact deletion.

    >>> browser.getLink('Manage').click()
    >>> browser.getLink('Contacts').click()
    >>> browser.getControl(name='delete.Contact').value = True
    >>> browser.getControl(name='delete.Contact-2').value = True
    >>> browser.getControl('Delete').click()
    >>> browser.printQuery("//title | //form/li")
    <title> Delete items </title>
    <li>
      <input type="hidden" name="delete.Contact" /><span>John</span>
      <a href="http://localhost/contacts/Contact">Administrator</a>
    </li>
    <li>
      <input type="hidden" name="delete.Contact-2" /><span>Peter</span>
      <a href="http://localhost/contacts/Contact-2">Peterson</a>
    </li>

We can cancel deletion and navigate back to the contact list.

    >>> browser.getControl('Cancel').click()
    >>> browser.printQuery("//title")
    <title>Contact index</title>

    >>> browser.getControl(name='delete.Contact').value = False
    >>> browser.getControl(name='delete.Contact-2').value = True
    >>> browser.getControl('Delete').click()
    >>> browser.printQuery("//form/li")
    <li>
      <input type="hidden" name="delete.Contact-2" /><span>Peter</span>
      <a href="http://localhost/contacts/Contact-2">Peterson</a>
    </li>

Confirm deletion of Peter Peterson.

    >>> browser.getControl('Confirm').click()
    >>> browser.printQuery("//form//tbody//tr")
    <tr class="odd"><td>
        <input type="checkbox" name="delete.Contact" id="delete.Contact" /></td>
        <td>
          <a href="http://localhost/contacts/Contact">John</a>
        </td>
        <td>
          <a href="http://localhost/contacts/Contact">Administrator</a>
        </td>
        <td>
          Frog lane 13, Toadtown, Arizona, USA, 556677
        </td>
    </tr>
