From 2cdf5fea6130bbaf664ebcac9dba01ce652106da Mon Sep 17 00:00:00 2001 From: redref Date: Thu, 2 Feb 2017 17:53:20 +0100 Subject: [PATCH 1/2] Fix python3 chart (_iter_dates) --- puppetboard/dailychart.py | 7 +++++-- test/test_app.py | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/puppetboard/dailychart.py b/puppetboard/dailychart.py index d5b893a..c32df9e 100644 --- a/puppetboard/dailychart.py +++ b/puppetboard/dailychart.py @@ -9,7 +9,7 @@ DATE_FORMAT = "%Y-%m-%d" DATETIME_FORMAT = "%Y-%m-%dT%H:%M:%S.%fZ" -def _iter_dates(days_number): +def _iter_dates(days_number, reverse=False): """Return a list of datetime pairs AB, BC, CD, ... that represent the 24hs time ranges of today (until this midnight) and the previous days. @@ -18,6 +18,9 @@ def _iter_dates(days_number): today = datetime.utcnow().replace(hour=0, minute=0, second=0, microsecond=0, tzinfo=UTC()) days_list = list(today + one_day * (1 - i) for i in range(days_number + 1)) + if reverse: + days_list.reverse() + return zip(days_list, days_list[1:]) return zip(days_list[1:], days_list) @@ -65,7 +68,7 @@ def get_daily_reports_chart(db, env, days_number, certname=None): the database will be considered. """ result = [] - for start, end in reversed(_iter_dates(days_number)): + for start, end in _iter_dates(days_number, reverse=True): query = _build_query( env=env, start=start.strftime(DATETIME_FORMAT), diff --git a/test/test_app.py b/test/test_app.py index 53241ef..80728c7 100644 --- a/test/test_app.py +++ b/test/test_app.py @@ -523,3 +523,26 @@ def test_json_report_ok(client, mocker, input_data): assert 'data' in result_json assert len(result_json['data']) == 100 + + +def test_json_daily_reports_chart_ok(client, mocker): + mock_puppetdb_environments(mocker) + mock_puppetdb_default_nodes(mocker) + + query_data = { + 'reports': [ + [{'status': 'changed', 'count': 1}] + for i in range(app.app.config['DAILY_REPORTS_CHART_DAYS']) + ] + } + + import logging + logging.error(query_data) + + dbquery = MockDbQuery(query_data) + + mocker.patch.object(app.puppetdb, '_query', side_effect=dbquery.get) + + rv = client.get('/daily_reports_chart.json') + + assert rv.status_code == 200 From 55756900c1a74fd3f937a792246eeeaaacd4f1ee Mon Sep 17 00:00:00 2001 From: Mike Terzo Date: Thu, 2 Feb 2017 20:51:34 -0500 Subject: [PATCH 2/2] Validate dailychart json data --- test/test_app.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/test/test_app.py b/test/test_app.py index 80728c7..088b95b 100644 --- a/test/test_app.py +++ b/test/test_app.py @@ -1,6 +1,7 @@ import pytest import json import os +from datetime import datetime from puppetboard import app from pypuppetdb.types import Node, Report from puppetboard import default_settings @@ -544,5 +545,16 @@ def test_json_daily_reports_chart_ok(client, mocker): mocker.patch.object(app.puppetdb, '_query', side_effect=dbquery.get) rv = client.get('/daily_reports_chart.json') + result_json = json.loads(rv.data.decode('utf-8')) + + assert 'result' in result_json + assert (len(result_json['result']) == + app.app.config['DAILY_REPORTS_CHART_DAYS']) + day_format = '%Y-%m-%d' + cur_day = datetime.strptime(result_json['result'][0]['day'], day_format) + for day in result_json['result'][1:]: + next_day = datetime.strptime(day['day'], day_format) + assert cur_day < next_day + cur_day = next_day assert rv.status_code == 200