The license.txt file has been replaced with LICENSE for quite a while now. INAL but it didn't seem accurate to say "hey, checkout license.txt although there's no such file". Apart from this, there were inconsistencies in the headers altogether...this change brings consistency.
131 lines
4.4 KiB
Python
131 lines
4.4 KiB
Python
# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
|
|
# License: MIT. See LICENSE
|
|
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)
|