diff --git a/superset/cli.py b/superset/cli.py index cee0f9feba5da..51a1db48d0708 100755 --- a/superset/cli.py +++ b/superset/cli.py @@ -417,6 +417,7 @@ def load_test_users(): Syncs permissions for those users/roles """ + print(Fore.GREEN + 'Loading a set of users for unit tests') load_test_users_run() diff --git a/superset/views/utils.py b/superset/views/utils.py index ec761d787a0d2..b970914502cf6 100644 --- a/superset/views/utils.py +++ b/superset/views/utils.py @@ -24,7 +24,7 @@ def bootstrap_user_data(username=None, include_perms=False): 'firstName': user.first_name, 'lastName': user.last_name, 'userId': user.id, - 'isActive': user.is_active(), + 'isActive': user.is_active, 'createdOn': user.created_on.isoformat(), 'email': user.email, } diff --git a/tests/base_tests.py b/tests/base_tests.py index 03c61aa44dbee..da28321a122fa 100644 --- a/tests/base_tests.py +++ b/tests/base_tests.py @@ -1,20 +1,17 @@ """Unit tests for Superset""" import json -import logging -import os import unittest from flask_appbuilder.security.sqla import models as ab_models from mock import Mock import pandas as pd -from superset import app, cli, db, security_manager +from superset import app, db, security_manager from superset.connectors.druid.models import DruidCluster, DruidDatasource from superset.connectors.sqla.models import SqlaTable from superset.models import core as models from superset.utils.core import get_main_database - BASE_DIR = app.config.get('BASE_DIR') @@ -23,21 +20,12 @@ class SupersetTestCase(unittest.TestCase): examples_loaded = False def __init__(self, *args, **kwargs): - if ( - self.requires_examples and - not os.environ.get('examples_loaded') - ): - logging.info('Loading examples') - cli.load_examples_run(load_test_data=True) - logging.info('Done loading examples') - os.environ['examples_loaded'] = '1' - - security_manager.sync_role_definitions() super(SupersetTestCase, self).__init__(*args, **kwargs) self.client = app.test_client() self.maxDiff = None - cli.load_test_users_run() + @classmethod + def create_druid_test_objects(cls): # create druid cluster and druid datasources session = db.session cluster = ( diff --git a/tests/celery_tests.py b/tests/celery_tests.py index 531cd298e63d8..f7dae1490ab0c 100644 --- a/tests/celery_tests.py +++ b/tests/celery_tests.py @@ -11,7 +11,7 @@ from superset.models.helpers import QueryStatus from superset.models.sql_lab import Query from superset.sql_parse import SupersetQuery -from superset.utils import get_main_database +from superset.utils.core import get_main_database from .base_tests import SupersetTestCase diff --git a/tests/core_tests.py b/tests/core_tests.py index cd9f10449b214..a09117d2cf68a 100644 --- a/tests/core_tests.py +++ b/tests/core_tests.py @@ -22,7 +22,7 @@ from superset.models import core as models from superset.models.sql_lab import Query from superset.utils import core as utils -from superset.utils.core import get_main_database, QueryStatus +from superset.utils.core import get_main_database from superset.views.core import DatabaseView from .base_tests import SupersetTestCase diff --git a/tests/dict_import_export_tests.py b/tests/dict_import_export_tests.py index bde8caa129f94..a0ecc5c0b8b2d 100644 --- a/tests/dict_import_export_tests.py +++ b/tests/dict_import_export_tests.py @@ -9,7 +9,7 @@ DruidColumn, DruidDatasource, DruidMetric, ) from superset.connectors.sqla.models import SqlaTable, SqlMetric, TableColumn -from superset.utils import get_main_database +from superset.utils.core import get_main_database from .base_tests import SupersetTestCase DBREF = 'dict_import__export_test' diff --git a/tests/druid_tests.py b/tests/druid_tests.py index 9d13db97e274d..9d3a20fc5cd87 100644 --- a/tests/druid_tests.py +++ b/tests/druid_tests.py @@ -77,8 +77,9 @@ class DruidTests(SupersetTestCase): """Testing interactions with Druid""" - def __init__(self, *args, **kwargs): - super(DruidTests, self).__init__(*args, **kwargs) + @classmethod + def setUpClass(cls): + cls.create_druid_test_objects() def get_test_cluster_obj(self): return DruidCluster( diff --git a/tests/email_tests.py b/tests/email_tests.py index e9fd3a1c962ce..559372b2af62e 100644 --- a/tests/email_tests.py +++ b/tests/email_tests.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- """Unit tests for email service in Superset""" from email.mime.application import MIMEApplication from email.mime.multipart import MIMEMultipart diff --git a/tests/import_export_tests.py b/tests/import_export_tests.py index 7c1aee53adec8..c3eabe816c396 100644 --- a/tests/import_export_tests.py +++ b/tests/import_export_tests.py @@ -10,7 +10,7 @@ ) from superset.connectors.sqla.models import SqlaTable, SqlMetric, TableColumn from superset.models import core as models -from superset.utils.core import decode_dashboards +from superset.utils import core as utils from .base_tests import SupersetTestCase @@ -19,9 +19,6 @@ class ImportExportTests(SupersetTestCase): requires_examples = True - def __init__(self, *args, **kwargs): - super(ImportExportTests, self).__init__(*args, **kwargs) - @classmethod def delete_imports(cls): # Imported data clean up @@ -43,6 +40,7 @@ def delete_imports(cls): @classmethod def setUpClass(cls): cls.delete_imports() + cls.create_druid_test_objects() @classmethod def tearDownClass(cls): diff --git a/tests/sqllab_tests.py b/tests/sqllab_tests.py index e16ceeab715c8..ca2063cf12d3c 100644 --- a/tests/sqllab_tests.py +++ b/tests/sqllab_tests.py @@ -9,7 +9,7 @@ from superset.dataframe import SupersetDataFrame from superset.db_engine_specs import BaseEngineSpec from superset.models.sql_lab import Query -from superset.utils.core import get_main_database, datetime_to_epoch +from superset.utils.core import datetime_to_epoch, get_main_database from .base_tests import SupersetTestCase diff --git a/tests/utils_tests.py b/tests/utils_tests.py index bb10ed8f4e3d6..5882a02af0878 100644 --- a/tests/utils_tests.py +++ b/tests/utils_tests.py @@ -97,7 +97,7 @@ def test_base_json_conv(self): assert isinstance(base_json_conv(Decimal('1.0')), float) is True assert isinstance(base_json_conv(uuid.uuid4()), str) is True - @patch('superset.utils.datetime') + @patch('superset.utils.core.datetime') def test_parse_human_timedelta(self, mock_now): mock_now.return_value = datetime(2016, 12, 1) self.assertEquals(parse_human_timedelta('now'), timedelta(0)) @@ -108,7 +108,7 @@ def test_zlib_compression(self): got_str = zlib_decompress_to_string(blob) self.assertEquals(json_str, got_str) - @patch('superset.utils.to_adhoc', mock_to_adhoc) + @patch('superset.utils.core.to_adhoc', mock_to_adhoc) def test_merge_extra_filters(self): # does nothing if no extra filters form_data = {'A': 1, 'B': 2, 'c': 'test'} @@ -216,7 +216,7 @@ def test_merge_extra_filters(self): merge_extra_filters(form_data) self.assertEquals(form_data, expected) - @patch('superset.utils.to_adhoc', mock_to_adhoc) + @patch('superset.utils.core.to_adhoc', mock_to_adhoc) def test_merge_extra_filters_ignores_empty_filters(self): form_data = {'extra_filters': [ {'col': 'a', 'op': 'in', 'val': ''}, @@ -226,7 +226,7 @@ def test_merge_extra_filters_ignores_empty_filters(self): merge_extra_filters(form_data) self.assertEquals(form_data, expected) - @patch('superset.utils.to_adhoc', mock_to_adhoc) + @patch('superset.utils.core.to_adhoc', mock_to_adhoc) def test_merge_extra_filters_ignores_nones(self): form_data = { 'adhoc_filters': [ @@ -256,7 +256,7 @@ def test_merge_extra_filters_ignores_nones(self): merge_extra_filters(form_data) self.assertEquals(form_data, expected) - @patch('superset.utils.to_adhoc', mock_to_adhoc) + @patch('superset.utils.core.to_adhoc', mock_to_adhoc) def test_merge_extra_filters_ignores_equal_filters(self): form_data = { 'extra_filters': [ @@ -301,7 +301,7 @@ def test_merge_extra_filters_ignores_equal_filters(self): merge_extra_filters(form_data) self.assertEquals(form_data, expected) - @patch('superset.utils.to_adhoc', mock_to_adhoc) + @patch('superset.utils.core.to_adhoc', mock_to_adhoc) def test_merge_extra_filters_merges_different_val_types(self): form_data = { 'extra_filters': [ @@ -402,7 +402,7 @@ def test_merge_extra_filters_merges_different_val_types(self): merge_extra_filters(form_data) self.assertEquals(form_data, expected) - @patch('superset.utils.to_adhoc', mock_to_adhoc) + @patch('superset.utils.core.to_adhoc', mock_to_adhoc) def test_merge_extra_filters_adds_unequal_lists(self): form_data = { 'extra_filters': [ @@ -576,7 +576,7 @@ def test_method(self, a, b, c): self.assertEqual(instance.watcher, 4) self.assertEqual(result1, result8) - @patch('superset.utils.parse_human_datetime', mock_parse_human_datetime) + @patch('superset.utils.core.parse_human_datetime', mock_parse_human_datetime) def test_get_since_until(self): form_data = {} result = get_since_until(form_data) @@ -623,7 +623,7 @@ def test_get_since_until(self): expected = datetime(2016, 11, 2), datetime(2016, 11, 8) self.assertEqual(result, expected) - @patch('superset.utils.to_adhoc', mock_to_adhoc) + @patch('superset.utils.core.to_adhoc', mock_to_adhoc) def test_convert_legacy_filters_into_adhoc_where(self): form_data = { 'where': 'a = 1', @@ -640,7 +640,7 @@ def test_convert_legacy_filters_into_adhoc_where(self): convert_legacy_filters_into_adhoc(form_data) self.assertEquals(form_data, expected) - @patch('superset.utils.to_adhoc', mock_to_adhoc) + @patch('superset.utils.core.to_adhoc', mock_to_adhoc) def test_convert_legacy_filters_into_adhoc_filters(self): form_data = { 'filters': [{'col': 'a', 'op': 'in', 'val': 'someval'}], @@ -659,7 +659,7 @@ def test_convert_legacy_filters_into_adhoc_filters(self): convert_legacy_filters_into_adhoc(form_data) self.assertEquals(form_data, expected) - @patch('superset.utils.to_adhoc', mock_to_adhoc) + @patch('superset.utils.core.to_adhoc', mock_to_adhoc) def test_convert_legacy_filters_into_adhoc_having(self): form_data = { 'having': 'COUNT(1) = 1', @@ -676,7 +676,7 @@ def test_convert_legacy_filters_into_adhoc_having(self): convert_legacy_filters_into_adhoc(form_data) self.assertEquals(form_data, expected) - @patch('superset.utils.to_adhoc', mock_to_adhoc) + @patch('superset.utils.core.to_adhoc', mock_to_adhoc) def test_convert_legacy_filters_into_adhoc_having_filters(self): form_data = { 'having_filters': [{'col': 'COUNT(1)', 'op': '==', 'val': 1}], @@ -695,7 +695,7 @@ def test_convert_legacy_filters_into_adhoc_having_filters(self): convert_legacy_filters_into_adhoc(form_data) self.assertEquals(form_data, expected) - @patch('superset.utils.to_adhoc', mock_to_adhoc) + @patch('superset.utils.core.to_adhoc', mock_to_adhoc) def test_convert_legacy_filters_into_adhoc_present_and_empty(self): form_data = { 'adhoc_filters': [], @@ -713,7 +713,7 @@ def test_convert_legacy_filters_into_adhoc_present_and_empty(self): convert_legacy_filters_into_adhoc(form_data) self.assertEquals(form_data, expected) - @patch('superset.utils.to_adhoc', mock_to_adhoc) + @patch('superset.utils.core.to_adhoc', mock_to_adhoc) def test_convert_legacy_filters_into_adhoc_present_and_nonempty(self): form_data = { 'adhoc_filters': [ diff --git a/tests/viz_tests.py b/tests/viz_tests.py index 7554e33af9382..e4232c4214516 100644 --- a/tests/viz_tests.py +++ b/tests/viz_tests.py @@ -996,7 +996,7 @@ def test_parse_coordinates_raises(self): with self.assertRaises(SpatialException): test_viz_deckgl.parse_coordinates('fldkjsalkj,fdlaskjfjadlksj') - @patch('superset.utils.uuid.uuid4') + @patch('superset.utils.core.uuid.uuid4') def test_filter_nulls(self, mock_uuid4): mock_uuid4.return_value = uuid.UUID('12345678123456781234567812345678') test_form_data = { diff --git a/tox.ini b/tox.ini index 2e62db00643ef..f8fa08caa0077 100644 --- a/tox.ini +++ b/tox.ini @@ -27,6 +27,8 @@ require-code = true [testenv] commands = {toxinidir}/superset/bin/superset db upgrade + {toxinidir}/superset/bin/superset load_test_users + {toxinidir}/superset/bin/superset load_examples nosetests {posargs} deps = -rrequirements.txt