def test_click_logout_button___login_button_is_visible(self): get_user_model().objects.create_user("user", password="******") login_as(self.driver, self.live_server_url, "user", "password") wait_for_element(self.driver, By.ID, "logout-link").click() self.assertIsNotNone(wait_for_element(self.driver, By.ID, "login-link"))
def test_logged_in_click_create_entry___taken_to_create_entry_form(self): login_as(self.driver, self.live_server_url, "user", "password") wait_for_element(self.driver, By.ID, "create-entry-link").click() self.assertEqual(self.live_server_url + "/create_blog_entry", self.driver.current_url)
def test_click_browse_button___navigate_to_browse_page(self): self.driver.get(self.live_server_url) wait_for_element(self.driver, By.ID, "browse-link").click() self.assertEqual(self.live_server_url + "/browse", self.driver.current_url)
def test_click_create_button_while_not_logged_in___navigate_to_login_screen( self): self.driver.get(self.live_server_url) wait_for_element(self.driver, By.ID, "create-entry-link").click() self.assertEqual( self.live_server_url + "/accounts/login/?next=/create_blog_entry", self.driver.current_url)
def test_click_create_button_while_logged_in___navigate_to_create_screen( self): get_user_model().objects.create_user("user", password="******") login_as(self.driver, self.live_server_url, "user", "password") self.driver.get(self.live_server_url) wait_for_element(self.driver, By.ID, "create-entry-link").click() self.assertEqual(self.live_server_url + "/create_blog_entry", self.driver.current_url)
def test_click_edit_button___taken_to_edit_page(self): Entry( title="Test Post Title", content="Test Post Content", owner=self.owner, ).save() pk = Entry.objects.all()[0].id login_as(self.driver, self.live_server_url, "user", "password") self.driver.get(self.live_server_url + "/blog_entry/" + str(pk)) wait_for_element(self.driver, By.ID, "edit-button").click() self.assertEqual(self.live_server_url + "/modify_blog_entry/" + str(pk), self.driver.current_url)
def test_click_delete_button_and_cancel___page_is_not_changed(self): Entry( title="Test Post Title", content="Test Post Content", owner=self.owner, ).save() pk = Entry.objects.all()[0].id login_as(self.driver, self.live_server_url, "user", "password") self.driver.get(self.live_server_url + "/blog_entry/" + str(pk)) wait_for_element(self.driver, By.ID, "delete-button").click() wait_for_alert(self.driver).dismiss() self.assertEqual(self.live_server_url + "/blog_entry/" + str(pk), self.driver.current_url)
def test_click_entry_title___that_entry_loaded(self): Entry( title="First Test Entry", content="First Test Content", owner=self.owner, ).save() pk = Entry.objects.get(title="First Test Entry").id self.driver.get(self.live_server_url + "/browse") wait_for_element(self.driver, By.CSS_SELECTOR, ".blog-listing-entry .title").click() self.assertEqual(self.live_server_url + "/blog_entry/" + str(pk), self.driver.current_url)
def test_click_delete_button_and_accept___entry_has_been_deleted(self): Entry( title="Test Post Title", content="Test Post Content", owner=self.owner, ).save() pk = Entry.objects.all()[0].id login_as(self.driver, self.live_server_url, "user", "password") self.driver.get(self.live_server_url + "/blog_entry/" + str(pk)) wait_for_element(self.driver, By.ID, "delete-button").click() wait_for_alert(self.driver).accept() self.assertTrue(self._wait_for_delete(pk))
def test_single_blog_entry_created_and_modified___published_time_is_present_in_listing_entry( self, mock_now): def now_time(): for date in (datetime(2013, 2, 3, 4, 5, 6, tzinfo=utc), datetime(2014, 7, 8, 9, 10, 11, tzinfo=utc)): yield date mock_now.side_effect = now_time() Entry( title="Test Post Title", content="Test Post Content", owner=self.owner, ).save() entry = Entry.objects.all()[0] pk = entry.id entry.title = "Modified Title" entry.save() self.driver.get(self.live_server_url + "/browse") publish_time = wait_for_element( self.driver, By.CSS_SELECTOR, ".blog-listing-entry .publish-time").text self.assertEqual( "Published: 03 Feb 2013 04:05:06 (Edit: 08 Jul 2014 09:10:11)", publish_time)
def test_multiple_blog_entry_present_with_earliest_updated_and_another_created_after___the_latest_created_is_the_entry( self): Entry( title="Test Title", content="Test Content", owner=self.owner, ).save() Entry( title="Second Test Title", content="Second Test Content", owner=self.owner, ).save() entry = Entry.objects.get(title="Test Title") entry.title = "Modified Test Title" entry.save() Entry( title="Third Test Title", content="Third Test Content", owner=self.owner, ).save() self.driver.get(self.live_server_url) self.assertEqual("Third Test Title", wait_for_element(self.driver, By.ID, "title").text)
def test_submit_valid_form___new_model_object_is_created(self): login_as(self.driver, self.live_server_url, "user", "password") wait_for_element(self.driver, By.ID, "create-entry-link").click() wait_for_element(self.driver, By.NAME, "title").send_keys("some title") wait_for_element(self.driver, By.NAME, "content").send_keys("some content") wait_for_element(self.driver, By.NAME, "submit").click() self.assertIsNotNone( Entry.objects.get(title="some title", content="some content"))
def test_submit_valid_form___redirected_to_the_blog_entry(self): login_as(self.driver, self.live_server_url, "user", "password") wait_for_element(self.driver, By.ID, "create-entry-link").click() wait_for_element(self.driver, By.NAME, "title").send_keys("some title") wait_for_element(self.driver, By.NAME, "content").send_keys("some content") wait_for_element(self.driver, By.NAME, "submit").click() pk = Entry.objects.get(title="some title", content="some content").pk self.assertEqual(self.live_server_url + "/blog_entry/" + str(pk), self.driver.current_url)
def test_single_blog_entry_present___entry_is_the_entry(self): Entry( title="Test Title", content="Test Content", owner=self.owner, ).save() self.driver.get(self.live_server_url) self.assertEqual("Test Title", wait_for_element(self.driver, By.ID, "title").text)
def test_navigate_to_existing_item___published_time_is_present(self): Entry( title="Test Post Title", content="Test Post Content", owner=self.owner, ).save() pk = Entry.objects.all()[0].id self.driver.get(self.live_server_url + "/blog_entry/" + str(pk)) publish_time = wait_for_element(self.driver, By.CLASS_NAME, "publish-time").text self.assertEqual("Published: 02 Jan 2014 21:12:00", publish_time)
def test_navigate_to_existing_item___correct_content_is_present(self): Entry( title="Test Post Title", content="Test Post Content", owner=self.owner, ).save() pk = Entry.objects.all()[0].id self.driver.get(self.live_server_url + "/blog_entry/" + str(pk)) content_text = wait_for_element(self.driver, By.ID, "content").text self.assertEqual("Test Post Content", content_text)
def test_submit_create_form_with_no_content___field_is_in_error(self): login_as(self.driver, self.live_server_url, "user", "password") wait_for_element(self.driver, By.ID, "create-entry-link").click() wait_for_element(self.driver, By.NAME, "title").send_keys("some title") wait_for_element(self.driver, By.NAME, "submit").click() form_group = wait_for_element(self.driver, By.XPATH, ".//*[@name='content']/..") self.assertIn("has-error", form_group.get_attribute("class"))
def test_navigate_to_existing_item_as_owner___edit_button_is_present(self): Entry( title="Test Post Title", content="Test Post Content", owner=self.owner, ).save() pk = Entry.objects.all()[0].id login_as(self.driver, self.live_server_url, "user", "password") self.driver.get(self.live_server_url + "/blog_entry/" + str(pk)) self.assertIsNotNone(wait_for_element(self.driver, By.ID, "edit-button"))
def test_submit_create_form_with_no_content___title_is_unchanged(self): login_as(self.driver, self.live_server_url, "user", "password") wait_for_element(self.driver, By.ID, "create-entry-link").click() wait_for_element(self.driver, By.NAME, "title").send_keys("some title") wait_for_element(self.driver, By.NAME, "submit").click() self.assertEqual( "some title", wait_for_element(self.driver, By.NAME, "title").get_attribute("value"))
def test_single_blog_entry_created___published_time_is_present_in_listing_entry( self): Entry( title="Test Post Title", content="Test Post Content", owner=self.owner, ).save() self.driver.get(self.live_server_url + "/browse") publish_time = wait_for_element( self.driver, By.CSS_SELECTOR, ".blog-listing-entry .publish-time").text self.assertEqual("Published: 02 Jan 2014 21:12:00", publish_time)
def test_navigate_to_existing_item___published_time_is_present(self, mock_now): def now_time(): for date in (datetime(2013, 2, 3, 4, 5, 6, tzinfo=utc), datetime(2014, 7, 8, 9, 10, 11, tzinfo=utc)): yield date mock_now.side_effect = now_time() Entry( title="Test Post Title", content="Test Post Content", owner=self.owner, ).save() entry = Entry.objects.all()[0] pk = entry.id entry.title = "Modified Title" entry.save() self.driver.get(self.live_server_url + "/blog_entry/" + str(pk)) publish_time = wait_for_element(self.driver, By.CLASS_NAME, "publish-time").text self.assertEqual("Published: 03 Feb 2013 04:05:06 (Edit: 08 Jul 2014 09:10:11)", publish_time)
def test_navigate_to_create_entry_form___content_field_is_present(self): login_as(self.driver, self.live_server_url, "user", "password") wait_for_element(self.driver, By.ID, "create-entry-link").click() self.assertIsNotNone(wait_for_element(self.driver, By.NAME, "content"))
def test_logs_in_as_user___login_button_changes_to_logout(self): get_user_model().objects.create_user("user", password="******") login_as(self.driver, self.live_server_url, "user", "password") self.assertIsNotNone(wait_for_element(self.driver, By.ID, "logout-link"))
def test_user_clicks_login___taken_to_login_screen(self): wait_for_element(self.driver, By.ID, "login-link").click() self.assertEqual(self.live_server_url + "/accounts/login/?next=/", self.driver.current_url)
def test_user_not_logged_in___login_button_is_present(self): self.assertIsNotNone(wait_for_element(self.driver, By.ID, "login-link"))
def test_not_logged_in_click_create_entry___taken_to_login_page(self): wait_for_element(self.driver, By.ID, "create-entry-link").click() self.assertEqual( self.live_server_url + "/accounts/login/?next=/create_blog_entry", self.driver.current_url)
def test_no_blog_entries_present___no_entries_page_is_shown(self): self.driver.get(self.live_server_url) self.assertIsNotNone( wait_for_element(self.driver, By.ID, "no-blog-entries-title"))