diff --git a/src/functional_tests/base.py b/src/functional_tests/base.py index d05a5a7..980b94b 100644 --- a/src/functional_tests/base.py +++ b/src/functional_tests/base.py @@ -30,4 +30,13 @@ class FunctionalTest(StaticLiveServerTestCase): if time.time() - start_time > MAX_WAIT: raise time.sleep(0.5) - \ No newline at end of file + + def wait_for(self, fn): + start_time = time.time() + while True: + try: + return fn() + except (AssertionError, WebDriverException): + if time.time() - start_time > MAX_WAIT: + raise + time.sleep(0.5) \ No newline at end of file diff --git a/src/functional_tests/test_list_item_validation.py b/src/functional_tests/test_list_item_validation.py index b75ed5d..641a79c 100644 --- a/src/functional_tests/test_list_item_validation.py +++ b/src/functional_tests/test_list_item_validation.py @@ -5,4 +5,31 @@ from .base import FunctionalTest class ItemValidationTest(FunctionalTest): def test_cannot_add_empty_list_items(self): - self.fail("write me!") + self.browser.get(self.live_server_url) + self.browser.find_element(By.ID, "id-new-item").send_keys(Keys.ENTER) + + self.wait_for( + lambda: self.assertEqual( + self.browser.find_element(By.CSS_SELECTOR, ".invalid-feedback").text, + "You can't have an empty list item", + ) + ) + + self.browser.find_element(By.ID, "id-new-item").send_keys("Purchase milk") + self.browser.find_element(By.ID, "id-new-item").send_keys(Keys.ENTER) + self.wait_for_row_in_list_table("1. Purchase milk") + + self.browser.find_element(By.ID, "id-new-item").send_keys(Keys.ENTER) + + self.wait_for( + lambda: self.assertEqual( + self.browser.find_element(By.CSS_SELECTOR, ".invalid-feedback").text, + "You can't have an empty list item", + ) + ) + + self.browser.find_element(By.ID, 'id-new-item').send_keys("Make tea") + self.browser.find_element(By.ID, "id-new-item").send_keys(Keys.ENTER) + self.wait_for_row_in_list_table("2. Make tea") + + self.fail("finish the fight!")