Browse Source

merge with master

walle 6 years ago
parent
commit
31ee192e31

+ 14 - 6
.travis.yml

@@ -3,19 +3,23 @@ sudo: enabled
 cache:
   directories:
     - $HOME/.cache/pip
-python:
-  - "2.7"
 matrix:
-  # NOTE: comment this out if we have to reinstate any allow_failures, because
-  # of https://github.com/travis-ci/travis-ci/issues/1696 (multiple
+  allow_failures:
+    - python: "3.7"  # until we can get Python 3 compatibility in place
+  # NOTE: comment out fast_finish if we have to reinstate any allow_failures,
+  # because of https://github.com/travis-ci/travis-ci/issues/1696 (multiple
   # notifications)
   fast_finish: true
+  include:
+    - python: "2.7"    
+    - python: "3.7"
+      dist: xenial  # required for Python >= 3.7 (travis-ci/travis-ci#9069)
 install:
   - echo "#install#"
   # For some reason Travis' build envs have wildly different pip/setuptools
   # versions between minor Python versions, and this can cause many hilarious
   # corner packaging cases. So...
-  - pip install -U pip
+  - pip install --upgrade pip
   # Setuptools 34+ seems to get less stable
   - pip install 'setuptools>33,<34'
   # Pre-requirements sanity test (again, resembles pure, non-dev install
@@ -25,6 +29,10 @@ install:
   - pip list --format=columns
 before_script:
   - echo "#before_script#"
+  # stop the build if there are Python syntax errors or undefined names
+  # - flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics
+  # exit-zero treats all errors as warnings.  The GitHub editor is 127 chars wide
+  # - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
   - mkdir -p /tmp/walle/{logs,library,webroot,releases}
 script:
   - echo "#script#"
@@ -32,4 +40,4 @@ script:
   - python -m flask test
 notifications:
     on_success: never
-    on_failure: always
+    on_failure: always

+ 9 - 9
requirements/dev.txt

@@ -2,17 +2,17 @@
 -r prod.txt
 
 # Testing
-pytest==3.0.7
+pytest==4.0.1
 WebTest==2.0.27
 factory-boy==2.8.1
 
 # Lint and code style
-flake8==3.3.0
+flake8==3.6.0
 flake8-blind-except==0.1.1
-flake8-debugger==1.4.0
-flake8-docstrings==1.1.0
-flake8-isort==2.2
-flake8-quotes==0.9.0
-isort==4.2.5
-pep8-naming==0.4.1
-pysqlite==2.8.3
+# flake8-debugger==3.1.0
+flake8-docstrings==1.3.0
+flake8-isort==2.5
+flake8-quotes==1.0.0
+isort==4.3.4
+pep8-naming==0.7.0
+# pysqlite==2.8.3

+ 1 - 1
requirements/prod.txt

@@ -16,7 +16,7 @@ flask-socketio==3.0.2
 Flask-SQLAlchemy==2.2
 psycopg2==2.7.1
 SQLAlchemy==1.1.9
-MySQL-python==1.2.5
+mysqlclient==1.3.13
 marshmallow==2.13.5
 
 # Migrations

+ 1 - 1
tests/test_00_base.py

@@ -4,7 +4,7 @@
 from copy import deepcopy
 
 import pytest
-from utils import *
+from .utils import *
 from walle.model.menu import MenuModel
 from walle.model.user import UserModel
 from walle.service.rbac.role import *

+ 2 - 2
tests/test_00_login.py

@@ -4,10 +4,10 @@ import urllib
 
 import pytest
 
-from utils import *
+from .utils import *
 from walle.model.user import UserModel
 from copy import deepcopy
-from test_00_base import user_data_login
+from .test_00_base import user_data_login
 
 #: 4 登录 owner
 @pytest.mark.usefixtures('db')

+ 2 - 2
tests/test_01_api_environment.py

@@ -3,8 +3,8 @@
 import urllib
 
 import pytest
-from factories import TestApiBase
-from utils import *
+from .factories import TestApiBase
+from .utils import *
 
 
 @pytest.mark.usefixtures('db')

+ 56 - 58
tests/test_02_api_role.py

@@ -1,11 +1,9 @@
 # -*- coding: utf-8 -*-
 """Test Apis."""
-from flask import json
-import types
-import urllib
 import pytest
-from utils import *
-from factories import TestApiBase
+from .factories import TestApiBase
+from .utils import *
+
 
 @pytest.mark.usefixtures('db')
 class TestApiRole(TestApiBase):
@@ -63,57 +61,57 @@ class TestApiRole(TestApiBase):
         response_success(resp)
 
         compare_req_resp(response, resp)
-    #
-    # def test_get_list_query(self, user, testapp, client):
-    #     """test list should create 2 users at least, due to test pagination, searching."""
-    #     query = {
-    #         'page': 1,
-    #         'size': 1,
-    #         'kw': self.role_name_2
-    #     }
-    #     response = {
-    #         'count': 1,
-    #     }
-    #     resp = client.get('%s/?%s' % (self.uri_prefix, urllib.urlencode(query)))
-    #     response_success(resp)
-    #     resp_dict = resp_json(resp)
-    #
-    #     compare_in(self.role_data_2, resp_dict['data']['list'].pop())
-    #     compare_req_resp(response, resp)
+        #
+        # def test_get_list_query(self, user, testapp, client):
+        #     """test list should create 2 users at least, due to test pagination, searching."""
+        #     query = {
+        #         'page': 1,
+        #         'size': 1,
+        #         'kw': self.role_name_2
+        #     }
+        #     response = {
+        #         'count': 1,
+        #     }
+        #     resp = client.get('%s/?%s' % (self.uri_prefix, urllib.urlencode(query)))
+        #     response_success(resp)
+        #     resp_dict = resp_json(resp)
+        #
+        #     compare_in(self.role_data_2, resp_dict['data']['list'].pop())
+        #     compare_req_resp(response, resp)
 
-    # def test_get_update(self, user, testapp, client):
-    #     """Login successful."""
-    #     # 1.create another role
-    #     # resp = client.post('%s/' % (self.uri_prefix), data=self.role_data)
-    #     # role_id = resp_json(resp)['data']['id']
-    #     #
-    #     # response_success(resp)
-    #     # compare_req_resp(self.role_data, resp)
-    #
-    #     # 2.update
-    #     resp = client.put('%s/%d' % (self.uri_prefix, self.role_data_2['id']), data=self.role_data_2)
-    #
-    #     response_success(resp)
-    #     compare_req_resp(self.role_data_2, resp)
-    #
-    #     # 3.get it
-    #     resp = client.get('%s/%d' % (self.uri_prefix, self.role_data_2['id']))
-    #     response_success(resp)
-    #     compare_req_resp(self.role_data_2, resp)
-    #
-    # def test_get_remove(self, user, testapp, client):
-    #     """Login successful."""
-    #     # 1.create another role
-    #     another_role = self.role_data_2
-    #     another_role['role_name'] = u'To Be Removed'
-    #     resp = client.post('%s/' % (self.uri_prefix), data=another_role)
-    #     role_id = resp_json(resp)['data']['id']
-    #
-    #     response_success(resp)
-    #
-    #     # 2.delete
-    #     resp = client.delete('%s/%d' % (self.uri_prefix, role_id))
-    #
-    #     # 3.get it
-    #     resp = client.get('%s/%d' % (self.uri_prefix, role_id))
-    #     response_error(resp)
+        # def test_get_update(self, user, testapp, client):
+        #     """Login successful."""
+        #     # 1.create another role
+        #     # resp = client.post('%s/' % (self.uri_prefix), data=self.role_data)
+        #     # role_id = resp_json(resp)['data']['id']
+        #     #
+        #     # response_success(resp)
+        #     # compare_req_resp(self.role_data, resp)
+        #
+        #     # 2.update
+        #     resp = client.put('%s/%d' % (self.uri_prefix, self.role_data_2['id']), data=self.role_data_2)
+        #
+        #     response_success(resp)
+        #     compare_req_resp(self.role_data_2, resp)
+        #
+        #     # 3.get it
+        #     resp = client.get('%s/%d' % (self.uri_prefix, self.role_data_2['id']))
+        #     response_success(resp)
+        #     compare_req_resp(self.role_data_2, resp)
+        #
+        # def test_get_remove(self, user, testapp, client):
+        #     """Login successful."""
+        #     # 1.create another role
+        #     another_role = self.role_data_2
+        #     another_role['role_name'] = u'To Be Removed'
+        #     resp = client.post('%s/' % (self.uri_prefix), data=another_role)
+        #     role_id = resp_json(resp)['data']['id']
+        #
+        #     response_success(resp)
+        #
+        #     # 2.delete
+        #     resp = client.delete('%s/%d' % (self.uri_prefix, role_id))
+        #
+        #     # 3.get it
+        #     resp = client.get('%s/%d' % (self.uri_prefix, role_id))
+        #     response_error(resp)

+ 2 - 2
tests/test_03_api_user.py

@@ -4,8 +4,8 @@ import urllib
 
 import pytest
 from flask import current_app
-from utils import *
-from factories import TestApiBase
+from .utils import *
+
 user_data = {
     'email': u'test01@walle-web.io',
     'password': u'Walle987',

+ 3 - 3
tests/test_04_api_passport.py

@@ -4,9 +4,9 @@ from flask import json
 import types
 import urllib
 import pytest
-from utils import *
-from test_03_api_user import user_data
-from test_00_base import user_data_login
+from .utils import *
+from .test_03_api_user import user_data
+from .test_00_base import user_data_login
 from copy import deepcopy
 
 @pytest.mark.usefixtures('db')

+ 9 - 5
tests/test_05_api_space.py

@@ -1,11 +1,14 @@
 # -*- coding: utf-8 -*-
 """Test Apis."""
+from copy import deepcopy
+
 import pytest
 from flask import current_app
-from utils import *
-from test_00_base import space_base
-from copy import deepcopy
-from factories import TestApiBase
+from .factories import TestApiBase
+from .test_00_base import space_base
+from .utils import *
+
+
 @pytest.mark.usefixtures('db')
 class TestApiSpace(TestApiBase):
     """api role testing"""
@@ -45,7 +48,8 @@ class TestApiSpace(TestApiBase):
     def test_get_update_default_space(self, user, testapp, client):
         """Login successful."""
         # 1.update
-        self.space_default_base['members'] = json.dumps([{"user_id": 2, "role": "MASTER"}, {"user_id": 3, "role": "DEVELOPER"}])
+        self.space_default_base['members'] = json.dumps(
+                [{"user_id": 2, "role": "MASTER"}, {"user_id": 3, "role": "DEVELOPER"}])
         resp = client.put('%s/%d' % (self.uri_prefix, 1), data=self.space_default_base)
 
         response_success(resp)

+ 2 - 2
tests/test_06_api_server.py

@@ -3,8 +3,8 @@
 import urllib
 
 import pytest
-from factories import TestApiBase
-from utils import *
+from .factories import TestApiBase
+from .utils import *
 
 
 @pytest.mark.usefixtures('db')

+ 9 - 8
tests/test_07_api_project.py

@@ -1,12 +1,12 @@
 # -*- coding: utf-8 -*-
 """Test Apis."""
 import urllib
-import json
+
 import pytest
-from flask import current_app, session, g
-from utils import *
-from flask_login import current_user
-from factories import TestApiBase
+from flask import current_app
+from .factories import TestApiBase
+from .utils import *
+
 
 @pytest.mark.usefixtures('db')
 class TestApiProject(TestApiBase):
@@ -126,7 +126,6 @@ class TestApiProject(TestApiBase):
         self.init_vars(self.project_data_remove)
         self.init_vars(self.project_data_2_update)
 
-
     def test_create(self, user, testapp, client, db):
         """create successful."""
         # 1. create another project
@@ -205,14 +204,16 @@ class TestApiProject(TestApiBase):
         from walle.service.code import Code
         # 1.1 create user group error
         headers = {'content-type': 'application/json'}
-        resp = client.put('%s/%d/members' % (self.uri_prefix, self.project_data_2['id']), data=json.dumps(self.project_data_members_error), headers=headers)
+        resp = client.put('%s/%d/members' % (self.uri_prefix, self.project_data_2['id']),
+                          data=json.dumps(self.project_data_members_error), headers=headers)
         current_app.logger.info(resp)
 
         response_error(resp, Code.user_not_in_space)
 
         # 1.1 create user group
         headers = {'content-type': 'application/json'}
-        resp = client.put('%s/%d/members' % (self.uri_prefix, self.project_data_2['id']), data=json.dumps(self.project_data_members), headers=headers)
+        resp = client.put('%s/%d/members' % (self.uri_prefix, self.project_data_2['id']),
+                          data=json.dumps(self.project_data_members), headers=headers)
         current_app.logger.info(resp)
 
         response_success(resp)

+ 2 - 2
tests/test_08_api_task.py

@@ -2,9 +2,9 @@
 """Test Apis."""
 import urllib
 
-from factories import TestApiBase
-from utils import *
 from walle.model.task import TaskModel
+from .factories import TestApiBase
+from .utils import *
 
 
 class TestApiTask(TestApiBase):