|
| 1 | +import copy |
1 | 2 | import zoneinfo |
2 | 3 |
|
3 | 4 | import pytest |
@@ -175,3 +176,81 @@ def test_creates_api_time_series_from_data( |
175 | 176 | core_time_series.embargo.strftime("%Y-%m-%d %H:%M:%S") |
176 | 177 | == data["time_series"][0]["embargo"] |
177 | 178 | ) |
| 179 | + |
| 180 | + @pytest.mark.django_db |
| 181 | + def test_reingests_with_updated_embargo_and_later_refresh_date( |
| 182 | + self, |
| 183 | + example_headline_data: type_hints.INCOMING_DATA_TYPE, |
| 184 | + example_time_series_data: type_hints.INCOMING_DATA_TYPE, |
| 185 | + ): |
| 186 | + """ |
| 187 | + Given headline and time series data ingested once |
| 188 | + When the same data is ingested again with a later refresh date |
| 189 | + and an updated embargo timestamp |
| 190 | + Then the latest records for CoreHeadline, CoreTimeSeries, and APITimeSeries |
| 191 | + reflect the updated embargo timestamps |
| 192 | + """ |
| 193 | + |
| 194 | + # Before ingestion |
| 195 | + assert CoreHeadline.objects.all().count() == 0 |
| 196 | + assert CoreTimeSeries.objects.all().count() == 0 |
| 197 | + assert APITimeSeries.objects.all().count() == 0 |
| 198 | + |
| 199 | + # Given |
| 200 | + initial_headline_data = copy.deepcopy(example_headline_data) |
| 201 | + initial_timeseries_data = copy.deepcopy(example_time_series_data) |
| 202 | + updated_headline_data = copy.deepcopy(initial_headline_data) |
| 203 | + updated_timeseries_data = copy.deepcopy(initial_timeseries_data) |
| 204 | + |
| 205 | + # When |
| 206 | + data_ingester(data=initial_headline_data) |
| 207 | + data_ingester(data=initial_timeseries_data) |
| 208 | + |
| 209 | + # Reingest with updated embargo and later refresh date |
| 210 | + updated_headline_refresh_date = "2023-11-10" |
| 211 | + updated_timeseries_refresh_date = "2023-11-21" |
| 212 | + updated_headline_embargo = "2023-11-18 08:00:00" |
| 213 | + updated_timeseries_embargo = "2023-11-19 09:15:00" |
| 214 | + |
| 215 | + updated_headline_data["refresh_date"] = updated_headline_refresh_date |
| 216 | + for record in updated_headline_data["data"]: |
| 217 | + record["embargo"] = updated_headline_embargo |
| 218 | + |
| 219 | + updated_timeseries_data["refresh_date"] = updated_timeseries_refresh_date |
| 220 | + for record in updated_timeseries_data["time_series"]: |
| 221 | + record["embargo"] = updated_timeseries_embargo |
| 222 | + |
| 223 | + data_ingester(data=updated_headline_data) |
| 224 | + data_ingester(data=updated_timeseries_data) |
| 225 | + |
| 226 | + # Then |
| 227 | + updated_headlines = CoreHeadline.objects.filter( |
| 228 | + refresh_date__date=updated_headline_refresh_date |
| 229 | + ) |
| 230 | + assert len(updated_headline_data["data"]) == 2 |
| 231 | + for record in updated_headlines: |
| 232 | + assert ( |
| 233 | + record.embargo.strftime("%Y-%m-%d %H:%M:%S") == updated_headline_embargo |
| 234 | + ) |
| 235 | + |
| 236 | + updated_core_timeseries = CoreTimeSeries.objects.filter( |
| 237 | + refresh_date__date=updated_timeseries_refresh_date |
| 238 | + ) |
| 239 | + assert len(updated_timeseries_data["time_series"]) == 2 |
| 240 | + for record in updated_core_timeseries: |
| 241 | + assert ( |
| 242 | + record.embargo.strftime("%Y-%m-%d %H:%M:%S") |
| 243 | + == updated_timeseries_embargo |
| 244 | + ) |
| 245 | + |
| 246 | + updated_api_timeseries = APITimeSeries.objects.filter( |
| 247 | + refresh_date__date=updated_timeseries_refresh_date |
| 248 | + ) |
| 249 | + assert updated_api_timeseries.count() == len( |
| 250 | + updated_timeseries_data["time_series"] |
| 251 | + ) |
| 252 | + for record in updated_api_timeseries: |
| 253 | + assert ( |
| 254 | + record.embargo.strftime("%Y-%m-%d %H:%M:%S") |
| 255 | + == updated_timeseries_embargo |
| 256 | + ) |
0 commit comments