1
0
mirror of https://github.com/peeringdb/peeringdb.git synced 2024-05-11 05:55:09 +00:00
Files
peeringdb-peeringdb/tests/test_cmd_pdb_cleanup_vq.py
Matt Griswold 1fa46e2acb Support 202009 (#841)
* Add EmailMultiAlternatives import

* Add strip_tags import

* Add settings imports and new email test

* Add email increment to ixf and tests

* IX-F Importer: suggested update when it should be add + remove #832

* Take email increment out of if-else

* Add max and min speed settings

* Change validation check for models

* new speed validation

* Add basic user command

* Add pdb cleanup users tool

* Add pretty printing for speed

* Add users as a subparser

* add translation override to signals

* Add parser as parent of subparser

* refactor and change test

* Move override to cover single variable

* Add tooltip option for individual checkboxes

* address 'fix me' issue with field_help helper func

* Add zipcode validator and black format

* Make website required input but zipcode dependent on country

* Add net POC requirement to Netixlan serializer

* Website is now blank=False ie required in all forms

* refine error message

* Require email is not blank and add test

* Change error message

* add website and zipcode test, edit zipcode error message

* change placement of tooltip

* add question mark

* Add comment

* Add runtime error logging for ixp member import

* add uncaught error test

* delete two unused methods

* Rename test file and add different tests

* Add missing email imports (reproduces changes in hot_fix_gh_831)

* add resend methods

* Add missing email imports (reproduces changes in hot_fix_gh_831)

* Add pytest-mock to pipfile

* Add resend email mechanism

* Add email resending

* remove failing assertion

* fix for ticket_aged_proposals

* Wrap resending emails in conditional for commit

* Add resend email tests

* fix mail_Debug bug

* Figure out production mailing and resending settings

* Add stale info field

* default IXF_RESEND_FAILED_EMAILS to False
fix issue with sent being set even if email was not sent
fix issue with output stating resending of emails even if it wasnt

* IX-F Preview - shows the consolidated delete operation when it shouldn't (#824)

* black format (v 19.10)

* black formatting

* black formatting

* pipfile relock

* make changes from #825 play nice with changes from #833

* black to pipenv dev packages

Co-authored-by: Elliot Frank <elliot@20c.com>
Co-authored-by: Stefan Pratter <stefan@20c.com>
2020-09-29 13:07:56 -05:00

112 lines
3.6 KiB
Python

from datetime import datetime, timezone, timedelta
import pytest
import random
import string
from django.contrib.contenttypes.models import ContentType
from django.conf import settings
from django.core.management import call_command
from django.test import override_settings
from peeringdb_server.models import User, VerificationQueueItem
NUM_YEAR_OLD_USERS = 20
NUM_MONTH_OLD_USERS = 15
NUM_DAY_OLD_USERS = 10
@pytest.mark.django_db
def test_cleanup_users(year_old_users, month_old_users, day_old_users):
vqi_count = VerificationQueueItem.objects.count()
users_count = User.objects.count()
call_command("pdb_cleanup_vq", "users", commit=True)
# Assert we deleted VQI instances
assert VerificationQueueItem.objects.count() == vqi_count - NUM_YEAR_OLD_USERS
# Assert users themselves are not deleted
assert User.objects.count() == users_count
# Try test with maximum age of vqi to be 14 days
@pytest.mark.django_db
@override_settings(VQUEUE_USER_MAX_AGE=14)
def test_cleanup_users_override_settings(year_old_users, month_old_users, day_old_users):
vqi_count = VerificationQueueItem.objects.count()
users_count = User.objects.count()
call_command("pdb_cleanup_vq", "users", commit=True)
# Assert we deleted more VQI instances
assert VerificationQueueItem.objects.count() == vqi_count - (NUM_YEAR_OLD_USERS + NUM_MONTH_OLD_USERS)
# Assert users themselves are not deleted
assert User.objects.count() == users_count
@pytest.mark.django_db
def test_cleanup_users_no_commit(year_old_users, month_old_users, day_old_users):
vqi_count = VerificationQueueItem.objects.count()
users_count = User.objects.count()
call_command("pdb_cleanup_vq", "users", commit=False)
# Assert we didn't delete VQI instances
assert VerificationQueueItem.objects.count() == vqi_count
# Assert users themselves are not deleted
assert User.objects.count() == users_count
@pytest.mark.django_db
def test_cleanup_users_no_users(year_old_users, month_old_users, day_old_users):
vqi_count = VerificationQueueItem.objects.count()
users_count = User.objects.count()
call_command("pdb_cleanup_vq", commit=True)
# Assert we didn't delete VQI instances
assert VerificationQueueItem.objects.count() == vqi_count
# Assert users themselves are not deleted
assert User.objects.count() == users_count
# --------- FIXTURES AND HELPERS -----------------
def create_users_and_vqi(users_to_generate, days_old):
"""
Input: Number users to generate [int]
Days old to make their VerificationQueueItem [int]
Output: List of tuples, [(user, verification queue item), ...]
"""
def random_str():
return ''.join(random.choice(string.ascii_letters) for i in range(4))
def admin_user():
user, _ = User.objects.get_or_create(username="admin")
return user
admin_user = admin_user()
output = []
created_date = datetime.now(timezone.utc) - timedelta(days=days_old)
for i in range(users_to_generate):
user = User.objects.create(
username=f'User {random_str()}',
)
vqi = VerificationQueueItem.objects.create(
content_type=ContentType.objects.get_for_model(User),
object_id=user.id,
user=admin_user,
)
vqi.created = created_date
vqi.save()
output.append((user, vqi))
return output
@pytest.fixture()
def year_old_users():
create_users_and_vqi(NUM_YEAR_OLD_USERS, 365)
@pytest.fixture()
def month_old_users():
create_users_and_vqi(NUM_MONTH_OLD_USERS, 60)
@pytest.fixture()
def day_old_users():
create_users_and_vqi(NUM_DAY_OLD_USERS, 1)