#!/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.initialize_webdriver") @patch("jardin.navigate_to_filegarden") @patch("jardin.login_with_password") def test_main_calls_methods_in_correct_order(self, mockLoginWithPassword, mockNavigateToFilegarden, mockInitializeWebdriver): mockEmail = "email@mail.com" mockPassword = "p4$$w0rd" jardin.main(mockEmail, mockPassword) mockInitializeWebdriver.assert_called_once() mockNavigateToFilegarden.assert_called_once_with(mockInitializeWebdriver.return_value) mockLoginWithPassword.assert_called_once_with(mockInitializeWebdriver.return_value, mockEmail, mockPassword) mockInitializeWebdriver.return_value.close.assert_called_once() if __name__ == "__main__": unittest.main()