mirror of
https://github.com/peeringdb/peeringdb.git
synced 2024-05-11 05:55:09 +00:00
* Block registering private ASN ranges * Add a continental region field for facilities #1007 * Incorrect order of search results #232 * Allow users to upload a small logo to their record #346 * Sponsor badge CSS and text translation issues #453 * IXP and Facility summary #18 * Add sales email and phone contact to ix object #949 * Increase timeout timer for IX-F JSON importer to 30s #962 * IX-F manually triggered import bugs #1054 * remove survey notifications * IX-F importer: manual add followed by IX-F prompted add can result in "The server rejected your data" #807 * performance fix for net view * api documentation generate broken #956 * fix poc set missing from net view * Auto focus cursor on search field on main website #695 * PeeringDB website has a poor choice of line-breaks for IPv6 addresses. #748 * Delete childless org objects #838 * linting * poetry lock * re-add mistakingly dropped translation to email template * fix template variables * regen docs * regen api docs * add u2f api * fix merge cruft * fido u2f webauthn first steps * dont need this * typo * first ux steps for security key management, u2f views * u2f auth * linting * Cascade delete when performed by superuser in django-admin #735 * security key passwordless login * reset webauthn migrations * security key 2fa * linting * ux cleanup * cleanup * Add IXP to AS record / dropdown limited #469 * ignore orgs that have pre-dated or finished sponsorships attached * split out to django_security_keys * default to 90 days * make URL required for new objects #374 * move CONN_MAX_AGE to proper location and expose as env var (#1060) * Error message for invalid password on email change * Registering a new facility or exchange organization is broken #1062 * Creating a facility that matches the name of a soft-deleted facility will cause the entry to bypass the verification queue #901 * irr source validator doesn't allow for hyphens in source #921 * split out javascript * split out js * Clicking "Add" to add a user api-key without providing a name for the key raises Internal Error #1033 * remove security key admin views * global stats don't show up at login screen #284 * Possible for "pending" exchange to have "deleted" ixlan (#1077) * webauthn finalizations * oidc support for oauth provider #1070 * Revert "Merge branch 'gh_1070' into 'support_202111'" * remove unused dev mounts * linting * add django-security-key and relock poetry * re-add imports removed through linting * docs regen * oauth toolkit pinned to 1.6.1 django-security-keys pinned to 1.0.1 * remove debug message * linting * linting Co-authored-by: Stefan Pratter <stefan@20c.com> Co-authored-by: David Poarch <dpoarch@20c.com>
125 lines
3.8 KiB
Python
125 lines
3.8 KiB
Python
import json
|
|
|
|
import reversion
|
|
from django.test import Client, RequestFactory
|
|
from django.urls import reverse
|
|
|
|
from peeringdb_server import autocomplete_views
|
|
from peeringdb_server.models import InternetExchange, Network, Organization, User
|
|
|
|
from .util import ClientCase
|
|
|
|
|
|
class TestAutocomplete(ClientCase):
|
|
@classmethod
|
|
def setUpTestData(cls):
|
|
super().setUpTestData()
|
|
cls.staff_user = User.objects.create_user(
|
|
"staff", "staff@localhost", "staff", is_staff=True
|
|
)
|
|
|
|
def setUp(self):
|
|
self.factory = RequestFactory()
|
|
|
|
def test_deleted_versions(self):
|
|
with reversion.create_revision():
|
|
org = Organization.objects.create(name="Test Org", status="ok")
|
|
with reversion.create_revision():
|
|
org.delete()
|
|
with reversion.create_revision():
|
|
org.status = "ok"
|
|
org.save()
|
|
with reversion.create_revision():
|
|
org.delete()
|
|
|
|
url = reverse("autocomplete-admin-deleted-versions")
|
|
|
|
r = self.factory.get(f"{url}?q=org {org.id}")
|
|
r.user = self.staff_user
|
|
r = autocomplete_views.DeletedVersionAutocomplete.as_view()(r)
|
|
|
|
content = json.loads(r.content)
|
|
|
|
assert reversion.models.Version.objects.all().count() == 4
|
|
assert len(content.get("results")) == 2
|
|
|
|
def test_network_autocomplete(self):
|
|
org = Organization.objects.create(name="Test Org", status="ok")
|
|
net = Network.objects.create(
|
|
name="First Network", asn=1000, status="ok", org=org
|
|
)
|
|
net = Network.objects.create(
|
|
name="Second Network", asn=2000, status="ok", org=org
|
|
)
|
|
|
|
url = reverse("autocomplete-net")
|
|
|
|
req = self.factory.get(f"{url}?q=First")
|
|
rsp = autocomplete_views.NetworkAutocomplete.as_view()(req).content.decode(
|
|
"utf-8"
|
|
)
|
|
|
|
assert "First" in rsp
|
|
assert "Second" not in rsp
|
|
|
|
req = self.factory.get(f"{url}?q=1000")
|
|
rsp = autocomplete_views.NetworkAutocomplete.as_view()(req).content.decode(
|
|
"utf-8"
|
|
)
|
|
|
|
assert "First" in rsp
|
|
assert "Second" not in rsp
|
|
|
|
req = self.factory.get(f"{url}?q=Network")
|
|
rsp = autocomplete_views.NetworkAutocomplete.as_view()(req).content.decode(
|
|
"utf-8"
|
|
)
|
|
|
|
assert "First" in rsp
|
|
assert "Second" in rsp
|
|
|
|
def test_autocomplete_sort(self):
|
|
org = Organization.objects.create(name="Test Org", status="ok")
|
|
|
|
Network.objects.all().delete()
|
|
|
|
# Data for exact matches
|
|
net1 = Network.objects.create(name=f"NET", asn=1, status="ok", org=org)
|
|
# Data for startswith matches
|
|
net2 = Network.objects.create(name=f"NET DUMMY", asn=2, status="ok", org=org)
|
|
# Data for contains matches
|
|
net3 = Network.objects.create(name=f"TEST NET", asn=3, status="ok", org=org)
|
|
|
|
url = reverse("autocomplete-net")
|
|
|
|
req = self.factory.get(f"{url}?q=NET")
|
|
rsp = autocomplete_views.NetworkAutocomplete.as_view()(req).content.decode(
|
|
"utf-8"
|
|
)
|
|
|
|
res = rsp.split("</span>")
|
|
|
|
# First result should be exact match
|
|
assert f'data-value="{net1.id}"' in res[0]
|
|
|
|
# Second result should be startswith match
|
|
assert f'data-value="{net2.id}"' in res[1]
|
|
|
|
# Third result should be contains match
|
|
assert f'data-value="{net3.id}"' in res[2]
|
|
|
|
def test_autocomplete_results(self):
|
|
org = Organization.objects.create(name="Test Org", status="ok")
|
|
|
|
for i in range(1, 130):
|
|
InternetExchange.objects.create(name=f"IX {i}", status="ok", org=org)
|
|
|
|
url = reverse("autocomplete-ix")
|
|
|
|
req = self.factory.get(f"{url}?q=IX")
|
|
rsp = autocomplete_views.ExchangeAutocomplete.as_view()(req).content.decode(
|
|
"utf-8"
|
|
)
|
|
|
|
assert 129 == rsp.count("data-value")
|