Skip to content
Merged

Dev #31

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 21 additions & 22 deletions tests/unit/test_linkedin.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,8 @@ def test_search_posts_signature(self):
search = LinkedInSearchScraper(bearer_token="test_token_123456789")
sig = inspect.signature(search.posts)

# Required: profile_url
assert "profile_url" in sig.parameters
# Required: url (profile URL)
assert "url" in sig.parameters

# Optional: start_date, end_date, timeout
assert "start_date" in sig.parameters
Expand All @@ -133,11 +133,11 @@ def test_search_profiles_signature(self):
search = LinkedInSearchScraper(bearer_token="test_token_123456789")
sig = inspect.signature(search.profiles)

# Required: firstName
assert "firstName" in sig.parameters
# Required: first_name
assert "first_name" in sig.parameters

# Optional: lastName, timeout
assert "lastName" in sig.parameters
# Optional: last_name, timeout
assert "last_name" in sig.parameters
assert "timeout" in sig.parameters

def test_search_jobs_signature(self):
Expand Down Expand Up @@ -195,11 +195,10 @@ def test_scrape_vs_search_distinction(self):
assert "url" in scraper_sig.parameters
assert "sync" not in scraper_sig.parameters # sync parameter was removed

# Search uses platform-specific parameters
# Search uses url + date range parameters
search_sig = inspect.signature(search.posts)
assert "profile_url" in search_sig.parameters
assert "url" in search_sig.parameters
assert "start_date" in search_sig.parameters
assert "url" not in search_sig.parameters # Different from scraper

def test_scrape_linkedin_methods_accept_url_list(self):
"""Test scrape.linkedin methods accept url as str | list."""
Expand Down Expand Up @@ -289,26 +288,26 @@ def test_search_posts_api_spec(self):
"""Test client.search.linkedin.posts matches API spec."""
client = BrightDataClient(token="test_token_123456789")

# API Spec: posts(profile_url, start_date, end_date)
# API Spec: posts(url, start_date, end_date)
import inspect

sig = inspect.signature(client.search.linkedin.posts)

assert "profile_url" in sig.parameters
assert "url" in sig.parameters
assert "start_date" in sig.parameters
assert "end_date" in sig.parameters

def test_search_profiles_api_spec(self):
"""Test client.search.linkedin.profiles matches API spec."""
client = BrightDataClient(token="test_token_123456789")

# API Spec: profiles(firstName, lastName, timeout)
# API Spec: profiles(first_name, last_name, timeout)
import inspect

sig = inspect.signature(client.search.linkedin.profiles)

assert "firstName" in sig.parameters
assert "lastName" in sig.parameters
assert "first_name" in sig.parameters
assert "last_name" in sig.parameters
assert "timeout" in sig.parameters

def test_search_jobs_api_spec(self):
Expand Down Expand Up @@ -393,15 +392,15 @@ def test_search_posts_interface(self):
"""Test search.linkedin.posts interface."""
client = BrightDataClient(token="test_token_123456789")

# Interface: posts(profile_url, start_date, end_date)
# Interface: posts(url, start_date, end_date)
linkedin_search = client.search.linkedin

assert callable(linkedin_search.posts)

import inspect

sig = inspect.signature(linkedin_search.posts)
assert "profile_url" in sig.parameters
assert "url" in sig.parameters
assert "start_date" in sig.parameters
assert "end_date" in sig.parameters

Expand Down Expand Up @@ -452,15 +451,15 @@ def test_url_accepts_string(self):
assert "Union" in url_annotation or "|" in url_annotation
assert "str" in url_annotation

def test_profile_url_accepts_array(self):
"""Test profile_url accepts arrays."""
def test_url_accepts_array_in_search_posts(self):
"""Test url accepts arrays in search posts."""
import inspect

search = LinkedInSearchScraper(bearer_token="test_token_123456789")
sig = inspect.signature(search.posts)

# profile_url should accept str | list
annotation = str(sig.parameters["profile_url"].annotation)
# url should accept str | list
annotation = str(sig.parameters["url"].annotation)
assert "Union" in annotation or "str" in annotation


Expand Down Expand Up @@ -504,9 +503,9 @@ def test_clear_scrape_vs_search_distinction(self):
scraper_posts_sig = inspect.signature(scraper.posts)
assert "url" in scraper_posts_sig.parameters

# Search is for discovery parameters
# Search is for discovery parameters (url + date range)
search_posts_sig = inspect.signature(search.posts)
assert "profile_url" in search_posts_sig.parameters
assert "url" in search_posts_sig.parameters
assert "start_date" in search_posts_sig.parameters

def test_consistent_timeout_defaults(self):
Expand Down
8 changes: 4 additions & 4 deletions tests/unit/test_scrapers.py
Original file line number Diff line number Diff line change
Expand Up @@ -305,13 +305,13 @@ def test_search_methods_are_parameter_based(self):
jobs_sig = inspect.signature(linkedin_search.jobs)
assert "keyword" in jobs_sig.parameters

# LinkedIn search profiles() should accept firstName (parameter-based discovery)
# LinkedIn search profiles() should accept first_name (parameter-based discovery)
profiles_sig = inspect.signature(linkedin_search.profiles)
assert "firstName" in profiles_sig.parameters
assert "first_name" in profiles_sig.parameters

# LinkedIn search posts() should accept profile_url (parameter-based discovery)
# LinkedIn search posts() should accept url (parameter-based discovery)
posts_sig = inspect.signature(linkedin_search.posts)
assert "profile_url" in posts_sig.parameters
assert "url" in posts_sig.parameters

def test_all_platform_scrapers_have_scrape(self):
"""Test all platform scrapers have scrape() method."""
Expand Down