Merge pull request #349 from redref/fix_dailychart

Fix dailychart in python3 + write a test for it
This commit is contained in:
Mike Terzo
2017-02-03 06:52:18 -05:00
committed by GitHub
2 changed files with 40 additions and 2 deletions

View File

@@ -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),

View File

@@ -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
@@ -523,3 +524,37 @@ 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')
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