Просмотр исходного кода

test: Added unit tests for format_timedelta, parse_timedelta,

json_handler
version-14
Gavin D'souza 3 лет назад
Родитель
Сommit
4990a59c48
1 измененных файлов: 64 добавлений и 4 удалений
  1. +64
    -4
      frappe/tests/test_utils.py

+ 64
- 4
frappe/tests/test_utils.py Просмотреть файл

@@ -1,11 +1,14 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors
# License: MIT. See LICENSE # License: MIT. See LICENSE
from decimal import Decimal
from enum import Enum
import unittest import unittest
import frappe import frappe


from frappe.utils import evaluate_filters, money_in_words, scrub_urls, get_url from frappe.utils import evaluate_filters, money_in_words, scrub_urls, get_url
from frappe.utils import validate_url, validate_email_address from frappe.utils import validate_url, validate_email_address
from frappe.utils import ceil, floor from frappe.utils import ceil, floor
from frappe.utils import format_timedelta, parse_timedelta
from frappe.utils.data import cast, validate_python_code from frappe.utils.data import cast, validate_python_code
from frappe.utils.diff import get_version_diff, version_query, _get_value_from_version from frappe.utils.diff import get_version_diff, version_query, _get_value_from_version


@@ -13,10 +16,12 @@ from PIL import Image
from frappe.utils.image import strip_exif_data, optimize_image from frappe.utils.image import strip_exif_data, optimize_image
import io import io
from mimetypes import guess_type from mimetypes import guess_type
from datetime import datetime, timedelta, date
from datetime import datetime, time, timedelta, date


from unittest.mock import patch from unittest.mock import patch


import pytz

class TestFilters(unittest.TestCase): class TestFilters(unittest.TestCase):
def test_simple_dict(self): def test_simple_dict(self):
self.assertTrue(evaluate_filters({'doctype': 'User', 'status': 'Open'}, {'status': 'Open'})) self.assertTrue(evaluate_filters({'doctype': 'User', 'status': 'Open'}, {'status': 'Open'}))
@@ -275,7 +280,6 @@ class TestPythonExpressions(unittest.TestCase):




class TestDiffUtils(unittest.TestCase): class TestDiffUtils(unittest.TestCase):

@classmethod @classmethod
def setUpClass(cls): def setUpClass(cls):
cls.doc = frappe.get_doc(doctype="Client Script", dt="Client Script") cls.doc = frappe.get_doc(doctype="Client Script", dt="Client Script")
@@ -328,4 +332,60 @@ class TestDateUtils(unittest.TestCase):
self.assertEqual(frappe.utils.get_last_day_of_week("2020-12-24"), self.assertEqual(frappe.utils.get_last_day_of_week("2020-12-24"),
frappe.utils.getdate("2020-12-26")) frappe.utils.getdate("2020-12-26"))
self.assertEqual(frappe.utils.get_last_day_of_week("2020-12-28"), self.assertEqual(frappe.utils.get_last_day_of_week("2020-12-28"),
frappe.utils.getdate("2021-01-02"))
frappe.utils.getdate("2021-01-02"))


class TestResponse(unittest.TestCase):
def test_json_handler(self):
import json
from frappe.utils.response import json_handler

class TEST(Enum):
ABC = "!@)@)!"
BCE = "ENJD"

GOOD_OBJECT = {
"time_types": [
date(year=2020, month=12, day=2),
datetime(year=2020, month=12, day=2, hour=23, minute=23, second=23, microsecond=23, tzinfo=pytz.utc),
time(hour=23, minute=23, second=23, microsecond=23, tzinfo=pytz.utc),
timedelta(days=10, hours=12, minutes=120, seconds=10),
],
"float": [
Decimal(29.21),
],
"doc": [
frappe.get_doc("System Settings"),
],
"iter": [
{1, 2, 3},
(1, 2, 3),
"abcdef",
],
"string": "abcdef"
}

BAD_OBJECT = {"Enum": TEST}

processed_object = json.loads(json.dumps(GOOD_OBJECT, default=json_handler))

self.assertTrue(all([isinstance(x, str) for x in processed_object["time_types"]]))
self.assertTrue(all([isinstance(x, float) for x in processed_object["float"]]))
self.assertTrue(all([isinstance(x, (list, str)) for x in processed_object["iter"]]))
self.assertIsInstance(processed_object["string"], str)
with self.assertRaises(TypeError):
json.dumps(BAD_OBJECT, default=json_handler)

class TestTimeDeltaUtils(unittest.TestCase):
def test_format_timedelta(self):
self.assertEqual(format_timedelta(timedelta(seconds=0)), "0:00:00")
self.assertEqual(format_timedelta(timedelta(hours=10)), "10:00:00")
self.assertEqual(format_timedelta(timedelta(hours=100)), "100:00:00")
self.assertEqual(format_timedelta(timedelta(seconds=100, microseconds=129)), "0:01:40.000129")
self.assertEqual(format_timedelta(timedelta(seconds=100, microseconds=12212199129)), "3:25:12.199129")

def test_parse_timedelta(self):
self.assertEqual(parse_timedelta("0:0:0"), timedelta(seconds=0))
self.assertEqual(parse_timedelta("10:0:0"), timedelta(hours=10))
self.assertEqual(parse_timedelta("7 days, 0:32:18.192221"), timedelta(days=7, seconds=1938, microseconds=192221))
self.assertEqual(parse_timedelta("7 days, 0:32:18"), timedelta(days=7, seconds=1938))

Загрузка…
Отмена
Сохранить