Skip to content

Commit bd07ad4

Browse files
n2ygkAndrew-Chen-Wang
authored andcommitted
Remove bulk_create due to changed behavior between dj32 and dj40.
1 parent f4136bf commit bd07ad4

File tree

1 file changed

+85
-45
lines changed

1 file changed

+85
-45
lines changed

tests/test_models.py

Lines changed: 85 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -298,9 +298,11 @@ def setUp(self):
298298
super().setUp()
299299
# Insert many tokens, both expired and not, and grants.
300300
self.num_tokens = 100
301-
now = timezone.now()
302-
earlier = now - timedelta(seconds=100)
303-
later = now + timedelta(seconds=100)
301+
self.delta_secs = 1000
302+
self.now = timezone.now()
303+
self.earlier = self.now - timedelta(seconds=self.delta_secs)
304+
self.later = self.now + timedelta(seconds=self.delta_secs)
305+
304306
app = Application.objects.create(
305307
name="test_app",
306308
redirect_uris="http://localhost http://example.com http://example.org",
@@ -309,58 +311,54 @@ def setUp(self):
309311
authorization_grant_type=Application.GRANT_AUTHORIZATION_CODE,
310312
)
311313
# make 200 access tokens, half current and half expired.
312-
expired_access_tokens = AccessToken.objects.bulk_create(
313-
AccessToken(token="expired AccessToken {}".format(i), expires=earlier)
314+
expired_access_tokens = [
315+
AccessToken(token="expired AccessToken {}".format(i), expires=self.earlier)
314316
for i in range(self.num_tokens)
315-
)
316-
current_access_tokens = AccessToken.objects.bulk_create(
317-
AccessToken(token=f"current AccessToken {i}", expires=later) for i in range(self.num_tokens)
318-
)
317+
]
318+
for a in expired_access_tokens:
319+
a.save()
320+
321+
current_access_tokens = [
322+
AccessToken(token=f"current AccessToken {i}", expires=self.later) for i in range(self.num_tokens)
323+
]
324+
for a in current_access_tokens:
325+
a.save()
326+
319327
# Give the first half of the access tokens a refresh token,
320328
# alternating between current and expired ones.
321-
RefreshToken.objects.bulk_create(
329+
for i in range(0, len(expired_access_tokens) // 2, 2):
322330
RefreshToken(
323331
token=f"expired AT's refresh token {i}",
324332
application=app,
325-
access_token=expired_access_tokens[i].pk,
333+
access_token=expired_access_tokens[i],
326334
user=self.user,
327-
)
328-
for i in range(0, len(expired_access_tokens) // 2, 2)
329-
)
330-
RefreshToken.objects.bulk_create(
335+
).save()
336+
337+
for i in range(1, len(current_access_tokens) // 2, 2):
331338
RefreshToken(
332339
token=f"current AT's refresh token {i}",
333340
application=app,
334-
access_token=current_access_tokens[i].pk,
341+
access_token=current_access_tokens[i],
335342
user=self.user,
336-
)
337-
for i in range(1, len(current_access_tokens) // 2, 2)
338-
)
343+
).save()
344+
339345
# Make some grants, half of which are expired.
340-
Grant.objects.bulk_create(
346+
for i in range(self.num_tokens):
341347
Grant(
342348
user=self.user,
343349
code=f"old grant code {i}",
344350
application=app,
345-
expires=earlier,
351+
expires=self.earlier,
346352
redirect_uri="https://localhost/redirect",
347-
)
348-
for i in range(self.num_tokens)
349-
)
350-
Grant.objects.bulk_create(
353+
).save()
354+
for i in range(self.num_tokens):
351355
Grant(
352356
user=self.user,
353357
code=f"new grant code {i}",
354358
application=app,
355-
expires=later,
359+
expires=self.later,
356360
redirect_uri="https://localhost/redirect",
357-
)
358-
for i in range(self.num_tokens)
359-
)
360-
361-
def test_clear_expired_tokens(self):
362-
self.oauth2_settings.REFRESH_TOKEN_EXPIRE_SECONDS = 60
363-
assert clear_expired() is None
361+
).save()
364362

365363
def test_clear_expired_tokens_incorect_timetype(self):
366364
self.oauth2_settings.REFRESH_TOKEN_EXPIRE_SECONDS = "A"
@@ -372,19 +370,61 @@ def test_clear_expired_tokens_incorect_timetype(self):
372370
def test_clear_expired_tokens_with_tokens(self):
373371
self.oauth2_settings.CLEAR_EXPIRED_TOKENS_BATCH_SIZE = 10
374372
self.oauth2_settings.CLEAR_EXPIRED_TOKENS_BATCH_INTERVAL = 0.0
375-
at_count = AccessToken.objects.count()
376-
assert at_count == 2 * self.num_tokens, f"{2 * self.num_tokens} access tokens should exist."
377-
rt_count = RefreshToken.objects.count()
378-
assert rt_count == self.num_tokens // 2, f"{self.num_tokens // 2} refresh tokens should exist."
379-
gt_count = Grant.objects.count()
380-
assert gt_count == self.num_tokens * 2, f"{self.num_tokens * 2} grants should exist."
373+
self.oauth2_settings.REFRESH_TOKEN_EXPIRE_SECONDS = self.delta_secs // 2
374+
375+
# before clear_expired(), confirm setup as expected
376+
initial_at_count = AccessToken.objects.count()
377+
assert initial_at_count == 2 * self.num_tokens, f"{2 * self.num_tokens} access tokens should exist."
378+
initial_expired_at_count = AccessToken.objects.filter(expires__lte=self.now).count()
379+
assert (
380+
initial_expired_at_count == self.num_tokens
381+
), f"{self.num_tokens} expired access tokens should exist."
382+
initial_current_at_count = AccessToken.objects.filter(expires__gt=self.now).count()
383+
assert (
384+
initial_current_at_count == self.num_tokens
385+
), f"{self.num_tokens} current access tokens should exist."
386+
initial_rt_count = RefreshToken.objects.count()
387+
assert (
388+
initial_rt_count == self.num_tokens // 2
389+
), f"{self.num_tokens // 2} refresh tokens should exist."
390+
initial_rt_expired_at_count = RefreshToken.objects.filter(access_token__expires__lte=self.now).count()
391+
assert (
392+
initial_rt_expired_at_count == initial_rt_count / 2
393+
), "half the refresh tokens should be for expired access tokens."
394+
initial_rt_current_at_count = RefreshToken.objects.filter(access_token__expires__gt=self.now).count()
395+
assert (
396+
initial_rt_current_at_count == initial_rt_count / 2
397+
), "half the refresh tokens should be for current access tokens."
398+
initial_gt_count = Grant.objects.count()
399+
assert initial_gt_count == self.num_tokens * 2, f"{self.num_tokens * 2} grants should exist."
400+
381401
clear_expired()
382-
at_count = AccessToken.objects.count()
383-
assert at_count == self.num_tokens, "Half the access tokens should not have been deleted."
384-
rt_count = RefreshToken.objects.count()
385-
assert rt_count == self.num_tokens // 2, "Half of the refresh tokens should have been deleted."
386-
gt_count = Grant.objects.count()
387-
assert gt_count == self.num_tokens, "Half the grants should have been deleted."
402+
403+
# after clear_expired():
404+
remaining_at_count = AccessToken.objects.count()
405+
assert (
406+
remaining_at_count == initial_at_count // 2
407+
), "half the initial access tokens should still exist."
408+
remaining_expired_at_count = AccessToken.objects.filter(expires__lte=self.now).count()
409+
assert remaining_expired_at_count == 0, "no remaining expired access tokens should still exist."
410+
remaining_current_at_count = AccessToken.objects.filter(expires__gt=self.now).count()
411+
assert (
412+
remaining_current_at_count == initial_current_at_count
413+
), "all current access tokens should still exist."
414+
remaining_rt_count = RefreshToken.objects.count()
415+
assert remaining_rt_count == initial_rt_count // 2, "half the refresh tokens should still exist."
416+
remaining_rt_expired_at_count = RefreshToken.objects.filter(
417+
access_token__expires__lte=self.now
418+
).count()
419+
assert remaining_rt_expired_at_count == 0, "no refresh tokens for expired AT's should still exist."
420+
remaining_rt_current_at_count = RefreshToken.objects.filter(
421+
access_token__expires__gt=self.now
422+
).count()
423+
assert (
424+
remaining_rt_current_at_count == initial_rt_current_at_count
425+
), "all the refresh tokens for current access tokens should still exist."
426+
remaining_gt_count = Grant.objects.count()
427+
assert remaining_gt_count == initial_gt_count // 2, "half the remaining grants should still exist."
388428

389429

390430
@pytest.mark.django_db

0 commit comments

Comments
 (0)