seitime-frappe/frappe/tests/test_fmt_datetime.py
2021-05-05 13:15:52 +05:30

133 lines
4.4 KiB
Python

# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
# MIT License. See license.txt
from __future__ import unicode_literals
import datetime
import frappe
from frappe.utils import (
getdate, get_datetime, get_time,
get_user_date_format, get_user_time_format,
formatdate, format_datetime, format_time)
import unittest
test_date_obj = datetime.datetime.now()
test_date = test_date_obj.strftime('%Y-%m-%d')
test_time = test_date_obj.strftime('%H:%M:%S.%f')
test_datetime = test_date_obj.strftime('%Y-%m-%d %H:%M:%S.%f')
test_date_formats = {
'yyyy-mm-dd': test_date_obj.strftime('%Y-%m-%d'),
'dd-mm-yyyy': test_date_obj.strftime('%d-%m-%Y'),
'dd/mm/yyyy': test_date_obj.strftime('%d/%m/%Y'),
'dd.mm.yyyy': test_date_obj.strftime('%d.%m.%Y'),
'mm/dd/yyyy': test_date_obj.strftime('%m/%d/%Y'),
'mm-dd-yyyy': test_date_obj.strftime('%m-%d-%Y')}
test_time_formats = {
'HH:mm:ss': test_date_obj.strftime('%H:%M:%S'),
'HH:mm': test_date_obj.strftime('%H:%M')}
class TestFmtDatetime(unittest.TestCase):
"""Tests date, time and datetime formatters and some associated
utility functions. These rely on the system-wide date and time
formats.
"""
# Set up and tidy up routines
def setUp(self):
# create test domain
self.pre_test_date_format = frappe.db.get_default("date_format")
self.pre_test_time_format = frappe.db.get_default("time_format")
def tearDown(self):
frappe.db.set_default("date_format", self.pre_test_date_format)
frappe.db.set_default("time_format", self.pre_test_time_format)
frappe.local.user_date_format = None
frappe.local.user_time_format = None
frappe.db.rollback()
# Test utility functions
def test_set_default_date_format(self):
frappe.db.set_default("date_format", "ZYX321")
self.assertEqual(frappe.db.get_default("date_format"), "ZYX321")
def test_set_default_time_format(self):
frappe.db.set_default("time_format", "XYZ123")
self.assertEqual(frappe.db.get_default("time_format"), "XYZ123")
def test_get_functions(self):
# Test round-trip through getdate, get_datetime and get_time
self.assertEqual(test_date_obj, get_datetime(test_datetime))
self.assertEqual(test_date_obj.date(), getdate(test_date))
self.assertEqual(test_date_obj.time(), get_time(test_time))
# Test date formatters
def test_formatdate_forced(self):
# Test with forced date formats
self.assertEqual(
formatdate(test_date, 'dd-yyyy-mm'),
test_date_obj.strftime('%d-%Y-%m'))
self.assertEqual(
formatdate(test_date, 'dd-yyyy-MM'),
test_date_obj.strftime('%d-%Y-%m'))
def test_formatdate_forced_broken_locale(self):
# Test with forced date formats
lang = frappe.local.lang
# Force fallback from Babel
try:
frappe.local.lang = 'FAKE'
self.assertEqual(
formatdate(test_date, 'dd-yyyy-mm'),
test_date_obj.strftime('%d-%Y-%m'))
self.assertEqual(
formatdate(test_date, 'dd-yyyy-MM'),
test_date_obj.strftime('%d-%Y-%m'))
finally:
frappe.local.lang = lang
def test_format_date(self):
# Test formatdate with various default date formats set
for fmt, valid_fmt in test_date_formats.items():
frappe.db.set_default("date_format", fmt)
frappe.local.user_date_format = None
self.assertEqual(get_user_date_format(), fmt)
self.assertEqual(formatdate(test_date), valid_fmt)
# Test time formatters
def test_format_time_forced(self):
# Test with forced time formats
self.assertEqual(
format_time(test_time, 'ss:mm:HH'),
test_date_obj.strftime('%S:%M:%H'))
def test_format_time(self):
# Test format_time with various default time formats set
for fmt, valid_fmt in test_time_formats.items():
frappe.db.set_default("time_format", fmt)
frappe.local.user_time_format = None
self.assertEqual(get_user_time_format(), fmt)
self.assertEqual(format_time(test_time), valid_fmt)
# Test datetime formatters
def test_format_datetime_forced(self):
# Test with forced date formats
self.assertEqual(
format_datetime(test_datetime, 'dd-yyyy-MM ss:mm:HH'),
test_date_obj.strftime('%d-%Y-%m %S:%M:%H'))
def test_format_datetime(self):
# Test formatdate with various default date formats set
for date_fmt, valid_date in test_date_formats.items():
frappe.db.set_default("date_format", date_fmt)
frappe.local.user_date_format = None
for time_fmt, valid_time in test_time_formats.items():
frappe.db.set_default("time_format", time_fmt)
frappe.local.user_time_format = None
valid_fmt = valid_date + ' ' + valid_time
self.assertEqual(
format_datetime(test_datetime), valid_fmt)