mirror of
				https://github.com/peeringdb/peeringdb.git
				synced 2024-05-11 05:55:09 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			89 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import json
 | |
| import pytest
 | |
| 
 | |
| from util import ClientCase
 | |
| from test_api import setup_module, teardown_module
 | |
| from peeringdb_server.models import REFTAG_MAP, User
 | |
| from rest_framework.test import APIClient, force_authenticate
 | |
| 
 | |
| 
 | |
| class TestAPIClientCompat(ClientCase):
 | |
|     @classmethod
 | |
|     def setUpTestData(cls):
 | |
|         super(TestAPIClientCompat, cls).setUpTestData()
 | |
|         cls.superuser = User.objects.create_user("su", "su@localhost", "su",
 | |
|                                                  is_superuser=True)
 | |
|         cls.org = REFTAG_MAP["org"].objects.create(name="Test Org",
 | |
|                                                    status="ok")
 | |
| 
 | |
|     @property
 | |
|     def expected_compat_err_str(self):
 | |
|         return "Your client version is incompatible with server version of the api, please install peeringdb>={},<={} {}>={},<={}".format(
 | |
|             "0.6", "0.6.5", "django_peeringdb", "0.6", "0.6.5")
 | |
| 
 | |
|     def _compat(self, ua_c, ua_be, error):
 | |
|         if ua_c and ua_be:
 | |
|             useragent = "PeeringDB/{} django_peeringdb/{}".format(ua_c, ua_be)
 | |
|             self.client = APIClient(HTTP_USER_AGENT=useragent)
 | |
|         else:
 | |
|             self.client = APIClient()
 | |
|         self.client.force_authenticate(self.superuser)
 | |
| 
 | |
|         r = self.client.get("/api/org/1", format="json")
 | |
|         content = json.loads(r.content)
 | |
|         if error:
 | |
|             assert r.status_code == 400
 | |
|             assert content["meta"]["error"] == self.expected_compat_err_str
 | |
|         else:
 | |
|             assert r.status_code == 200
 | |
| 
 | |
|         r = self.client.post("/api/net", {
 | |
|             "org_id": 1,
 | |
|             "name": "Test net",
 | |
|             "asn": 9000000
 | |
|         }, format="json")
 | |
|         content = json.loads(r.content)
 | |
|         if error:
 | |
|             assert r.status_code == 400
 | |
|             assert content["meta"]["error"] == self.expected_compat_err_str
 | |
|             net = {"id": 1}
 | |
|         else:
 | |
|             assert r.status_code == 201
 | |
|             net = content["data"][0]
 | |
|             del net["org"]
 | |
| 
 | |
|         r = self.client.put("/api/net/{}".format(net["id"]), net,
 | |
|                             format="json")
 | |
|         content = json.loads(r.content)
 | |
|         if error:
 | |
|             assert r.status_code == 400
 | |
|             assert content["meta"]["error"] == self.expected_compat_err_str
 | |
|         else:
 | |
|             assert r.status_code == 200
 | |
| 
 | |
|         r = self.client.delete("/api/net/{}".format(net["id"]), {},
 | |
|                                format="json")
 | |
|         if error:
 | |
|             content = json.loads(r.content)
 | |
|             assert r.status_code == 400
 | |
|             assert content["meta"]["error"] == self.expected_compat_err_str
 | |
|         else:
 | |
|             assert r.status_code == 204
 | |
| 
 | |
|         REFTAG_MAP["net"].objects.all().delete()
 | |
| 
 | |
|     def test_incompatible(self):
 | |
|         self._compat("0.5.0", "0.4.0", True)
 | |
|         self._compat("0.6.0", "0.5.0", True)
 | |
|         self._compat("0.5.0", "0.6.0", True)
 | |
|         self._compat("0.7.0", "0.6.0", True)
 | |
|         self._compat("0.6.0", "0.7.0", True)
 | |
| 
 | |
|     def test_compatible(self):
 | |
|         self._compat("0.6.0", "0.6.0", False)
 | |
|         self._compat("0.6", "0.6", False)
 | |
|         self._compat("0.6.1", "0.6.1", False)
 | |
|         self._compat("0.6", "0.6.1", False)
 | |
|         self._compat("0.6.1", "0.6", False)
 | |
|         self._compat(None, None, False)
 |