2020-12-03 15:35:33 +00:00
|
|
|
import json
|
|
|
|
import os
|
|
|
|
|
2019-02-07 08:00:22 +00:00
|
|
|
from django.conf import settings
|
2021-07-10 10:12:35 -05:00
|
|
|
from django.contrib.auth.models import AnonymousUser, Group
|
|
|
|
from django.test import TestCase
|
|
|
|
from django_grainy.models import GroupPermission, UserPermission
|
|
|
|
|
2018-11-08 19:45:21 +00:00
|
|
|
import peeringdb_server.models as models
|
2019-02-07 08:00:22 +00:00
|
|
|
from peeringdb_server import settings as pdb_settings
|
2018-11-08 19:45:21 +00:00
|
|
|
|
|
|
|
|
|
|
|
class ClientCase(TestCase):
|
|
|
|
@classmethod
|
|
|
|
def setUpTestData(cls):
|
|
|
|
# create user and guest group
|
|
|
|
|
2021-01-13 20:35:07 +00:00
|
|
|
cls.guest_group = guest_group = Group.objects.create(
|
|
|
|
name="guest", id=settings.GUEST_GROUP_ID
|
|
|
|
)
|
|
|
|
cls.user_group = user_group = Group.objects.create(
|
|
|
|
name="user", id=settings.USER_GROUP_ID
|
|
|
|
)
|
2020-12-03 19:10:02 +00:00
|
|
|
|
|
|
|
settings.USER_GROUP_ID = cls.user_group.id
|
|
|
|
settings.GUEST_GROUP_ID = cls.guest_group.id
|
2018-11-08 19:45:21 +00:00
|
|
|
|
|
|
|
cls.guest_user = models.User.objects.create_user(
|
2019-12-05 16:57:52 +00:00
|
|
|
"guest", "guest@localhost", "guest"
|
|
|
|
)
|
2020-12-03 19:10:02 +00:00
|
|
|
cls.guest_group.user_set.add(cls.guest_user)
|
2018-11-08 19:45:21 +00:00
|
|
|
|
2021-01-13 20:35:07 +00:00
|
|
|
GroupPermission.objects.create(
|
|
|
|
group=guest_group, namespace="peeringdb.organization", permission=0x01
|
2019-12-05 16:57:52 +00:00
|
|
|
)
|
2018-11-08 19:45:21 +00:00
|
|
|
|
2021-01-13 20:35:07 +00:00
|
|
|
GroupPermission.objects.create(
|
|
|
|
group=user_group, namespace="peeringdb.organization", permission=0x01
|
2019-12-05 16:57:52 +00:00
|
|
|
)
|
2018-11-08 19:45:21 +00:00
|
|
|
|
2021-01-13 20:35:07 +00:00
|
|
|
GroupPermission.objects.create(
|
|
|
|
group=user_group,
|
2018-11-08 19:45:21 +00:00
|
|
|
namespace="peeringdb.organization.*.network.*.poc_set.users",
|
2021-01-13 20:35:07 +00:00
|
|
|
permission=0x01,
|
2019-12-05 16:57:52 +00:00
|
|
|
)
|
2018-11-08 19:45:21 +00:00
|
|
|
|
2021-01-13 20:35:07 +00:00
|
|
|
GroupPermission.objects.create(
|
|
|
|
group=guest_group,
|
2018-11-08 19:45:21 +00:00
|
|
|
namespace="peeringdb.organization.*.network.*.poc_set.public",
|
2021-01-13 20:35:07 +00:00
|
|
|
permission=0x01,
|
2019-12-05 16:57:52 +00:00
|
|
|
)
|
2019-02-07 08:00:22 +00:00
|
|
|
|
|
|
|
|
|
|
|
class SettingsCase(ClientCase):
|
|
|
|
|
|
|
|
"""
|
|
|
|
Since we read settings from peeringdb_server.settings
|
|
|
|
we can't use the `settings` fixture from pytest-django
|
|
|
|
|
|
|
|
This class instead does something similar for peeringdb_server.settings,
|
|
|
|
where it will override settings specified and then reset after test case
|
|
|
|
is finished
|
|
|
|
"""
|
|
|
|
|
|
|
|
settings = {}
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def setUp(cls):
|
|
|
|
cls._restore = {}
|
2020-01-08 13:29:58 -06:00
|
|
|
for k, v in list(cls.settings.items()):
|
2020-12-03 19:10:02 +00:00
|
|
|
cls._restore[k] = getattr(pdb_settings, k, getattr(settings, k, None))
|
2019-02-07 08:00:22 +00:00
|
|
|
setattr(pdb_settings, k, v)
|
2020-12-03 19:10:02 +00:00
|
|
|
setattr(settings, k, v)
|
2019-02-07 08:00:22 +00:00
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def tearDown(cls):
|
2020-01-08 13:29:58 -06:00
|
|
|
for k, v in list(cls._restore.items()):
|
2019-02-07 08:00:22 +00:00
|
|
|
setattr(pdb_settings, k, v)
|
2020-12-03 19:10:02 +00:00
|
|
|
setattr(settings, k, v)
|
|
|
|
|
|
|
|
|
|
|
|
def reset_group_ids():
|
|
|
|
"""
|
|
|
|
Guest and user groups will get recreated for each tests,
|
|
|
|
however mysql sequential ids wont be reset between tests.
|
|
|
|
|
|
|
|
Tests that require USER_GROUP_ID and GUEST_GROUP_ID to
|
|
|
|
point to to correct groups should call this function
|
|
|
|
to make sure the settings are updated
|
|
|
|
"""
|
|
|
|
|
2021-11-09 09:47:38 -06:00
|
|
|
try:
|
|
|
|
settings.USER_GROUP_ID = Group.objects.get(name="user").id
|
|
|
|
except Group.DoesNotExist:
|
|
|
|
Group.objects.create(name="user", id=settings.USER_GROUP_ID)
|
|
|
|
|
|
|
|
try:
|
|
|
|
settings.GUEST_GROUP_ID = Group.objects.get(name="guest").id
|
|
|
|
except Group.DoesNotExist:
|
|
|
|
Group.objects.create(name="guest", id=settings.GUEST_GROUP_ID)
|
2020-12-03 19:10:02 +00:00
|
|
|
|
2021-01-13 20:35:07 +00:00
|
|
|
|
2020-12-03 19:10:02 +00:00
|
|
|
def override_group_id():
|
|
|
|
from django.test import override_settings
|
2021-01-13 20:35:07 +00:00
|
|
|
|
2020-12-03 19:10:02 +00:00
|
|
|
return override_settings(
|
|
|
|
USER_GROUP_ID=Group.objects.get(name="user").id,
|
2021-01-13 20:35:07 +00:00
|
|
|
GUEST_GROUP_ID=Group.objects.get(name="guest").id,
|
2020-12-03 19:10:02 +00:00
|
|
|
)
|
2020-12-03 15:35:33 +00:00
|
|
|
|
|
|
|
|
|
|
|
# For IXF member tests
|
|
|
|
def setup_test_data(filename):
|
|
|
|
json_data = {}
|
|
|
|
entities = {}
|
|
|
|
|
|
|
|
with open(
|
|
|
|
os.path.join(
|
|
|
|
os.path.dirname(__file__),
|
|
|
|
"data",
|
|
|
|
"json_members_list",
|
|
|
|
f"{filename}.json",
|
|
|
|
),
|
|
|
|
) as fh:
|
|
|
|
json_data = json.load(fh)
|
|
|
|
|
|
|
|
return json_data
|