<reponame>mbdebian/py-playground<filename>tdd-python/from_videos/superlists/functional_test.py
import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

class NewVisitorTest(unittest.TestCase):

    def setUp(self):
        # This is run before each test
        self.browser = webdriver.Chrome()
        self.browser.implicitly_wait(3)

    def tearDown(self):
        # This is run after each test, no matter what happens to the test
        self.browser.quit()

    def check_for_row_in_list_table(self, expected_row):
        table = self.browser.find_element_by_id('id_list_table')
        rows = table.find_elements_by_tag_name('tr')
        self.assertIn(expected_row, [row.text for row in rows])

    def test_starting_a_new_todo_list(self):
        # Edith has heard about a cool new to-do list app.
        # She goes to its homepage
        self.browser.get('http://localhost:8000')
        # She notices the page title and header mention to-do lists
        self.assertIn('To-Do', self.browser.title)
        header = self.browser.find_element_by_tag_name('h1')
        self.assertIn('To-Do', header.text)
        # She is invited to enter a to-do item straight away
        inputbox = self.browser.find_element_by_id('id_new_item')
        self.assertEqual(inputbox.get_attribute('placeholder'), 'Enter a to-do item')
        # She types "Buy peacock feathers" into a text box (Edith's hobby is
        # tying fly-fishing lures)
        inputbox.send_keys('Buy <NAME>athers')
        # When she hits enter, the page updates, and now the page lists
        # "1: Buy peacock feathers" as an item in a to-do list
        inputbox.send_keys(Keys.ENTER)
        self.check_for_row_in_list_table("1: Buy peacock feathers")
        # There is still a text box inviting her to add another item. She
        inputbox = self.browser.find_element_by_id('id_new_item')
        # enters "Use peacock feathers to make a fly" (Edith is very methodical)
        inputbox.send_keys('Use peacock feathers to make a fly')
        inputbox.send_keys(Keys.ENTER)
        # The page updates again, and now shows both items on her list
        self.check_for_row_in_list_table("2: Use peacock feathers to make a fly")
        self.check_for_row_in_list_table("1: Buy peacock feathers")
        # Edith wonders whether the site will remember her list. Then she sees
        # that the site has generated a unique URL for her -- there is some
        # explanatory text to that effect
        self.fail('Finish the test')


# She visits that URL - her to-do list is still there.

if __name__ == '__main__':
    # Regular start for the unittests
    # unittest.main()
    # Silence warnings
    unittest.main(warnings='ignore')

import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

class NewVisitorTest(unittest.TestCase):

    def setUp(self):
        # This is run before each test
        self.browser = webdriver.Chrome()
        self.browser.implicitly_wait(3)

    def tearDown(self):
        # This is run after each test, no matter what happens to the test
        self.browser.quit()

    def check_for_row_in_list_table(self, expected_row):
        table = self.browser.find_element_by_id('id_list_table')
        rows = table.find_elements_by_tag_name('tr')
        self.assertIn(expected_row, [row.text for row in rows])

    def test_starting_a_new_todo_list(self):
        # Edith has heard about a cool new to-do list app.
        # She goes to its homepage
        self.browser.get('http://localhost:8000')
        # She notices the page title and header mention to-do lists
        self.assertIn('To-Do', self.browser.title)
        header = self.browser.find_element_by_tag_name('h1')
        self.assertIn('To-Do', header.text)
        # She is invited to enter a to-do item straight away
        inputbox = self.browser.find_element_by_id('id_new_item')
        self.assertEqual(inputbox.get_attribute('placeholder'), 'Enter a to-do item')
        # She types "Buy peacock feathers" into a text box (Edith's hobby is
        # tying fly-fishing lures)
        inputbox.send_keys('Buy <NAME>athers')
        # When she hits enter, the page updates, and now the page lists
        # "1: Buy peacock feathers" as an item in a to-do list
        inputbox.send_keys(Keys.ENTER)
        self.check_for_row_in_list_table("1: Buy peacock feathers")
        # There is still a text box inviting her to add another item. She
        inputbox = self.browser.find_element_by_id('id_new_item')
        # enters "Use peacock feathers to make a fly" (Edith is very methodical)
        inputbox.send_keys('Use peacock feathers to make a fly')
        inputbox.send_keys(Keys.ENTER)
        # The page updates again, and now shows both items on her list
        self.check_for_row_in_list_table("2: Use peacock feathers to make a fly")
        self.check_for_row_in_list_table("1: Buy peacock feathers")
        # Edith wonders whether the site will remember her list. Then she sees
        # that the site has generated a unique URL for her -- there is some
        # explanatory text to that effect
        self.fail('Finish the test')


# She visits that URL - her to-do list is still there.

if __name__ == '__main__':
    # Regular start for the unittests
    # unittest.main()
    # Silence warnings
    unittest.main(warnings='ignore')
# This is run before each test # This is run after each test, no matter what happens to the test # Edith has heard about a cool new to-do list app. # She goes to its homepage # She notices the page title and header mention to-do lists # She is invited to enter a to-do item straight away # She types "Buy peacock feathers" into a text box (Edith's hobby is # tying fly-fishing lures) # When she hits enter, the page updates, and now the page lists # "1: Buy peacock feathers" as an item in a to-do list # There is still a text box inviting her to add another item. She # enters "Use peacock feathers to make a fly" (Edith is very methodical) # The page updates again, and now shows both items on her list # Edith wonders whether the site will remember her list. Then she sees # that the site has generated a unique URL for her -- there is some # explanatory text to that effect # She visits that URL - her to-do list is still there. # Regular start for the unittests # unittest.main() # Silence warnings