import pytest from django.conf import settings from django.contrib.auth import get_user_model from django.core.management import call_command from peeringdb_server.models import REFTAG_MAP, UTC from .util import ClientCase, Group class TestWipe(ClientCase): @classmethod def setUpTestData(cls): super().setUpTestData() cls.superuser = get_user_model().objects.create_user( "superuser", "superuser@localhost", "superuser", is_superuser=True ) call_command("pdb_generate_test_data", limit=2, commit=True) def test_run(self): # double check that data is setup correctly before # running pdbwipe assert get_user_model().objects.all().count() == 2 for reftag, cls in list(REFTAG_MAP.items()): assert cls.objects.all().count() > 1 assert Group.objects.all().count() > 2 # run pdb_wipe settings.TUTORIAL_MODE = True call_command("pdb_wipe", commit=True) settings.TUTORIAL_MODE = False # all entities should be gone for reftag, cls in list(REFTAG_MAP.items()): assert cls.objects.all().count() == 0 # only the user and guest groups should be left assert Group.objects.all().count() == 2 # only the superuser should be left assert get_user_model().objects.all().count() == 1 assert get_user_model().objects.first().is_superuser == True # FIXME: uncomment when test.peeringdb.com is back up @pytest.mark.skip(reason="test.peeringdb.com is currently unavailable") def test_run_with_sync(self): """ Test running `pdb_wipe` and sync data from test.peeringdb.com """ dates = {} for reftag, cls in REFTAG_MAP.items(): assert cls.objects.all().count() > 1 dates[reftag] = cls.objects.all().first().created.replace(tzinfo=UTC()) settings.TUTORIAL_MODE = True call_command( "pdb_wipe", commit=True, load_data=True, load_data_url="https://test.peeringdb.com/api", ) settings.TUTORIAL_MODE = False for reftag, cls in REFTAG_MAP.items(): created = cls.objects.all().first().created.replace(tzinfo=UTC()) assert created != dates[reftag] assert cls.objects.all().count() > 1