#!/usr/bin/python3 import unittest from unittest.mock import patch, call from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import jardin class TestJardin(unittest.TestCase): @patch("jardin.webdriver.Firefox") def test_initialize_webdriver_calls_Firefox(self, mockFirefox): jardin.initialize_webdriver() mockFirefox.assert_called_once() @patch("jardin.webdriver.Firefox") def test_navigate_to_filegarden(self, mockFirefox): jardin.navigate_to_filegarden(mockFirefox) mockFirefox.get.assert_called_once_with("https://filegarden.com/login") @patch("jardin.webdriver.Firefox") def test_input_email_enters_email(self, mockFirefox): mockEmail = "email@mail.com" jardin.input_email(mockFirefox, mockEmail) mockFirefox.find_element.assert_called_with(By.ID, "email") mockFirefox.find_element.return_value.send_keys.assert_has_calls([ call(mockEmail), call(Keys.RETURN) ]) @patch("jardin.webdriver.Firefox") def test_click_password_button_clicks_button(self, mockFirefox): jardin.click_password_button(mockFirefox) mockFirefox.find_element.assert_called_with(By.XPATH, "/html/body/div[2]/div[3]/div[1]/form/div[1]/span/button[3]") mockFirefox.find_element.return_value.click.assert_called_once() @patch("jardin.webdriver.Firefox") def test_input_password_enters_password(self, mockFirefox): mockPassword = "p4$$w0rd" jardin.input_password(mockFirefox, mockPassword) mockFirefox.find_element.assert_called_with(By.ID, "password") mockFirefox.find_element.return_value.send_keys.assert_has_calls([ call(mockPassword), call(Keys.RETURN) ]) @patch("jardin.webdriver.Firefox") @patch("jardin.input_email") @patch("jardin.click_password_button") @patch("jardin.input_password") def test_login_with_password_performs_login_steps(self, mockInputPassword, mockClickPasswordButton, mockInputEmail, mockFirefox): mockEmail = "email@mail.com" mockPassword = "p4$$w0rd" jardin.login_with_password(mockFirefox, mockEmail, mockPassword) mockInputEmail.assert_called_once_with(mockFirefox, mockEmail) 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.os.listdir") def test_get_local_filenames_gets_filenames_in_local_directory(self, mockListdir): mockDirectory = "/home/luser/gardenfiles/" mockFiles = ["file1", "file2", "file3"] mockListdir.return_value = mockFiles localFiles = jardin.get_local_filenames(mockDirectory) mockListdir.assert_called_once_with(mockDirectory) self.assertEqual(localFiles, mockFiles) @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") @patch("jardin.get_local_filenames") def test_main_calls_methods_in_correct_order(self, mockGetLocalFilenames, mockGetGardenFilenames, mockClickGoToYourGarden, mockLoginWithPassword, mockNavigateToFilegarden, mockInitializeWebdriver): mockEmail = "email@mail.com" mockPassword = "p4$$w0rd" mockDirectory = "/home/luser/gardenfiles/" jardin.main(mockEmail, mockPassword, mockDirectory) 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) mockGetLocalFilenames.assert_called_once_with(mockDirectory) #mockInitializeWebdriver.return_value.close.assert_called_once() if __name__ == "__main__": unittest.main()