mirror of
				https://github.com/peeringdb/peeringdb.git
				synced 2024-05-11 05:55:09 +00:00 
			
		
		
		
	* stub in poetry for pipenv * re-add tester image * add pre-commit / formatting * fix ghactions * revert test data whitespace, exclude tests/data * revert ws * decruft, rm tox/pipenv * install dev packages for base image * add lgtm config to force to py3
		
			
				
	
	
		
			191 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			191 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import json
 | |
| import uuid
 | |
| 
 | |
| import pytest
 | |
| from django.conf import settings
 | |
| from django.contrib.auth import get_user
 | |
| from django.contrib.auth.models import AnonymousUser, Group
 | |
| from django.test import Client, RequestFactory, TestCase
 | |
| from django_grainy.models import GroupPermission, UserPermission
 | |
| 
 | |
| import peeringdb_server.models as models
 | |
| import peeringdb_server.views as views
 | |
| 
 | |
| from .util import ClientCase
 | |
| 
 | |
| 
 | |
| class ViewTestCase(ClientCase):
 | |
| 
 | |
|     entities = ["ix", "net", "fac"]
 | |
| 
 | |
|     @classmethod
 | |
|     def setUpTestData(cls):
 | |
|         super().setUpTestData()
 | |
| 
 | |
|         # create test users
 | |
|         for name in [
 | |
|             "org_admin",
 | |
|             "user_a",
 | |
|             "user_b",
 | |
|             "user_c",
 | |
|             "user_d",
 | |
|             "user_e",
 | |
|             "user_f",
 | |
|         ]:
 | |
|             setattr(
 | |
|                 cls,
 | |
|                 name,
 | |
|                 models.User.objects.create_user(name, "%s@localhost" % name, name),
 | |
|             )
 | |
|             getattr(cls, name).set_password(name)
 | |
|             cls.user_group.user_set.add(getattr(cls, name))
 | |
| 
 | |
|         # create test org
 | |
|         cls.org = models.Organization.objects.create(name="Test org", status="ok")
 | |
|         cls.org_other = models.Organization.objects.create(
 | |
|             name="Test org other", status="ok"
 | |
|         )
 | |
| 
 | |
|         # create test entities
 | |
|         for tag in cls.entities:
 | |
|             kwargs = {"name": "Test %s" % tag, "status": "ok", "org": cls.org}
 | |
|             if tag == "net":
 | |
|                 kwargs.update(asn=1)
 | |
|             setattr(cls, tag, models.REFTAG_MAP[tag].objects.create(**kwargs))
 | |
| 
 | |
|         # add org_admin user to org as admin
 | |
|         cls.org.admin_usergroup.user_set.add(cls.org_admin)
 | |
| 
 | |
|         # add user_a user to org as member
 | |
|         cls.org.usergroup.user_set.add(cls.user_a)
 | |
|         cls.org_other.usergroup.user_set.add(cls.user_b)
 | |
| 
 | |
|     def setUp(self):
 | |
|         self.factory = RequestFactory()
 | |
| 
 | |
|     def run_view_test(self, reftag):
 | |
|         id = getattr(self, reftag).id
 | |
|         # test #1 - not logged in
 | |
|         c = Client()
 | |
|         resp = c.get("/%s/%d" % (reftag, id), follow=True)
 | |
|         self.assertEqual(resp.status_code, 200)
 | |
| 
 | |
|         # test #2 - guest logged in (not affiliated to any org)
 | |
|         c = Client()
 | |
|         c.login(username="guest", password="guest")
 | |
|         resp = c.get("/%s/%d" % (reftag, id), follow=True)
 | |
|         self.assertEqual(resp.status_code, 200)
 | |
| 
 | |
|         # test #3 - user logged in
 | |
|         c = Client()
 | |
|         c.login(username="user_a", password="user_a")
 | |
|         resp = c.get("/%s/%d" % (reftag, id), follow=True)
 | |
|         self.assertEqual(resp.status_code, 200)
 | |
| 
 | |
| 
 | |
| class TestExchangeView(ViewTestCase):
 | |
|     def test_view(self):
 | |
|         self.run_view_test("ix")
 | |
| 
 | |
| 
 | |
| class TestFacilityView(ViewTestCase):
 | |
|     def test_view(self):
 | |
|         self.run_view_test("fac")
 | |
| 
 | |
| 
 | |
| class TestOrgView(ViewTestCase):
 | |
|     def test_view(self):
 | |
|         self.run_view_test("org")
 | |
| 
 | |
| 
 | |
| class TestNetworkView(ViewTestCase):
 | |
|     @classmethod
 | |
|     def setUpTestData(cls):
 | |
|         ViewTestCase.setUpTestData()
 | |
|         # Create PoCs
 | |
|         models.NetworkContact.objects.create(
 | |
|             network=cls.net,
 | |
|             visible="Users",
 | |
|             name="Contact Users",
 | |
|             phone="12345",
 | |
|             email="a@a.a",
 | |
|             status="ok",
 | |
|         )
 | |
|         models.NetworkContact.objects.create(
 | |
|             network=cls.net,
 | |
|             visible="Public",
 | |
|             name="Contact Public",
 | |
|             phone="12345",
 | |
|             email="a@a.a",
 | |
|             status="ok",
 | |
|         )
 | |
|         models.NetworkContact.objects.create(
 | |
|             network=cls.net,
 | |
|             visible="Private",
 | |
|             name="Contact Private",
 | |
|             phone="12345",
 | |
|             email="a@a.a",
 | |
|             status="ok",
 | |
|         )
 | |
| 
 | |
|     def test_view(self):
 | |
|         self.run_view_test("net")
 | |
| 
 | |
|     def test_poc_notify(self):
 | |
|         """
 | |
|         Test that viewers are notified if PoCs are hidden from them
 | |
|         """
 | |
| 
 | |
|         TEXT_NOT_LOGGED_IN = "Some of this network's contacts are hidden because they are only visible to authenticated users and you are currently not logged in."
 | |
|         TEXT_NOT_VERIFIED = "Some of this network's contacts are hidden because your user account is not affiliated with any organization."
 | |
| 
 | |
|         self.assertEqual(models.NetworkContact.objects.all().count(), 3)
 | |
| 
 | |
|         # test #1 - not logged in
 | |
|         c = Client()
 | |
|         resp = c.get("/net/%d" % self.net.id, follow=True)
 | |
|         content = resp.content.decode("utf-8")
 | |
|         self.assertEqual(resp.status_code, 200)
 | |
|         assert resp.status_code == 200
 | |
|         assert TEXT_NOT_LOGGED_IN in content
 | |
|         assert "Contact Public" in content
 | |
|         assert "Contact Private" not in content
 | |
|         assert "Contact Users" not in content
 | |
| 
 | |
|         # test #2 - guest logged in (not affiliated to any org)
 | |
|         c = Client()
 | |
|         c.login(username="guest", password="guest")
 | |
|         resp = c.get("/net/%d" % self.net.id)
 | |
|         content = resp.content.decode("utf-8")
 | |
|         assert resp.status_code == 200
 | |
|         assert TEXT_NOT_VERIFIED in content
 | |
|         assert "Contact Public" in content
 | |
|         assert "Contact Private" not in content
 | |
|         assert "Contact Users" not in content
 | |
| 
 | |
|         # test #3 - user logged in
 | |
|         c = Client()
 | |
|         c.login(username="user_a", password="user_a")
 | |
|         resp = c.get("/net/%d" % self.net.id)
 | |
|         content = resp.content.decode("utf-8")
 | |
|         assert resp.status_code == 200
 | |
|         assert TEXT_NOT_LOGGED_IN not in content
 | |
|         assert TEXT_NOT_VERIFIED not in content
 | |
| 
 | |
|         assert "Contact Public" in content
 | |
|         assert "Contact Private" in content
 | |
|         assert "Contact Users" in content
 | |
| 
 | |
|     def test_search_asn_redirect(self):
 | |
|         """
 | |
|         When the user types AS*** or ASN*** and hits enter, if
 | |
|         a result is found it should redirect directly to the result
 | |
|         """
 | |
| 
 | |
|         c = Client()
 | |
| 
 | |
|         for q in ["as1", "asn1", "AS1", "ASN1"]:
 | |
|             resp = c.get(f"/search?q={q}", follow=True)
 | |
|             self.assertEqual(resp.status_code, 200)
 | |
|             self.assertEqual(resp.redirect_chain, [(f"/net/{self.net.id}", 302)])
 |