def test_token_generation(self): from models import AuthToken # we want each token to be different as the same user can have more than one if they have multiple devices token = AuthToken.gen_token_string('[email protected]') same_token = AuthToken.gen_token_string('[email protected]') different_token = AuthToken.gen_token_string('[email protected]') self.assertIs(False, token == same_token) self.assertIs(False, token == different_token)
def test_my_ranking_weekly(self): from models import User, AuthToken, UserStats from django.test import RequestFactory from django.core.urlresolvers import reverse from views import my_ranking_weekly users = [] for i in range(10): u = User() u.email = '*****@*****.**' + str(i) u.public_name = 'TEST' + str(i) u.save() users.append(u) UserStats.record_stats(u, i * 100, datetime.date.today()) auth = AuthToken() auth.token_string = AuthToken.gen_token_string('*****@*****.**') auth.user = users[9] auth.valid = True auth.save() factory = RequestFactory() rq = factory.get(reverse('my_ranking_weekly'), data={'token': auth.token_string}) response = my_ranking_weekly(rq) data = json.loads(response.content) self.assertEqual(data['status'], 'OK')
def test_update_profile(self): from models import User, AuthToken from django.test import RequestFactory from django.core.urlresolvers import reverse from views import update_profile u = User() u.email = '*****@*****.**' u.public_name = 'TEST' u.save() auth = AuthToken() auth.token_string = AuthToken.gen_token_string('*****@*****.**') auth.user = u auth.valid = True auth.save() factory = RequestFactory() rq = factory.get(reverse('update_profile'), data={ 'token': auth.token_string, 'nickname': 'El Nicknamo' }) response = update_profile(rq) data = json.loads(response.content) self.assertEqual(data['status'], 'OK') u = User.objects.get(pk=u.pk) self.assertEqual(u.public_name, 'El Nicknamo')
def test_log_distance(self): from models import User, AuthToken, Level, StairWell from django.test import RequestFactory from django.core.urlresolvers import reverse from views import log_distance, distance, profile u = User() u.email = '*****@*****.**' u.public_name = 'TEST' u.save() auth = AuthToken() auth.token_string = AuthToken.gen_token_string('*****@*****.**') auth.user = u auth.valid = True auth.save() sw = StairWell(building='ASP', shaft='south') sw.save() level1 = Level(stairwell=sw, floorNumber=1) level1.save() level2 = Level(stairwell=sw, floorNumber=2) level2.save() factory = RequestFactory() rq = factory.get(reverse('distance'), data={ 'qr_id_1': level1.pk, 'qr_id_2': level2.pk }) response = distance(rq) data = json.loads(response.content) self.assertEqual(data['distance'], 18) rq = factory.get(reverse('log_distance'), data={ 'token': auth.token_string, 'steps': 18 }) response = log_distance(rq) data = json.loads(response.content) self.assertEqual(data['status'], 'OK') rq = factory.get(reverse('profile'), data={'token': auth.token_string}) response = profile(rq) data = json.loads(response.content) self.assertEqual(data['status'], 'OK')
def auth(request): token_param = request.GET.get('token') email_param = request.GET['email'] # device name/identifier device_param = request.GET.get('device') email_param = email_param.lower() if token_param is None: # register new token if not settings.ENABLE_REGISTRATION: return JsonResponse({'status': 'REGISTRATION_DISABLED'}) if not email.is_email_valid(email_param) or not email_param.endswith('europa.eu'): return JsonResponse({'status': 'INVALID_EMAIL'}) user_list = User.objects.filter(email=email_param) if not user_list: u = User(email=email_param) u.reset_public_name() u.save() else: u = user_list[0] if email.is_spamming(u.email): return JsonResponse({'status': 'CANCELED_BY_SPAM_PREVENTION'}) token = AuthToken(token_string=AuthToken.gen_token_string(email_param), user=u) token.gen_validation_key() token.save() token.send_validation_mail(public_url='https://' + request.META.get('HTTP_HOST', settings.PUBLIC_URL)) token.save() return JsonResponse({'token': token.token_string, 'status': 'OK'}) else: # actual auth token_list = AuthToken.objects.filter(token_string=token_param) if len(token_list) == 0: return JsonResponse({'status': 'TOKEN_NOT_FOUND'}) token = token_list[0] if token.valid is False: return JsonResponse({'status': 'TOKEN_NOT_ACTIVATED'}) if token.valid and email_param == token.user.email: return JsonResponse({'status': 'OK', 'public_name': token.user.public_name})
def test_send_mail(self): from models import AuthToken, User from django.core import mail u = User() u.email = '*****@*****.**' u.save() auth = AuthToken() auth.user = u auth.token = AuthToken.gen_token_string('*****@*****.**') auth.gen_validation_key() auth.send_validation_mail(settings.PUBLIC_URL) self.assertEqual(len(mail.outbox), 1, msg='is settings.EMAILS_ENABLED set to True ?')
def test_token_validation(self): from models import AuthToken, User u = User() u.email = 'rururur' u.save() auth = AuthToken() auth.user = u auth.token = AuthToken.gen_token_string(email='[email protected]') auth.gen_validation_key() self.assertIsNotNone(auth.validation_key) self.assertFalse(auth.valid) self.assertIs(True, auth.validate(auth.validation_key)) self.assertIs(True, auth.valid)