Adding tests folder
This commit is contained in:
parent
a4846a8c6f
commit
6eaf521db6
7 changed files with 686 additions and 0 deletions
96
tests/test_utils.py
Normal file
96
tests/test_utils.py
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
# tests/test_utils.py
|
||||
import pytest
|
||||
import os
|
||||
import time
|
||||
from unittest import mock
|
||||
from selenium.webdriver.remote.webelement import WebElement
|
||||
from src.utils import ensure_chrome_profile, is_scrollable, scroll_slow, chrome_browser_options, printred, printyellow
|
||||
|
||||
# Mocking logging to avoid actual file writing
|
||||
@pytest.fixture(autouse=True)
|
||||
def mock_logger(mocker):
|
||||
mocker.patch("src.utils.logger")
|
||||
|
||||
# Test ensure_chrome_profile function
|
||||
def test_ensure_chrome_profile(mocker):
|
||||
mocker.patch("os.path.exists", return_value=False) # Pretend directory doesn't exist
|
||||
mocker.patch("os.makedirs") # Mock making directories
|
||||
|
||||
# Call the function
|
||||
profile_path = ensure_chrome_profile()
|
||||
|
||||
# Verify that os.makedirs was called twice to create the directory
|
||||
assert profile_path.endswith("linkedin_profile")
|
||||
assert os.path.exists.called
|
||||
assert os.makedirs.called
|
||||
|
||||
# Test is_scrollable function
|
||||
def test_is_scrollable(mocker):
|
||||
mock_element = mocker.Mock(spec=WebElement)
|
||||
mock_element.get_attribute.side_effect = lambda attr: "1000" if attr == "scrollHeight" else "500"
|
||||
|
||||
# Call the function
|
||||
scrollable = is_scrollable(mock_element)
|
||||
|
||||
# Check the expected outcome
|
||||
assert scrollable is True
|
||||
mock_element.get_attribute.assert_any_call("scrollHeight")
|
||||
mock_element.get_attribute.assert_any_call("clientHeight")
|
||||
|
||||
# Test scroll_slow function
|
||||
def test_scroll_slow(mocker):
|
||||
mock_driver = mocker.Mock()
|
||||
mock_element = mocker.Mock(spec=WebElement)
|
||||
|
||||
# Mock element's attributes for scrolling
|
||||
mock_element.get_attribute.side_effect = lambda attr: "2000" if attr == "scrollHeight" else "0"
|
||||
mock_element.is_displayed.return_value = True
|
||||
mocker.patch("time.sleep") # Mock time.sleep to avoid waiting
|
||||
|
||||
# Call the function
|
||||
scroll_slow(mock_driver, mock_element, start=0, end=1000, step=100, reverse=False)
|
||||
|
||||
# Ensure that scrolling happened multiple times
|
||||
assert mock_driver.execute_script.called
|
||||
mock_element.is_displayed.assert_called_once()
|
||||
|
||||
def test_scroll_slow_element_not_scrollable(mocker):
|
||||
mock_driver = mocker.Mock()
|
||||
mock_element = mocker.Mock(spec=WebElement)
|
||||
|
||||
# Mock the attributes so the element is not scrollable
|
||||
mock_element.get_attribute.side_effect = lambda attr: "1000" if attr == "scrollHeight" else "1000"
|
||||
mock_element.is_displayed.return_value = True
|
||||
|
||||
scroll_slow(mock_driver, mock_element, start=0, end=1000, step=100)
|
||||
|
||||
# Ensure it detected non-scrollable element
|
||||
mock_driver.execute_script.assert_not_called()
|
||||
|
||||
# Test chrome_browser_options function
|
||||
def test_chrome_browser_options(mocker):
|
||||
mocker.patch("src.utils.ensure_chrome_profile")
|
||||
mocker.patch("os.path.dirname", return_value="/mocked/path")
|
||||
mocker.patch("os.path.basename", return_value="profile_directory")
|
||||
|
||||
mock_options = mocker.Mock()
|
||||
|
||||
mocker.patch("selenium.webdriver.ChromeOptions", return_value=mock_options)
|
||||
|
||||
# Call the function
|
||||
options = chrome_browser_options()
|
||||
|
||||
# Ensure options were set
|
||||
assert mock_options.add_argument.called
|
||||
assert options == mock_options
|
||||
|
||||
# Test printred and printyellow functions
|
||||
def test_printred(mocker):
|
||||
mocker.patch("builtins.print")
|
||||
printred("Test")
|
||||
print.assert_called_once_with("\033[91mTest\033[0m")
|
||||
|
||||
def test_printyellow(mocker):
|
||||
mocker.patch("builtins.print")
|
||||
printyellow("Test")
|
||||
print.assert_called_once_with("\033[93mTest\033[0m")
|
||||
Loading…
Add table
Add a link
Reference in a new issue