def _test_signup_new_user(self):

        """
        Create a new user and log them in.

        """

        self.username = rndemail()
        first_name = rndstring(10)
        password = rndpasswd(10)

        user = User.objects.create_user(username=self.username,
                                        first_name=first_name,
                                        email=self.username,
                                        password=password)

        Subject.objects.create_subject(user)

        signed_in_as = self.wilhelmlogin(self.username, password)

        self.assertIn(self.username, signed_in_as.text)
    def subtest_wordrecallwidget(self):

        recallmemorytest_box_xpath\
            = "//div[@id='recalltest_widget']"

        start_box_xpath\
            = recallmemorytest_box_xpath + "//div[@id='StartBox']"

        instruction_box_xpath\
            = start_box_xpath + "/div[@id='InstruxtionBox']"

        start_button_xpath\
            = start_box_xpath + "//span[@id='StartButton']"

        stimulus_box_xpath\
            = recallmemorytest_box_xpath + "//div[@id='StimulusBox']"

        recalledwords_box_xpath\
            = stimulus_box_xpath + "//div[@id='recalledwordsbox']"

        recalledwordslist_box_xpath\
            = recalledwords_box_xpath + "//ol[@id='recalledwordslist']"

        morelessoptions_xpath\
            = recalledwords_box_xpath + "//div[@id='morelessoptions']"

        lessoptions_xpath\
            = morelessoptions_xpath + "/span[@id='lessoptionsbutton']"

        moreoptions_xpath\
            = morelessoptions_xpath + "/span[@id='moreoptionsbutton']"

        results_box\
           = recalledwords_box_xpath + "//div[@id='results']"

        submit_results_box\
            = results_box + "/span[@id='submitresults']"

        finish_box_xpath\
            = recallmemorytest_box_xpath + "//div[@id='FinishBox']"

        finish_msg_xpath\
            = finish_box_xpath + "/p[@id='FinishMsg']"


        self.assertTrue(
            all_visible(self.driver,
                        (recallmemorytest_box_xpath,
                         start_box_xpath,
                         instruction_box_xpath,
                         start_button_xpath))
        )


        self.assertTrue(
            none_visible(self.driver,
                         (stimulus_box_xpath,
                          recalledwords_box_xpath,
                          morelessoptions_xpath,
                          results_box,
                          submit_results_box,
                          finish_box_xpath,
                          finish_msg_xpath,
                          recalledwordslist_box_xpath))
        )

        self.driver.find_element_by_xpath(start_button_xpath).click()

        wait(5)

        self.assertTrue(
            all_visible(self.driver,
                         (recallmemorytest_box_xpath,
                          stimulus_box_xpath,
                          recalledwords_box_xpath,
                          results_box,
                          submit_results_box,
                          morelessoptions_xpath,
                          lessoptions_xpath,
                          moreoptions_xpath,
                          recalledwordslist_box_xpath))
        )

        self.assertTrue(
            none_visible(self.driver,
                        (start_box_xpath,
                         instruction_box_xpath,
                         finish_msg_xpath, 
                         finish_box_xpath,
                         start_button_xpath))
        )


        items\
            = self.driver.find_element_by_xpath(recalledwordslist_box_xpath)\
            .find_elements_by_tag_name('li')

        # TODO (Fri 29 May 2015 03:28:32 BST): Deal with this
        magic_number = 10 

        self.assertEqual(len(items), magic_number)

        less_button = self.driver.find_element_by_xpath(lessoptions_xpath)
        more_button = self.driver.find_element_by_xpath(moreoptions_xpath)

        less_button.click()

        items\
            = self.driver.find_element_by_xpath(recalledwordslist_box_xpath)\
            .find_elements_by_tag_name('li')

        self.assertEqual(len(items), magic_number-1)

        less_button.click()

        items\
            = self.driver.find_element_by_xpath(recalledwordslist_box_xpath)\
            .find_elements_by_tag_name('li')

        self.assertEqual(len(items), magic_number-2)

        more_button.click()

        items\
            = self.driver.find_element_by_xpath(recalledwordslist_box_xpath)\
            .find_elements_by_tag_name('li')

        self.assertEqual(len(items), magic_number-1)

        more_button.click()

        items\
            = self.driver.find_element_by_xpath(recalledwordslist_box_xpath)\
            .find_elements_by_tag_name('li')

        self.assertEqual(len(items), magic_number)

        random_words = []
        for item in items[:random.randint(1, len(items)-1)]:
            input_box = item.find_element_by_tag_name('input')
            random_word = rndstring(random.randint(3, 10))
            input_box.send_keys(random_word)
            random_words.append(random_word)

        wait(2)

        self.driver.find_element_by_xpath(submit_results_box).click()

        wait_until_element_displayed(self.driver, 
                                     finish_msg_xpath,
                                     attribute_type='xpath')

        self.assertTrue(
            all_visible(self.driver,
                        (finish_msg_xpath, finish_box_xpath))
        )

        items\
            = self.driver.find_element_by_xpath(finish_box_xpath)\
            .find_element_by_tag_name('ol')\
            .find_elements_by_tag_name('li')

        self.assertEqual(len(items), len(random_words))

        for random_word, item in zip(random_words, items):
            self.assertEqual(random_word, item.text)

        presentation_widget, response_widget\
            = self.get_session_widgets()

        self.assertEqual(random_words, response_widget.recalledwords)