|
17 | 17 |
|
18 | 18 | from warehouse.accounts import tasks
|
19 | 19 | from warehouse.accounts.models import TermsOfServiceEngagement
|
20 |
| -from warehouse.accounts.tasks import compute_user_metrics, notify_users_of_tos_update |
| 20 | +from warehouse.accounts.tasks import ( |
| 21 | + batch_update_email_domain_status, |
| 22 | + compute_user_metrics, |
| 23 | + notify_users_of_tos_update, |
| 24 | +) |
21 | 25 |
|
22 | 26 | from ...common.db.accounts import EmailFactory, UserFactory
|
23 | 27 | from ...common.db.packaging import ProjectFactory, ReleaseFactory
|
@@ -192,3 +196,55 @@ def test_compute_user_metrics(db_request, metrics):
|
192 | 196 | ],
|
193 | 197 | ),
|
194 | 198 | ]
|
| 199 | + |
| 200 | + |
| 201 | +def test_update_email_domain_status(db_request, domain_status_service, mocker): |
| 202 | + """ |
| 203 | + Test that the batch update performs the correct queries and updates |
| 204 | + """ |
| 205 | + never_checked = EmailFactory.create( |
| 206 | + email="[email protected]", domain_last_checked=None |
| 207 | + ) |
| 208 | + over_threshold = EmailFactory.create( |
| 209 | + |
| 210 | + domain_last_checked=datetime.now(tz=timezone.utc) - timedelta(days=90), |
| 211 | + ) |
| 212 | + on_threshold = EmailFactory.create( |
| 213 | + |
| 214 | + domain_last_checked=datetime.now(tz=timezone.utc) - timedelta(days=30), |
| 215 | + ) |
| 216 | + under_threshold = EmailFactory.create( |
| 217 | + |
| 218 | + domain_last_checked=datetime.now(tz=timezone.utc) - timedelta(days=1), |
| 219 | + ) |
| 220 | + |
| 221 | + batch_update_email_domain_status(db_request) |
| 222 | + |
| 223 | + assert domain_status_service.get_domain_status.call_count == 3 |
| 224 | + domain_status_service.get_domain_status.assert_has_calls( |
| 225 | + [ |
| 226 | + mocker.call(never_checked.domain), |
| 227 | + mocker.call(over_threshold.domain), |
| 228 | + mocker.call(on_threshold.domain), |
| 229 | + ] |
| 230 | + ) |
| 231 | + |
| 232 | + assert never_checked.domain_last_status == ["active"] |
| 233 | + assert over_threshold.domain_last_status == ["active"] |
| 234 | + assert on_threshold.domain_last_status == ["active"] |
| 235 | + assert under_threshold.domain_last_status is None # no default, not updated |
| 236 | + |
| 237 | + |
| 238 | +def test_update_email_domain_status_does_not_update_if_not_needed( |
| 239 | + db_request, domain_status_service, mocker |
| 240 | +): |
| 241 | + mocker.patch.object(domain_status_service, "get_domain_status", return_value=None) |
| 242 | + |
| 243 | + fail_check = EmailFactory.create() |
| 244 | + |
| 245 | + batch_update_email_domain_status(db_request) |
| 246 | + |
| 247 | + domain_status_service.get_domain_status.assert_called_once_with(fail_check.domain) |
| 248 | + |
| 249 | + assert fail_check.domain_last_checked is None |
| 250 | + assert fail_check.domain_last_status is None |
0 commit comments