Skip to content
Merged
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
69 changes: 45 additions & 24 deletions tests/examples/asyncio/async_add_campaigns_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,32 +4,41 @@

# Mocking modules before import because the environment seems to lack dependencies
mock_google = MagicMock()
sys.modules["google"] = mock_google
sys.modules["google.ads"] = mock_google
sys.modules["google.ads.googleads"] = mock_google
sys.modules["google.ads.googleads.client"] = mock_google
sys.modules["google.ads.googleads.errors"] = mock_google
sys.modules["google.ads.googleads.v23"] = mock_google
sys.modules["google.ads.googleads.v23.resources"] = mock_google
sys.modules["google.ads.googleads.v23.resources.types"] = mock_google
sys.modules["google.ads.googleads.v23.resources.types.campaign"] = mock_google
sys.modules["google.ads.googleads.v23.resources.types.campaign_budget"] = mock_google
sys.modules["google.ads.googleads.v23.resources.types.campaign_budget"] = (
mock_google
)
sys.modules["google.ads.googleads.v23.services"] = mock_google
sys.modules["google.ads.googleads.v23.services.services"] = mock_google
sys.modules["google.ads.googleads.v23.services.services.campaign_budget_service"] = mock_google
sys.modules["google.ads.googleads.v23.services.services.campaign_service"] = mock_google
sys.modules[
"google.ads.googleads.v23.services.services.campaign_budget_service"
] = mock_google
sys.modules["google.ads.googleads.v23.services.services.campaign_service"] = (
mock_google
)
sys.modules["google.ads.googleads.v23.services.types"] = mock_google
sys.modules["google.ads.googleads.v23.services.types.campaign_budget_service"] = mock_google
sys.modules["google.ads.googleads.v23.services.types.campaign_service"] = mock_google
sys.modules["google.ads.googleads.v23.services.types.google_ads_service"] = mock_google
sys.modules[
"google.ads.googleads.v23.services.types.campaign_budget_service"
] = mock_google
sys.modules["google.ads.googleads.v23.services.types.campaign_service"] = (
mock_google
)
sys.modules["google.ads.googleads.v23.services.types.google_ads_service"] = (
mock_google
)

from examples.asyncio import async_add_campaigns


class TestAsyncAddCampaigns(unittest.IsolatedAsyncioTestCase):
async def test_main(self):
# Setup Mocks
mock_client_instance = MagicMock() # Mock the client instance directly
mock_client_instance = MagicMock() # Mock the client instance directly
mock_googleads_service = AsyncMock()
mock_client_instance.get_service.return_value = mock_googleads_service

Expand All @@ -56,45 +65,57 @@ async def test_main(self):
# Setup inner objects
mock_budget = mock_budget_op.create
mock_campaign = mock_campaign_op.create

# Setup response
mock_response = MagicMock()
mock_campaign_result = MagicMock()
mock_campaign_result.resource_name = "customers/123/campaigns/456"

# response.mutate_operation_responses[1].campaign_result
mock_response.mutate_operation_responses = [
MagicMock(), # budget result
MagicMock(campaign_result=mock_campaign_result) # campaign result
MagicMock(), # budget result
MagicMock(campaign_result=mock_campaign_result), # campaign result
]

mock_googleads_service.mutate.return_value = mock_response

customer_id = "1234567890"

await async_add_campaigns.main(mock_client_instance, customer_id)

# Verification

# Check if service was retrieved correctly
mock_client_instance.get_service.assert_called_with("GoogleAdsService", is_async=True)
mock_client_instance.get_service.assert_called_with(
"GoogleAdsService", is_async=True
)

# Verify Budget Resource Name
expected_budget_resource_name = f"customers/{customer_id}/campaignBudgets/-1"
self.assertEqual(mock_budget.resource_name, expected_budget_resource_name)

expected_budget_resource_name = (
f"customers/{customer_id}/campaignBudgets/-1"
)
self.assertEqual(
mock_budget.resource_name, expected_budget_resource_name
)

# Verify Campaign references Budget
self.assertEqual(mock_campaign.campaign_budget, expected_budget_resource_name)
self.assertEqual(
mock_campaign.campaign_budget, expected_budget_resource_name
)

# Verify MutateOperations were constructed
self.assertEqual(mock_mutate_op_budget.campaign_budget_operation, mock_budget_op)
self.assertEqual(mock_mutate_op_campaign.campaign_operation, mock_campaign_op)
self.assertEqual(
mock_mutate_op_budget.campaign_budget_operation, mock_budget_op
)
self.assertEqual(
mock_mutate_op_campaign.campaign_operation, mock_campaign_op
)

# Verify GoogleAdsService.mutate called with correct operations
mock_googleads_service.mutate.assert_called_once()
call_args = mock_googleads_service.mutate.call_args
self.assertEqual(call_args.kwargs["customer_id"], customer_id)

operations = call_args.kwargs["mutate_operations"]
self.assertEqual(len(operations), 2)
self.assertEqual(operations[0], mock_mutate_op_budget)
Expand Down
25 changes: 14 additions & 11 deletions tests/examples/asyncio/async_search_stream_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,18 @@

# Mocking modules before import because the environment seems to lack dependencies
mock_google = MagicMock()
sys.modules["google"] = mock_google
sys.modules["google.ads"] = mock_google
sys.modules["google.ads.googleads"] = mock_google
sys.modules["google.ads.googleads.client"] = mock_google
sys.modules["google.ads.googleads.errors"] = mock_google
sys.modules["google.ads.googleads.v23"] = mock_google
sys.modules["google.ads.googleads.v23.services"] = mock_google
sys.modules["google.ads.googleads.v23.services.services"] = mock_google
sys.modules["google.ads.googleads.v23.services.services.google_ads_service"] = mock_google
sys.modules["google.ads.googleads.v23.services.services.google_ads_service"] = (
mock_google
)
sys.modules["google.ads.googleads.v23.services.types"] = mock_google
sys.modules["google.ads.googleads.v23.services.types.google_ads_service"] = mock_google
sys.modules["google.ads.googleads.v23.services.types.google_ads_service"] = (
mock_google
)

# Import module under test AFTER mocking
from examples.asyncio import async_search_stream
Expand All @@ -29,19 +30,19 @@ async def test_main(self):

# Mock the stream response
# search_stream returns an async iterator of batches

# Create a mock batch
mock_row = MagicMock()
mock_row.campaign.id = 123
mock_row.campaign.name = "Test Campaign"

mock_batch = MagicMock()
mock_batch.results = [mock_row]

# Async iterator setup
async def async_gen():
yield mock_batch

mock_googleads_service.search_stream.return_value = async_gen()

customer_id = "1234567890"
Expand All @@ -50,15 +51,17 @@ async def async_gen():
await async_search_stream.main(mock_client_instance, customer_id)

# Verification

# Check if service was retrieved correctly
mock_client_instance.get_service.assert_called_with("GoogleAdsService", is_async=True)
mock_client_instance.get_service.assert_called_with(
"GoogleAdsService", is_async=True
)

# Verify search_stream called
mock_googleads_service.search_stream.assert_called_once()
call_args = mock_googleads_service.search_stream.call_args
self.assertEqual(call_args.kwargs["customer_id"], customer_id)

# Verify Query does NOT contain LIMIT 10
query = call_args.kwargs["query"]
self.assertNotIn("LIMIT 10", query)
Expand Down
25 changes: 14 additions & 11 deletions tests/examples/asyncio/async_search_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,18 @@

# Mocking modules before import because the environment seems to lack dependencies
mock_google = MagicMock()
sys.modules["google"] = mock_google
sys.modules["google.ads"] = mock_google
sys.modules["google.ads.googleads"] = mock_google
sys.modules["google.ads.googleads.client"] = mock_google
sys.modules["google.ads.googleads.errors"] = mock_google
sys.modules["google.ads.googleads.v23"] = mock_google
sys.modules["google.ads.googleads.v23.services"] = mock_google
sys.modules["google.ads.googleads.v23.services.services"] = mock_google
sys.modules["google.ads.googleads.v23.services.services.google_ads_service"] = mock_google
sys.modules["google.ads.googleads.v23.services.services.google_ads_service"] = (
mock_google
)
sys.modules["google.ads.googleads.v23.services.types"] = mock_google
sys.modules["google.ads.googleads.v23.services.types.google_ads_service"] = mock_google
sys.modules["google.ads.googleads.v23.services.types.google_ads_service"] = (
mock_google
)

# Import module under test AFTER mocking
from examples.asyncio import async_search
Expand All @@ -29,16 +30,16 @@ async def test_main(self):

# Mock the search response (AsyncPager)
# search returns an object that is an async iterator

# Create a mock row
mock_row = MagicMock()
mock_row.campaign.id = 123
mock_row.campaign.name = "Test Campaign"

# Async iterator setup for the pager
async def async_gen():
yield mock_row

mock_googleads_service.search.return_value = async_gen()

customer_id = "1234567890"
Expand All @@ -47,15 +48,17 @@ async def async_gen():
await async_search.main(mock_client_instance, customer_id)

# Verification

# Check if service was retrieved correctly
mock_client_instance.get_service.assert_called_with("GoogleAdsService", is_async=True)
mock_client_instance.get_service.assert_called_with(
"GoogleAdsService", is_async=True
)

# Verify search called
mock_googleads_service.search.assert_called_once()
call_args = mock_googleads_service.search.call_args
self.assertEqual(call_args.kwargs["customer_id"], customer_id)

# Verify Query does NOT contain LIMIT 10
query = call_args.kwargs["query"]
self.assertNotIn("LIMIT 10", query)
Expand Down
Loading