From f4ac9635a93f106605d62256ed8898b003202fee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Tue, 12 Sep 2017 11:29:36 +0200 Subject: [PATCH] Fixed two mistakes in stats query count_nodes() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 'p.x' → 'project.x' - is_private: {$ne: true} → is_private: False, because true is the default. --- cloud/stats/__init__.py | 4 ++-- tests/test_stats.py | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 tests/test_stats.py diff --git a/cloud/stats/__init__.py b/cloud/stats/__init__.py index a914f66..a20429a 100644 --- a/cloud/stats/__init__.py +++ b/cloud/stats/__init__.py @@ -24,10 +24,10 @@ def count_nodes(query=None) -> int: { '$project': { - 'p.is_private': 1, + 'project.is_private': 1, } }, - {'$match': {'p.is_private': {'$ne': True}}}, + {'$match': {'project.is_private': False}}, {'$count': 'tot'} ] c = current_app.db()['nodes'] diff --git a/tests/test_stats.py b/tests/test_stats.py new file mode 100644 index 0000000..7f6b3c2 --- /dev/null +++ b/tests/test_stats.py @@ -0,0 +1,41 @@ +import copy + +from bson import ObjectId +from pillar.tests import common_test_data as ctd + +from abstract_cloud_test import AbstractCloudTest + + +class StatsTest(AbstractCloudTest): + def test_count_public_nodes(self): + self.enter_app_context() + + # Create two public and two private projects. Only the assets from the + # public projects should be counted. + public1 = self.create_project_with_admin( + 24 * 'a', project_overrides={'_id': ObjectId(), 'is_private': False}) + public2 = self.create_project_with_admin( + 24 * 'b', project_overrides={'_id': ObjectId(), 'is_private': False}) + private1 = self.create_project_with_admin( + 24 * 'c', project_overrides={'_id': ObjectId(), 'is_private': True}) + private2 = self.create_project_with_admin( + 24 * 'd', project_overrides={'_id': ObjectId(), 'is_private': None}) + + self.assertEqual(4, self.app.db('projects').count()) + + # Create asset node + self.assertEqual('asset', ctd.EXAMPLE_NODE['node_type']) + example_node = copy.deepcopy(ctd.EXAMPLE_NODE) + del example_node['_id'] + del example_node['project'] + + for pid in (public1, public2, private1, private2): + self.create_node({'_id': ObjectId(), 'project': pid, **example_node}) + self.create_node({'_id': ObjectId(), 'project': pid, **example_node}) + self.create_node({'_id': ObjectId(), 'project': pid, **example_node}) + self.create_node({'_id': ObjectId(), 'project': pid, **example_node}) + + # Count the asset nodes + from cloud.stats import count_nodes + count = count_nodes({'node_type': 'asset'}) + self.assertEqual(8, count)