@@ -51,7 +51,7 @@ def async_job_mock_fixture(mocker):
51
51
52
52
class TestBaseInsightsStream :
53
53
def test_init (self , api ):
54
- stream = AdsInsights (api = api , start_date = datetime (2010 , 1 , 1 ), end_date = datetime (2011 , 1 , 1 ))
54
+ stream = AdsInsights (api = api , start_date = datetime (2010 , 1 , 1 ), end_date = datetime (2011 , 1 , 1 ), insights_lookback_window = 28 )
55
55
56
56
assert not stream .breakdowns
57
57
assert stream .action_breakdowns == AdsInsights .ALL_ACTION_BREAKDOWNS
@@ -66,6 +66,7 @@ def test_init_override(self, api):
66
66
name = "CustomName" ,
67
67
breakdowns = ["test1" , "test2" ],
68
68
action_breakdowns = ["field1" , "field2" ],
69
+ insights_lookback_window = 28 ,
69
70
)
70
71
71
72
assert stream .breakdowns == ["test1" , "test2" ]
@@ -85,6 +86,7 @@ def test_read_records_all(self, mocker, api):
85
86
api = api ,
86
87
start_date = datetime (2010 , 1 , 1 ),
87
88
end_date = datetime (2011 , 1 , 1 ),
89
+ insights_lookback_window = 28 ,
88
90
)
89
91
90
92
records = list (
@@ -104,11 +106,7 @@ def test_read_records_random_order(self, mocker, api):
104
106
job = mocker .Mock (spec = AsyncJob )
105
107
job .get_result .return_value = [mocker .Mock (), mocker .Mock (), mocker .Mock ()]
106
108
job .interval = pendulum .Period (pendulum .date (2010 , 1 , 1 ), pendulum .date (2010 , 1 , 1 ))
107
- stream = AdsInsights (
108
- api = api ,
109
- start_date = datetime (2010 , 1 , 1 ),
110
- end_date = datetime (2011 , 1 , 1 ),
111
- )
109
+ stream = AdsInsights (api = api , start_date = datetime (2010 , 1 , 1 ), end_date = datetime (2011 , 1 , 1 ), insights_lookback_window = 28 )
112
110
113
111
records = list (
114
112
stream .read_records (
@@ -143,11 +141,7 @@ def test_read_records_random_order(self, mocker, api):
143
141
)
144
142
def test_state (self , api , state ):
145
143
"""State setter/getter should work with all combinations"""
146
- stream = AdsInsights (
147
- api = api ,
148
- start_date = datetime (2010 , 1 , 1 ),
149
- end_date = datetime (2011 , 1 , 1 ),
150
- )
144
+ stream = AdsInsights (api = api , start_date = datetime (2010 , 1 , 1 ), end_date = datetime (2011 , 1 , 1 ), insights_lookback_window = 28 )
151
145
152
146
assert stream .state == {}
153
147
@@ -162,7 +156,7 @@ def test_state(self, api, state):
162
156
def test_stream_slices_no_state (self , api , async_manager_mock , start_date ):
163
157
"""Stream will use start_date when there is not state"""
164
158
end_date = start_date + duration (weeks = 2 )
165
- stream = AdsInsights (api = api , start_date = start_date , end_date = end_date )
159
+ stream = AdsInsights (api = api , start_date = start_date , end_date = end_date , insights_lookback_window = 28 )
166
160
async_manager_mock .completed_jobs .return_value = [1 , 2 , 3 ]
167
161
168
162
slices = list (stream .stream_slices (stream_state = None , sync_mode = SyncMode .incremental ))
@@ -179,7 +173,7 @@ def test_stream_slices_no_state_close_to_now(self, api, async_manager_mock, rece
179
173
"""Stream will use start_date when there is not state and start_date within 28d from now"""
180
174
start_date = recent_start_date
181
175
end_date = pendulum .now ()
182
- stream = AdsInsights (api = api , start_date = start_date , end_date = end_date )
176
+ stream = AdsInsights (api = api , start_date = start_date , end_date = end_date , insights_lookback_window = 28 )
183
177
async_manager_mock .completed_jobs .return_value = [1 , 2 , 3 ]
184
178
185
179
slices = list (stream .stream_slices (stream_state = None , sync_mode = SyncMode .incremental ))
@@ -197,7 +191,7 @@ def test_stream_slices_with_state(self, api, async_manager_mock, start_date):
197
191
end_date = start_date + duration (days = 10 )
198
192
cursor_value = start_date + duration (days = 5 )
199
193
state = {AdsInsights .cursor_field : cursor_value .date ().isoformat ()}
200
- stream = AdsInsights (api = api , start_date = start_date , end_date = end_date )
194
+ stream = AdsInsights (api = api , start_date = start_date , end_date = end_date , insights_lookback_window = 28 )
201
195
async_manager_mock .completed_jobs .return_value = [1 , 2 , 3 ]
202
196
203
197
slices = list (stream .stream_slices (stream_state = state , sync_mode = SyncMode .incremental ))
@@ -216,7 +210,7 @@ def test_stream_slices_with_state_close_to_now(self, api, async_manager_mock, re
216
210
end_date = pendulum .now ()
217
211
cursor_value = end_date - duration (days = 1 )
218
212
state = {AdsInsights .cursor_field : cursor_value .date ().isoformat ()}
219
- stream = AdsInsights (api = api , start_date = start_date , end_date = end_date )
213
+ stream = AdsInsights (api = api , start_date = start_date , end_date = end_date , insights_lookback_window = 28 )
220
214
async_manager_mock .completed_jobs .return_value = [1 , 2 , 3 ]
221
215
222
216
slices = list (stream .stream_slices (stream_state = state , sync_mode = SyncMode .incremental ))
@@ -237,7 +231,7 @@ def test_stream_slices_with_state_and_slices(self, api, async_manager_mock, star
237
231
AdsInsights .cursor_field : cursor_value .date ().isoformat (),
238
232
"slices" : [(cursor_value + duration (days = 1 )).date ().isoformat (), (cursor_value + duration (days = 3 )).date ().isoformat ()],
239
233
}
240
- stream = AdsInsights (api = api , start_date = start_date , end_date = end_date )
234
+ stream = AdsInsights (api = api , start_date = start_date , end_date = end_date , insights_lookback_window = 28 )
241
235
async_manager_mock .completed_jobs .return_value = [1 , 2 , 3 ]
242
236
243
237
slices = list (stream .stream_slices (stream_state = state , sync_mode = SyncMode .incremental ))
@@ -251,7 +245,7 @@ def test_stream_slices_with_state_and_slices(self, api, async_manager_mock, star
251
245
assert generated_jobs [1 ].interval .start == cursor_value .date () + duration (days = 4 )
252
246
253
247
def test_get_json_schema (self , api ):
254
- stream = AdsInsights (api = api , start_date = datetime (2010 , 1 , 1 ), end_date = datetime (2011 , 1 , 1 ))
248
+ stream = AdsInsights (api = api , start_date = datetime (2010 , 1 , 1 ), end_date = datetime (2011 , 1 , 1 ), insights_lookback_window = 28 )
255
249
256
250
schema = stream .get_json_schema ()
257
251
@@ -261,7 +255,11 @@ def test_get_json_schema(self, api):
261
255
262
256
def test_get_json_schema_custom (self , api ):
263
257
stream = AdsInsights (
264
- api = api , start_date = datetime (2010 , 1 , 1 ), end_date = datetime (2011 , 1 , 1 ), breakdowns = ["device_platform" , "country" ]
258
+ api = api ,
259
+ start_date = datetime (2010 , 1 , 1 ),
260
+ end_date = datetime (2011 , 1 , 1 ),
261
+ breakdowns = ["device_platform" , "country" ],
262
+ insights_lookback_window = 28 ,
265
263
)
266
264
267
265
schema = stream .get_json_schema ()
@@ -275,6 +273,7 @@ def test_fields(self, api):
275
273
api = api ,
276
274
start_date = datetime (2010 , 1 , 1 ),
277
275
end_date = datetime (2011 , 1 , 1 ),
276
+ insights_lookback_window = 28 ,
278
277
)
279
278
280
279
fields = stream .fields
@@ -289,6 +288,7 @@ def test_fields_custom(self, api):
289
288
start_date = datetime (2010 , 1 , 1 ),
290
289
end_date = datetime (2011 , 1 , 1 ),
291
290
fields = ["account_id" , "account_currency" ],
291
+ insights_lookback_window = 28 ,
292
292
)
293
293
294
294
assert stream .fields == ["account_id" , "account_currency" ]
@@ -297,7 +297,7 @@ def test_completed_slices_in_lookback_period(self, api, monkeypatch, set_today):
297
297
start_date = pendulum .parse ("2020-03-01" )
298
298
end_date = pendulum .parse ("2020-05-01" )
299
299
set_today ("2020-04-01" )
300
- monkeypatch . setattr ( AdsInsights , "INSIGHTS_LOOKBACK_PERIOD" , pendulum . duration ( days = 10 ))
300
+
301
301
monkeypatch .setattr (source_facebook_marketing .streams .base_insight_streams , "InsightAsyncJob" , FakeInsightAsyncJob )
302
302
monkeypatch .setattr (source_facebook_marketing .streams .base_insight_streams , "InsightAsyncJobManager" , FakeInsightAsyncJobManager )
303
303
@@ -311,7 +311,7 @@ def test_completed_slices_in_lookback_period(self, api, monkeypatch, set_today):
311
311
"time_increment" : 1 ,
312
312
}
313
313
314
- stream = AdsInsights (api = api , start_date = start_date , end_date = end_date )
314
+ stream = AdsInsights (api = api , start_date = start_date , end_date = end_date , insights_lookback_window = 10 )
315
315
stream .state = state
316
316
assert stream ._completed_slices == {pendulum .Date (2020 , 3 , 21 ), pendulum .Date (2020 , 3 , 22 ), pendulum .Date (2020 , 3 , 23 )}
317
317
@@ -327,11 +327,11 @@ def test_incremental_lookback_period_updated(self, api, monkeypatch, set_today):
327
327
start_date = pendulum .parse ("2020-03-01" )
328
328
end_date = pendulum .parse ("2020-05-01" )
329
329
yesterday , _ = set_today ("2020-04-01" )
330
- monkeypatch . setattr ( AdsInsights , "INSIGHTS_LOOKBACK_PERIOD" , pendulum . duration ( days = 20 ))
330
+
331
331
monkeypatch .setattr (source_facebook_marketing .streams .base_insight_streams , "InsightAsyncJob" , FakeInsightAsyncJob )
332
332
monkeypatch .setattr (source_facebook_marketing .streams .base_insight_streams , "InsightAsyncJobManager" , FakeInsightAsyncJobManager )
333
333
334
- stream = AdsInsights (api = api , start_date = start_date , end_date = end_date )
334
+ stream = AdsInsights (api = api , start_date = start_date , end_date = end_date , insights_lookback_window = 20 )
335
335
336
336
records = read_full_refresh (stream )
337
337
assert len (records ) == (yesterday - start_date ).days + 1
0 commit comments