1
0
mirror of https://github.com/peeringdb/peeringdb.git synced 2024-05-11 05:55:09 +00:00
Files
peeringdb-peeringdb/tests/test_autocomplete.py
Matt Griswold 677f94f550 Support 202111 (#1101)
* 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>
2022-01-11 08:56:47 -06:00

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")