diff --git a/jardin.py b/jardin.py index 8ce42dc..e17f808 100755 --- a/jardin.py +++ b/jardin.py @@ -2,9 +2,12 @@ import sys +import bs4 + from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys +from selenium.webdriver.common.action_chains import ActionChains def initialize_webdriver(): return webdriver.Firefox() @@ -31,15 +34,29 @@ def login_with_password(browser, email, password): click_password_button(browser) input_password(browser, password) +def click_go_to_your_garden(browser): + browser.implicitly_wait(100) + goToYourGardenButton = browser.find_element(By.LINK_TEXT, "GO TO YOUR GARDEN") + goToYourGardenButton.click() + +def get_garden_filenames(browser): + titles = [] + soup = bs4.BeautifulSoup(browser.page_source, "lxml") + + for item in soup.find_all(attrs={"class": "name"}): + titles.append(item.text) + + return titles + def main(email, password): browser = initialize_webdriver() navigate_to_filegarden(browser) login_with_password(browser, email, password) - # Go To Your Garden - # Get list of filenames in File Garden + click_go_to_your_garden(browser) + garden_filenames = get_garden_filenames(browser) # Get list of files in target upload directory that don't exist in File Garden (test based on filename? size? file contents?) # For each file in the second list, go through the file upload process - browser.close() + #browser.close() if __name__ == "__main__": main(sys.argv[1], sys.argv[2]) diff --git a/test_jardin.py b/test_jardin.py index 8af1579..0e18802 100755 --- a/test_jardin.py +++ b/test_jardin.py @@ -66,10 +66,62 @@ class TestJardin(unittest.TestCase): mockClickPasswordButton.assert_called_once_with(mockFirefox) mockInputPassword.assert_called_once_with(mockFirefox, mockPassword) + @patch("jardin.webdriver.Firefox") + def test_click_go_to_your_garden_clicks_button(self, mockFirefox): + jardin.click_go_to_your_garden(mockFirefox) + + mockFirefox.find_element.assert_called_with(By.LINK_TEXT, "GO TO YOUR GARDEN") + mockFirefox.find_element.return_value.click.assert_called_once() + + @patch("jardin.webdriver.Firefox") + @patch("jardin.bs4.BeautifulSoup") + def test_get_garden_filenames_creates_beautifulsoup_and_finds_names(self, mockBeautifulSoup, mockFirefox): + jardin.get_garden_filenames(mockFirefox) + + mockBeautifulSoup.assert_called_once_with(mockFirefox.page_source, "lxml") + mockBeautifulSoup.return_value.find_all.assert_called_once_with(attrs={"class": "name"}) + + @patch("jardin.webdriver.Firefox") + def test_get_garden_filenames_returns_filenames_correctly(self, mockFirefox): + mockFirefox.page_source = """ + + +
+ +
+ +
+
file1.jpg
+
10 B
+
image/jpeg
+
Aug 30 2023 13:04:10
+
+ +
+ +
+
file2.jpg
+
20 B
+
image/jpeg
+
Jun 29 2022 17:37:14
+
+
+ + +""" + + filenames = jardin.get_garden_filenames(mockFirefox) + + self.assertEqual(filenames, ["file1.jpg", "file2.jpg"]) + @patch("jardin.initialize_webdriver") @patch("jardin.navigate_to_filegarden") @patch("jardin.login_with_password") + @patch("jardin.click_go_to_your_garden") + @patch("jardin.get_garden_filenames") def test_main_calls_methods_in_correct_order(self, + mockGetGardenFilenames, + mockClickGoToYourGarden, mockLoginWithPassword, mockNavigateToFilegarden, mockInitializeWebdriver): @@ -81,8 +133,10 @@ class TestJardin(unittest.TestCase): mockInitializeWebdriver.assert_called_once() mockNavigateToFilegarden.assert_called_once_with(mockInitializeWebdriver.return_value) mockLoginWithPassword.assert_called_once_with(mockInitializeWebdriver.return_value, mockEmail, mockPassword) + mockClickGoToYourGarden.assert_called_once_with(mockInitializeWebdriver.return_value) + mockGetGardenFilenames.assert_called_once_with(mockInitializeWebdriver.return_value) - mockInitializeWebdriver.return_value.close.assert_called_once() + #mockInitializeWebdriver.return_value.close.assert_called_once() if __name__ == "__main__": unittest.main()