瀏覽代碼

walle-web 2.0 unittest :star:

meolu 6 年之前
父節點
當前提交
176bb3a1c1
共有 5 個文件被更改,包括 46 次插入66 次删除
  1. 21 60
      tests/test_00_base.py
  2. 12 3
      tests/test_05_api_space.py
  3. 1 1
      tests/test_07_api_project.py
  4. 9 2
      walle/model/user.py
  5. 3 0
      walle/service/rbac/role.py

+ 21 - 60
tests/test_00_base.py

@@ -1,17 +1,23 @@
 # -*- coding: utf-8 -*-
 """Model unit tests."""
 
+from copy import deepcopy
+
 import pytest
 from walle.model.user import MenuModel
-from walle.model.user import RoleModel
 from walle.model.user import UserModel
 from werkzeug.security import generate_password_hash
-from copy import deepcopy
+from walle.service.rbac.role import *
+
 user_data_login = {
     'username': u'wushuiyong',
     'email': u'wushuiyong@walle-web.io',
     'password': u'WU123shuiyong',
 }
+space_base = {
+    'name': u'walle-2.0',
+    'user_id': u'1',
+}
 
 
 @pytest.mark.usefixtures('db')
@@ -513,66 +519,21 @@ class TestAccess:
             )
             access.save()
 
+
 class TestUser:
-    user_data_login = deepcopy(user_data_login)
-    def test_add(self):
+    user_super_login = deepcopy(user_data_login)
 
-        self.user_data_login['password'] = generate_password_hash(user_data_login['password'])
-        user = UserModel(**self.user_data_login)
+    def test_add(self):
+        self.user_super_login['role'] = SUPER
+        self.user_super_login['password'] = generate_password_hash(self.user_super_login['password'])
+        user = UserModel(**self.user_super_login)
         user.save()
 
-        # class TestUser:
-        #     """User tests."""
-        #
-        #     def test_get_by_id(self):
-        #         """Get user by ID."""
-        #         user = Foo(username='wushuiyongoooo', email='wushuiyong@mail.com')
-        #         user.save()
-        #
-        #         retrieved = User.get_by_id(user.id)
-        #         assert retrieved == user
 
-        # def test_created_at_defaults_to_datetime(self):
-        #     """Test creation date."""
-        #     user = User(username='foo', email='foo@bar.com')
-        #     user.save()
-        #     assert bool(user.created_at)
-        #     assert isinstance(user.created_at, dt.datetime)
-        #
-        # def test_password_is_nullable(self):
-        #     """Test null password."""
-        #     user = User(username='foo', email='foo@bar.com')
-        #     user.save()
-        #     assert user.password is None
-        #
-        # def test_factory(self, db):
-        #     """Test user factory."""
-        #     user = UserFactory(password='myprecious')
-        #     db.session.commit()
-        #     assert bool(user.username)
-        #     assert bool(user.email)
-        #     assert bool(user.created_at)
-        #     assert user.is_admin is False
-        #     assert user.active is True
-        #     assert user.check_password('myprecious')
-        #
-        # def test_check_password(self):
-        #     """Check password."""
-        #     user = User.create(username='foo', email='foo@bar.com',
-        #                        password='foobarbaz123')
-        #     assert user.check_password('foobarbaz123') is True
-        #     assert user.check_password('barfoobaz') is False
-        #
-        # def test_full_name(self):
-        #     """User full name."""
-        #     user = UserFactory(first_name='Foo', last_name='Bar')
-        #     assert user.full_name == 'Foo Bar'
-        #
-        # def test_roles(self):
-        #     """Add a role to a user."""
-        #     role = Role(name='admin')
-        #     role.save()
-        #     user = UserFactory()
-        #     user.roles.append(role)
-        #     user.save()
-        #     assert role in user.roles
+# class TestSpace:
+#     user_data_login = deepcopy(user_data_login)
+#
+#     def test_add(self):
+#         self.user_data_login['password'] = generate_password_hash(user_data_login['password'])
+#         user = UserModel(**self.user_data_login)
+#         user.save()

+ 12 - 3
tests/test_05_api_space.py

@@ -12,10 +12,11 @@ class TestApiSpace:
 
     user_id = {}
 
+    #: user list (1, 2, 3)
     space_data = {
         'name': u'大数据',
         'user_id': u'1',
-        'members': json.dumps([{"user_id": 1, "role": "MASTER"}, {"user_id": 2, "role": "DEVELOPER"}, {"user_id": 3, "role": "DEVELOPER"}]),
+        'members': json.dumps([{"user_id": 2, "role": "MASTER"}, {"user_id": 3, "role": "DEVELOPER"}]),
     }
 
     space_name_2 = u'瓦力'
@@ -23,13 +24,13 @@ class TestApiSpace:
     space_data_2 = {
         'name': u'瓦力',
         'user_id': u'2',
-        'members': json.dumps([{"user_id": 1, "role": "MASTER"}, {"user_id": 2, "role": "DEVELOPER"}, {"user_id": 4, "role": "DEVELOPER"}]),
+        'members': json.dumps([{"user_id": 3, "role": "MASTER"}, {"user_id": 1, "role": "DEVELOPER"}]),
     }
 
     space_data_remove = {
         'name': u'瓦尔登',
         'user_id': u'2',
-        'members': json.dumps([{"user_id": 1, "role": "MASTER"}, {"user_id": 2, "role": "DEVELOPER"}]),
+        'members': json.dumps([{"user_id": 1, "role": "MASTER"}, {"user_id": 3, "role": "DEVELOPER"}]),
     }
 
     def test_create(self, user, testapp, client, db):
@@ -114,6 +115,14 @@ class TestApiSpace:
     def test_get_update(self, user, testapp, client):
         """Login successful."""
         # 1.update
+        space_data = self.space_data
+        space_data['name'] = u'大数据平台'
+        resp = client.put('%s/%d' % (self.uri_prefix, self.space_data['space_id']), data=space_data)
+
+        response_success(resp)
+        self.compare_member_req_resp(self.space_data, resp)
+
+        # 1.update
         space_data_2 = self.space_data_2
         space_data_2['name'] = u'瓦力2.0'
         resp = client.put('%s/%d' % (self.uri_prefix, self.space_data_2['space_id']), data=space_data_2)

+ 1 - 1
tests/test_07_api_project.py

@@ -38,7 +38,7 @@ class TestApiProject:
     }
 
     project_data_members = [
-        {"user_id": 1, "role": "MASTER"},
+        {"user_id": 3, "role": "MASTER"},
         {"user_id": 2, "role": "DEVELOPER"}
     ]
 

+ 9 - 2
walle/model/user.py

@@ -273,13 +273,18 @@ class UserModel(UserMixin, SurrogatePK, Model):
 
     @classmethod
     def fresh_session(cls):
+        # 0.超管
+        if current_user.role == SUPER:
+            return True
+
         spaces = current_user.has_spaces()
 
-        # 1.无空间权限
-        if not spaces:
+        # 1.无空间权限且非超管
+        if not spaces and current_user.role <> SUPER:
             raise WalleError(Code.space_empty)
 
         default_space = spaces.keys()[0]
+
         # 2.第一次登录无空间
         if not current_user.last_space:
             current_user.last_space = default_space
@@ -665,6 +670,8 @@ class MemberModel(SurrogatePK, Model):
         for member in members:
             user_update.append(member['user_id'])
 
+        current_app.logger.info(group_model['user_ids'])
+        current_app.logger.info(user_update)
         # project新增用户是否在space's group中,无则抛出
         if list(set(user_update).difference(set(group_model['user_ids']))):
             raise ValueError('用户不存在')

+ 3 - 0
walle/service/rbac/role.py

@@ -116,6 +116,9 @@ class Permission():
         :param role:
         :return:
         '''
+        if current_user.role == SUPER:
+            return True
+
         # TODO about project/task
         current_role = session['space_info']['role']
         return self.compare_role(current_role, role)