commit
6c258225fb
4 changed files with 71 additions and 1 deletions
@ -0,0 +1,63 @@ |
||||
from django.urls import reverse |
||||
from rest_framework import status |
||||
from rest_framework.test import APITestCase |
||||
from apiserver.api.models import Member, User |
||||
import json |
||||
from parameterized import parameterized |
||||
|
||||
data = { |
||||
"username": "registrationtc", |
||||
"email": "unittest@email.com", |
||||
"password1": "unittest", |
||||
"password2": "unittest", |
||||
"first_name": "John", |
||||
"last_name": "Doe", |
||||
|
||||
# need to fake this for updating progress |
||||
"request_id": "lol" |
||||
} |
||||
|
||||
|
||||
class RegistrationTests(APITestCase): |
||||
def setUp(self): |
||||
self.url = reverse('rest_name_register') |
||||
# TODO: expose data to be used for E2E testing from a webclient |
||||
self.data = data |
||||
# TODO: match with config |
||||
self.allowed_ip = '24.66.110.96' |
||||
|
||||
def test_success(self): |
||||
"""Ensure we can create a new account object.""" |
||||
response = self.client.post( |
||||
self.url, |
||||
self.data, |
||||
format='json', |
||||
HTTP_X_REAL_IP=self.allowed_ip |
||||
) |
||||
self.assertEqual(response.status_code, status.HTTP_201_CREATED) |
||||
user = User.objects.get(username=self.data['username']) |
||||
assert user is not None |
||||
assert Member.objects.get(user=user) is not None |
||||
|
||||
def test_allowed_ip_wrong(self): |
||||
"""Ensure creation only allowed when HTTP_X_REAL_IP header matched IP in whitelist""" |
||||
response = self.client.post( |
||||
self.url, |
||||
self.data, |
||||
format='json', |
||||
HTTP_X_REAL_IP="0.0.0.0" |
||||
) |
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) |
||||
|
||||
@parameterized.expand([(f"{key} is missing", key, status.HTTP_400_BAD_REQUEST) for key in data.keys() if key is not 'request_id']) |
||||
def test_malformed_data(self, name, inp, expected): |
||||
"""Delete specific properties from data and confirm it is not accepted by API""" |
||||
copy = self.data.copy() |
||||
del copy[inp] |
||||
response = self.client.post( |
||||
self.url, |
||||
copy, |
||||
format='json', |
||||
HTTP_X_REAL_IP=self.allowed_ip |
||||
) |
||||
self.assertEqual(response.status_code, expected) |
Loading…
Reference in new issue