Skip to content

Commit ac63ed7

Browse files
fix(tests): Use spec for row mocks in test_get_ad_group_bid_modifiers.py
I've updated `test_get_ad_group_bid_modifiers.py` to use the `spec` argument when creating `MagicMock` instances for `GoogleAdsRow` equivalents (named `mock_row` in the test). The spec includes `'ad_group_bid_modifier'`, `'ad_group'`, and `'campaign'`. Nested mocks for `ad_group` and `campaign` are also now created with `spec=['id']`. This change makes the row mocks stricter and is intended to ensure that when `row.ad_group_bid_modifier` is accessed, it returns the exact instance of the custom `MockAdGroupBidModifierModel` class, rather than a generic `MagicMock`. This should resolve the `AttributeError: type object 'MagicMock' has no attribute 'pb'` by ensuring `type(modifier)` in the script is `MockAdGroupBidModifierModel`.
1 parent fc52f01 commit ac63ed7

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

examples/advanced_operations/tests/test_get_ad_group_bid_modifiers.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,11 @@ def test_main_runs_successfully(mock_google_ads_client: MagicMock) -> None:
8787
mock_googleads_service = mock_google_ads_client.get_service("GoogleAdsService")
8888

8989
# Row 1: Device Modifier
90-
row1 = MagicMock()
90+
row1 = MagicMock(spec=['ad_group_bid_modifier', 'ad_group', 'campaign'])
91+
row1.campaign = MagicMock(spec=['id'])
9192
row1.campaign.id = "campaign1"
92-
row1.ad_group.id = int(mock_ad_group_id) # Match ad_group_id if provided
93+
row1.ad_group = MagicMock(spec=['id'])
94+
row1.ad_group.id = int(mock_ad_group_id)
9395

9496
modifier_device = MockAdGroupBidModifierModel(mock_google_ads_client.enums)
9597
modifier_device.criterion_id = "100"
@@ -99,8 +101,10 @@ def test_main_runs_successfully(mock_google_ads_client: MagicMock) -> None:
99101
row1.ad_group_bid_modifier = modifier_device
100102

101103
# Row 2: Hotel Check-in Day Modifier
102-
row2 = MagicMock()
104+
row2 = MagicMock(spec=['ad_group_bid_modifier', 'ad_group', 'campaign'])
105+
row2.campaign = MagicMock(spec=['id'])
103106
row2.campaign.id = "campaign2"
107+
row2.ad_group = MagicMock(spec=['id'])
104108
row2.ad_group.id = int(mock_ad_group_id)
105109

106110
modifier_hotel_day = MockAdGroupBidModifierModel(mock_google_ads_client.enums)
@@ -136,12 +140,14 @@ def test_main_runs_without_ad_group_id(mock_google_ads_client: MagicMock) -> Non
136140
# --- Mock GoogleAdsService for search ---
137141
mock_googleads_service = mock_google_ads_client.get_service("GoogleAdsService")
138142

139-
row1 = MagicMock()
143+
row1 = MagicMock(spec=['ad_group_bid_modifier', 'ad_group', 'campaign'])
144+
row1.campaign = MagicMock(spec=['id'])
140145
row1.campaign.id = "campaign3"
141-
row1.ad_group.id = "987" # Script expects ad_group.id to be populated
146+
row1.ad_group = MagicMock(spec=['id'])
147+
row1.ad_group.id = "987"
142148

143149
modifier1 = MockAdGroupBidModifierModel(mock_google_ads_client.enums)
144-
modifier1.criterion_id = "3003"
150+
modifier1.criterion_id = "test_crit_id_3" # Using a more descriptive string for criterion ID
145151
modifier1.bid_modifier = 1.2
146152
modifier1.set_active_criterion_field("device")
147153
modifier1.device.type_ = mock_google_ads_client.enums.DeviceEnum.TABLET

0 commit comments

Comments
 (0)