From db9785e37f3a61df2689710ad0d9f5c8e455b116 Mon Sep 17 00:00:00 2001 From: nicolargo Date: Sun, 13 Oct 2024 16:28:28 +0200 Subject: [PATCH] Add unitary tests for pretty-date --- glances/globals.py | 19 +++++++++---------- unittest-core.py | 18 +++++++++++++++++- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/glances/globals.py b/glances/globals.py index e41c2e6d..d0d78ba6 100644 --- a/glances/globals.py +++ b/glances/globals.py @@ -275,19 +275,18 @@ def safe_makedirs(path): raise -def pretty_date(time=False): +def pretty_date(ref=False, now=datetime.now()): """ Get a datetime object or a int() Epoch timestamp and return a pretty string like 'an hour ago', 'Yesterday', '3 months ago', 'just now', etc Source: https://stackoverflow.com/questions/1551382/user-friendly-time-format-in-python """ - now = datetime.now() - if isinstance(time, int): - diff = now - datetime.fromtimestamp(time) - elif isinstance(time, datetime): - diff = now - time - elif not time: + if isinstance(ref, int): + diff = now - datetime.fromtimestamp(ref) + elif isinstance(ref, datetime): + diff = now - ref + elif not ref: diff = 0 second_diff = diff.seconds day_diff = diff.days @@ -313,10 +312,10 @@ def pretty_date(time=False): if day_diff < 7: return str(day_diff) + " days" if day_diff < 31: - return str(day_diff // 7) + " weeks" + return str(day_diff // 7) + " weeks" if (day_diff // 7) > 1 else "1 week" if day_diff < 365: - return str(day_diff // 30) + " months" - return str(day_diff // 365) + " years" + return str(day_diff // 30) + " months" if (day_diff // 30) > 1 else "1 month" + return str(day_diff // 365) + " years" if (day_diff // 365) > 1 else "1 year" def urlopen_auth(url, username, password): diff --git a/unittest-core.py b/unittest-core.py index 5ad9be94..47b03e1d 100755 --- a/unittest-core.py +++ b/unittest-core.py @@ -14,11 +14,12 @@ import functools import json import time import unittest +from datetime import datetime from glances import __version__ from glances.events_list import GlancesEventsList from glances.filter import GlancesFilter, GlancesFilterList -from glances.globals import LINUX, WINDOWS, string_value_to_float, subsample +from glances.globals import LINUX, WINDOWS, pretty_date, string_value_to_float, subsample from glances.main import GlancesMain from glances.outputs.glances_bars import Bar from glances.plugins.plugin.model import GlancesPluginModel @@ -561,6 +562,21 @@ class TestGlances(unittest.TestCase): self.assertTrue(gfl.is_filtered({'name': 'snake is in the place', 'username': 'nicolargo'})) self.assertFalse(gfl.is_filtered({'name': 'snake is in the place', 'username': 'notme'})) + def test_021_pretty_date(self): + """Test pretty_date""" + print('INFO: [TEST_021] pretty_date') + self.assertEqual(pretty_date(datetime(2024, 1, 1, 12, 0), datetime(2024, 1, 1, 12, 0)), 'just now') + self.assertEqual(pretty_date(datetime(2024, 1, 1, 11, 59), datetime(2024, 1, 1, 12, 0)), 'a min') + self.assertEqual(pretty_date(datetime(2024, 1, 1, 11, 55), datetime(2024, 1, 1, 12, 0)), '5 mins') + self.assertEqual(pretty_date(datetime(2024, 1, 1, 11, 0), datetime(2024, 1, 1, 12, 0)), 'an hour') + self.assertEqual(pretty_date(datetime(2024, 1, 1, 0, 0), datetime(2024, 1, 1, 12, 0)), '12 hours') + self.assertEqual(pretty_date(datetime(2023, 12, 20, 0, 0), datetime(2024, 1, 1, 12, 0)), '1 week') + self.assertEqual(pretty_date(datetime(2023, 12, 5, 0, 0), datetime(2024, 1, 1, 12, 0)), '3 weeks') + self.assertEqual(pretty_date(datetime(2023, 12, 1, 0, 0), datetime(2024, 1, 1, 12, 0)), '1 month') + self.assertEqual(pretty_date(datetime(2023, 6, 1, 0, 0), datetime(2024, 1, 1, 12, 0)), '7 months') + self.assertEqual(pretty_date(datetime(2023, 1, 1, 0, 0), datetime(2024, 1, 1, 12, 0)), '1 year') + self.assertEqual(pretty_date(datetime(2020, 1, 1, 0, 0), datetime(2024, 1, 1, 12, 0)), '4 years') + def test_094_thresholds(self): """Test thresholds classes""" print('INFO: [TEST_094] Thresholds')