From f1aaea96f148abcf902398fa9c31d60c372774cf Mon Sep 17 00:00:00 2001 From: zhengxie Date: Wed, 20 Jul 2016 16:02:17 +0800 Subject: [PATCH] [api2] Add "created at" field in token V2 --- seahub/api2/models.py | 3 ++ seahub/test_utils.py | 2 + tests/api/models/__init__.py | 0 tests/api/models/test_token_v2.py | 87 +++++++++++++++++++++++++++++++ 4 files changed, 92 insertions(+) create mode 100644 tests/api/models/__init__.py create mode 100644 tests/api/models/test_token_v2.py diff --git a/seahub/api2/models.py b/seahub/api2/models.py index 2cd55f36ee..f67e7a0983 100644 --- a/seahub/api2/models.py +++ b/seahub/api2/models.py @@ -3,7 +3,9 @@ import hmac import datetime import time from hashlib import sha1 + from django.db import models +from django.utils import timezone from seahub.base.fields import LowerCaseCharField @@ -144,6 +146,7 @@ class TokenV2(models.Model): last_login_ip = models.GenericIPAddressField(null=True, default=None) + created_at = models.DateTimeField(default=timezone.now) wiped_at = models.DateTimeField(null=True) objects = TokenV2Manager() diff --git a/seahub/test_utils.py b/seahub/test_utils.py index 73d8f4e7e3..0ebb88fd16 100644 --- a/seahub/test_utils.py +++ b/seahub/test_utils.py @@ -20,6 +20,8 @@ from seahub.utils import mkstemp class Fixtures(Exam): user_password = 'secret' admin_password = 'secret' + ip = '127.0.0.1' + ip_v6 = '2001:0db8:85a3:0000:0000:8a2e:0370:7334' @fixture def fake_request(self): diff --git a/tests/api/models/__init__.py b/tests/api/models/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/api/models/test_token_v2.py b/tests/api/models/test_token_v2.py new file mode 100644 index 0000000000..0365e21f4e --- /dev/null +++ b/tests/api/models/test_token_v2.py @@ -0,0 +1,87 @@ +from seahub.test_utils import BaseTestCase +from seahub.api2.models import TokenV2, TokenV2Manager + +class TokenV2ManagerTest(BaseTestCase): + def setUp(self): + assert len(TokenV2.objects.all()) == 0 + + token = TokenV2(user=self.user.username, + platform='ios', + device_id='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + device_name='fake device name', + client_version='1.0.0', + platform_version='0.0.1', + last_login_ip=self.ip_v6) + token.save() + + assert len(TokenV2.objects.all()) == 1 + self.token = TokenV2.objects.all()[0] + + def test_get_devices(self): + d = TokenV2.objects.get_devices('', 0, 10) + assert len(d) == 1 + + def test_get_user_devices(self): + d = TokenV2.objects.get_user_devices(self.user.username) + assert len(d) == 1 + + def test_get_or_create_token(self): + # get exist token + t = TokenV2.objects.get_or_create_token( + self.token.user, self.token.platform, self.token.device_id, + self.token.device_name, '1.1.1', '0.1.1', self.ip_v6) + assert t.key == self.token.key + + # create new token + t = TokenV2.objects.get_or_create_token( + self.admin.username, self.token.platform, self.token.device_id, + self.token.device_name, '1.1.1', '0.1.1', self.ip_v6) + assert len(TokenV2.objects.all()) == 2 + assert TokenV2.objects.all()[1].user == self.admin.username + + def test_delete_device_token(self): + TokenV2.objects.delete_device_token( + self.token.user, self.token.platform, self.token.device_id) + assert len(TokenV2.objects.all()) == 0 + + def test_mark_device_to_be_remote_wipted(self): + assert TokenV2.objects.all()[0].wiped_at is None + + TokenV2.objects.mark_device_to_be_remote_wiped( + self.token.user, self.token.platform, self.token.device_id) + assert TokenV2.objects.all()[0].wiped_at is not None + + +class TokenV2Test(BaseTestCase): + def test_save(self): + assert len(TokenV2.objects.all()) == 0 + + token = TokenV2(user=self.user.username, + platform='ios', + device_id='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + device_name='fake device name', + client_version='1.0.0', + platform_version='0.0.1', + last_login_ip=self.ip_v6) + token.save() + + assert len(TokenV2.objects.all()) == 1 + + t = TokenV2.objects.all()[0] + assert len(t.key) == 40 + assert t.user == self.user.username + assert t.created_at is not None + assert t.last_accessed is not None + assert t.wiped_at is None + + def test_as_dict(self): + token = TokenV2(user=self.user.username, + platform='ios', + device_id='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + device_name='fake device name', + client_version='1.0.0', + platform_version='0.0.1', + last_login_ip=self.ip_v6) + token.save() + t = TokenV2.objects.all()[0] + assert len(t.as_dict()) == 10