1 |
1 |
# -*- coding: utf-8 -*-
|
2 |
2 |
|
3 |
3 |
import datetime
|
|
4 |
import os
|
4 |
5 |
import pytest
|
5 |
6 |
import string
|
6 |
7 |
|
... | ... | |
11 |
12 |
|
12 |
13 |
from django.test import override_settings
|
13 |
14 |
from django.utils.timezone import now
|
14 |
|
from quixote import cleanup
|
|
15 |
|
|
16 |
from wcs.qommon.http_request import HTTPRequest
|
15 |
17 |
from wcs.qommon.substitution import CompatibilityNamesDict
|
16 |
18 |
from wcs.qommon.template import Template, TemplateError
|
17 |
19 |
from wcs.variables import LazyFormData
|
... | ... | |
21 |
23 |
from utilities import create_temporary_pub, clean_temporary_pub
|
22 |
24 |
|
23 |
25 |
|
24 |
|
def setup_module(module):
|
25 |
|
cleanup()
|
26 |
|
global pub
|
|
26 |
@pytest.fixture
|
|
27 |
def pub():
|
27 |
28 |
pub = create_temporary_pub()
|
28 |
29 |
pub.substitutions.feed(pub)
|
|
30 |
req = HTTPRequest(None, {'SCRIPT_NAME': '/', 'SERVER_NAME': 'example.net'})
|
|
31 |
pub.set_app_dir(req)
|
|
32 |
pub.site_options.set('options', 'working_day_calendar', '')
|
|
33 |
pub.site_options.write(open(os.path.join(pub.app_dir, 'site-options.cfg'), 'w'))
|
|
34 |
return pub
|
29 |
35 |
|
30 |
36 |
|
31 |
37 |
def teardown_module(module):
|
... | ... | |
73 |
79 |
assert tmpl.render({'foo': 'bar'}) == '[if-any foo][foo][endif]'
|
74 |
80 |
|
75 |
81 |
|
76 |
|
def test_now_and_today_variables():
|
|
82 |
def test_now_and_today_variables(pub):
|
77 |
83 |
# create a today string, verify it contains the year, at least
|
78 |
84 |
today = Template('{{d}}').render({'d': datetime.date.today()})
|
79 |
85 |
assert datetime.date.today().strftime('%Y') in today
|
... | ... | |
689 |
695 |
def test_datetime_in_past(value, expected):
|
690 |
696 |
t = Template('{{ value|datetime_in_past }}')
|
691 |
697 |
assert t.render({'value': value}) == str(expected)
|
|
698 |
|
|
699 |
|
|
700 |
def test_is_working_day_settings(settings, pub):
|
|
701 |
settings.WORKING_DAY_CALENDAR = None
|
|
702 |
t = Template('{{ value|is_working_day }}')
|
|
703 |
assert t.render({'value': '2020-07-15'}) == 'False'
|
|
704 |
t = Template('{{ value|is_working_day_with_saturday }}')
|
|
705 |
assert t.render({'value': '2020-07-15'}) == 'False'
|
|
706 |
|
|
707 |
settings.WORKING_DAY_CALENDAR = ''
|
|
708 |
t = Template('{{ value|is_working_day }}')
|
|
709 |
assert t.render({'value': '2020-07-15'}) == 'False'
|
|
710 |
t = Template('{{ value|is_working_day_with_saturday }}')
|
|
711 |
assert t.render({'value': '2020-07-15'}) == 'False'
|
|
712 |
|
|
713 |
settings.WORKING_DAY_CALENDAR = 'foobar'
|
|
714 |
t = Template('{{ value|is_working_day }}')
|
|
715 |
assert t.render({'value': '2020-07-15'}) == 'False'
|
|
716 |
t = Template('{{ value|is_working_day_with_saturday }}')
|
|
717 |
assert t.render({'value': '2020-07-15'}) == 'False'
|
|
718 |
|
|
719 |
settings.WORKING_DAY_CALENDAR = 'workalendar.europe.France'
|
|
720 |
t = Template('{{ value|is_working_day }}')
|
|
721 |
assert t.render({'value': '2020-07-15'}) == 'True'
|
|
722 |
t = Template('{{ value|is_working_day_with_saturday }}')
|
|
723 |
assert t.render({'value': '2020-07-15'}) == 'True'
|
|
724 |
|
|
725 |
pub.site_options.set('options', 'working_day_calendar', 'foobar')
|
|
726 |
pub.site_options.write(open(os.path.join(pub.app_dir, 'site-options.cfg'), 'w'))
|
|
727 |
t = Template('{{ value|is_working_day }}')
|
|
728 |
assert t.render({'value': '2020-07-15'}) == 'False'
|
|
729 |
t = Template('{{ value|is_working_day_with_saturday }}')
|
|
730 |
assert t.render({'value': '2020-07-15'}) == 'False'
|
|
731 |
|
|
732 |
settings.WORKING_DAY_CALENDAR = 'foobar'
|
|
733 |
pub.site_options.set('options', 'working_day_calendar', 'workalendar.europe.France')
|
|
734 |
pub.site_options.write(open(os.path.join(pub.app_dir, 'site-options.cfg'), 'w'))
|
|
735 |
t = Template('{{ value|is_working_day }}')
|
|
736 |
assert t.render({'value': '2020-07-15'}) == 'True'
|
|
737 |
t = Template('{{ value|is_working_day_with_saturday }}')
|
|
738 |
assert t.render({'value': '2020-07-15'}) == 'True'
|
|
739 |
|
|
740 |
|
|
741 |
@pytest.mark.parametrize('value, expected', [
|
|
742 |
(None, False),
|
|
743 |
('', False),
|
|
744 |
('foobar', False),
|
|
745 |
(42, False),
|
|
746 |
('2020-07-14T12:01:03', False),
|
|
747 |
('2020-07-15T12:01:03', True),
|
|
748 |
('2020-07-14 02:03', False),
|
|
749 |
('2020-07-15 02:03', True),
|
|
750 |
('14/07/2020 02h03', False),
|
|
751 |
('15/07/2020 02h03', True),
|
|
752 |
('2020-07-14', False),
|
|
753 |
('2020-07-15', True),
|
|
754 |
('14/07/2020', False),
|
|
755 |
('15/07/2020', True),
|
|
756 |
(datetime.datetime(2020, 7, 14, 12, 1, 3), False),
|
|
757 |
(datetime.datetime(2020, 7, 15, 12, 1, 3), True),
|
|
758 |
(datetime.date(2020, 7, 14), False),
|
|
759 |
(datetime.date(2020, 7, 15), True),
|
|
760 |
])
|
|
761 |
def test_is_working_day(settings, value, expected):
|
|
762 |
settings.WORKING_DAY_CALENDAR = 'workalendar.europe.France'
|
|
763 |
t = Template('{{ value|is_working_day }}')
|
|
764 |
assert t.render({'value': value}) == str(expected)
|
|
765 |
t = Template('{{ value|is_working_day_with_saturday }}')
|
|
766 |
assert t.render({'value': value}) == str(expected)
|
|
767 |
|
|
768 |
|
|
769 |
def test_is_working_day_weekend(settings):
|
|
770 |
settings.WORKING_DAY_CALENDAR = 'workalendar.europe.France'
|
|
771 |
# check saturday
|
|
772 |
t = Template('{{ value|is_working_day }}')
|
|
773 |
assert t.render({'value': '2020-06-20'}) == 'False'
|
|
774 |
t = Template('{{ value|is_working_day_with_saturday }}')
|
|
775 |
assert t.render({'value': '2020-06-20'}) == 'True'
|
|
776 |
# check sunday
|
|
777 |
t = Template('{{ value|is_working_day }}')
|
|
778 |
assert t.render({'value': '2020-06-21'}) == 'False'
|
|
779 |
t = Template('{{ value|is_working_day_with_saturday }}')
|
|
780 |
assert t.render({'value': '2020-06-21'}) == 'False'
|
|
781 |
|
|
782 |
|
|
783 |
def test_add_working_days_settings(settings, pub):
|
|
784 |
settings.WORKING_DAY_CALENDAR = None
|
|
785 |
t = Template('{{ value|add_working_days:1 }}')
|
|
786 |
assert t.render({'value': '2020-07-13'}) == ''
|
|
787 |
t = Template('{{ value|add_working_days_with_saturday:1 }}')
|
|
788 |
assert t.render({'value': '2020-07-13'}) == ''
|
|
789 |
|
|
790 |
settings.WORKING_DAY_CALENDAR = ''
|
|
791 |
t = Template('{{ value|add_working_days:1 }}')
|
|
792 |
assert t.render({'value': '2020-07-13'}) == ''
|
|
793 |
t = Template('{{ value|add_working_days_with_saturday:1 }}')
|
|
794 |
assert t.render({'value': '2020-07-13'}) == ''
|
|
795 |
|
|
796 |
settings.WORKING_DAY_CALENDAR = 'foobar'
|
|
797 |
t = Template('{{ value|add_working_days:1 }}')
|
|
798 |
assert t.render({'value': '2020-07-13'}) == ''
|
|
799 |
t = Template('{{ value|add_working_days_with_saturday:1 }}')
|
|
800 |
assert t.render({'value': '2020-07-13'}) == ''
|
|
801 |
|
|
802 |
settings.WORKING_DAY_CALENDAR = 'workalendar.europe.France'
|
|
803 |
t = Template('{{ value|add_working_days:1 }}')
|
|
804 |
assert t.render({'value': '2020-07-13'}) == '2020-07-15'
|
|
805 |
t = Template('{{ value|add_working_days_with_saturday:1 }}')
|
|
806 |
assert t.render({'value': '2020-07-13'}) == '2020-07-15'
|
|
807 |
|
|
808 |
pub.site_options.set('options', 'working_day_calendar', 'foobar')
|
|
809 |
pub.site_options.write(open(os.path.join(pub.app_dir, 'site-options.cfg'), 'w'))
|
|
810 |
t = Template('{{ value|add_working_days:1 }}')
|
|
811 |
assert t.render({'value': '2020-07-13'}) == ''
|
|
812 |
t = Template('{{ value|add_working_days_with_saturday:1 }}')
|
|
813 |
assert t.render({'value': '2020-07-13'}) == ''
|
|
814 |
|
|
815 |
settings.WORKING_DAY_CALENDAR = 'foobar'
|
|
816 |
pub.site_options.set('options', 'working_day_calendar', 'workalendar.europe.France')
|
|
817 |
pub.site_options.write(open(os.path.join(pub.app_dir, 'site-options.cfg'), 'w'))
|
|
818 |
t = Template('{{ value|add_working_days:1 }}')
|
|
819 |
assert t.render({'value': '2020-07-13'}) == '2020-07-15'
|
|
820 |
t = Template('{{ value|add_working_days_with_saturday:1 }}')
|
|
821 |
assert t.render({'value': '2020-07-13'}) == '2020-07-15'
|
|
822 |
|
|
823 |
|
|
824 |
def test_add_working_days_arg(settings):
|
|
825 |
settings.WORKING_DAY_CALENDAR = 'workalendar.europe.France'
|
|
826 |
t = Template('{{ value|add_working_days:"foobar" }}')
|
|
827 |
assert t.render({'value': '2020-07-13'}) == ''
|
|
828 |
t = Template('{{ value|add_working_days_with_saturday:"foobar" }}')
|
|
829 |
assert t.render({'value': '2020-07-13'}) == ''
|
|
830 |
t = Template('{{ value|add_working_days:2 }}')
|
|
831 |
assert t.render({'value': '2020-07-13'}) == '2020-07-16'
|
|
832 |
t = Template('{{ value|add_working_days_with_saturday:2 }}')
|
|
833 |
assert t.render({'value': '2020-07-13'}) == '2020-07-16'
|
|
834 |
|
|
835 |
|
|
836 |
@pytest.mark.parametrize('value, expected', [
|
|
837 |
(None, ''),
|
|
838 |
('', ''),
|
|
839 |
('foobar', ''),
|
|
840 |
(42, ''),
|
|
841 |
('2020-07-13T12:01:03', '2020-07-15'),
|
|
842 |
('2020-07-13 02:03', '2020-07-15'),
|
|
843 |
('13/07/2020 02h03', '2020-07-15'),
|
|
844 |
('2020-07-13', '2020-07-15'),
|
|
845 |
('13/07/2020', '2020-07-15'),
|
|
846 |
(datetime.datetime(2020, 7, 13, 12, 1, 3), '2020-07-15'),
|
|
847 |
(datetime.date(2020, 7, 13), '2020-07-15'),
|
|
848 |
])
|
|
849 |
def test_add_working_days(settings, value, expected):
|
|
850 |
settings.WORKING_DAY_CALENDAR = 'workalendar.europe.France'
|
|
851 |
t = Template('{{ value|add_working_days:1 }}')
|
|
852 |
assert t.render({'value': value}) == str(expected)
|
|
853 |
t = Template('{{ value|add_working_days_with_saturday:1 }}')
|
|
854 |
assert t.render({'value': value}) == str(expected)
|
|
855 |
|
|
856 |
|
|
857 |
def test_add_working_days_weekend(settings):
|
|
858 |
settings.WORKING_DAY_CALENDAR = 'workalendar.europe.France'
|
|
859 |
t = Template('{{ value|add_working_days:1 }}')
|
|
860 |
assert t.render({'value': '2020-06-19'}) == '2020-06-22'
|
|
861 |
t = Template('{{ value|add_working_days_with_saturday:1 }}')
|
|
862 |
assert t.render({'value': '2020-06-19'}) == '2020-06-20'
|
|
863 |
|
|
864 |
|
|
865 |
def test_adjust_to_working_day_settings(settings, pub):
|
|
866 |
settings.WORKING_DAY_CALENDAR = None
|
|
867 |
t = Template('{{ value|adjust_to_working_day }}')
|
|
868 |
assert t.render({'value': '2020-07-13'}) == ''
|
|
869 |
t = Template('{{ value|adjust_to_working_day_with_saturday }}')
|
|
870 |
assert t.render({'value': '2020-07-13'}) == ''
|
|
871 |
|
|
872 |
settings.WORKING_DAY_CALENDAR = ''
|
|
873 |
t = Template('{{ value|adjust_to_working_day }}')
|
|
874 |
assert t.render({'value': '2020-07-13'}) == ''
|
|
875 |
t = Template('{{ value|adjust_to_working_day_with_saturday }}')
|
|
876 |
assert t.render({'value': '2020-07-13'}) == ''
|
|
877 |
|
|
878 |
settings.WORKING_DAY_CALENDAR = 'foobar'
|
|
879 |
t = Template('{{ value|adjust_to_working_day }}')
|
|
880 |
assert t.render({'value': '2020-07-13'}) == ''
|
|
881 |
t = Template('{{ value|adjust_to_working_day_with_saturday }}')
|
|
882 |
assert t.render({'value': '2020-07-13'}) == ''
|
|
883 |
|
|
884 |
settings.WORKING_DAY_CALENDAR = 'workalendar.europe.France'
|
|
885 |
t = Template('{{ value|adjust_to_working_day }}')
|
|
886 |
assert t.render({'value': '2020-07-14'}) == '2020-07-15'
|
|
887 |
t = Template('{{ value|adjust_to_working_day_with_saturday }}')
|
|
888 |
assert t.render({'value': '2020-07-14'}) == '2020-07-15'
|
|
889 |
|
|
890 |
pub.site_options.set('options', 'working_day_calendar', 'foobar')
|
|
891 |
pub.site_options.write(open(os.path.join(pub.app_dir, 'site-options.cfg'), 'w'))
|
|
892 |
t = Template('{{ value|adjust_to_working_day }}')
|
|
893 |
assert t.render({'value': '2020-07-13'}) == ''
|
|
894 |
t = Template('{{ value|adjust_to_working_day_with_saturday }}')
|
|
895 |
assert t.render({'value': '2020-07-13'}) == ''
|
|
896 |
|
|
897 |
settings.WORKING_DAY_CALENDAR = 'foobar'
|
|
898 |
pub.site_options.set('options', 'working_day_calendar', 'workalendar.europe.France')
|
|
899 |
pub.site_options.write(open(os.path.join(pub.app_dir, 'site-options.cfg'), 'w'))
|
|
900 |
t = Template('{{ value|adjust_to_working_day }}')
|
|
901 |
assert t.render({'value': '2020-07-14'}) == '2020-07-15'
|
|
902 |
t = Template('{{ value|adjust_to_working_day_with_saturday }}')
|
|
903 |
assert t.render({'value': '2020-07-14'}) == '2020-07-15'
|
|
904 |
|
|
905 |
|
|
906 |
@pytest.mark.parametrize('value, expected', [
|
|
907 |
(None, ''),
|
|
908 |
('', ''),
|
|
909 |
('foobar', ''),
|
|
910 |
(42, ''),
|
|
911 |
('2020-07-14T12:01:03', '2020-07-15'),
|
|
912 |
('2020-07-14 02:03', '2020-07-15'),
|
|
913 |
('14/07/2020 02h03', '2020-07-15'),
|
|
914 |
('2020-07-14', '2020-07-15'),
|
|
915 |
('14/07/2020', '2020-07-15'),
|
|
916 |
(datetime.datetime(2020, 7, 14, 12, 1, 3), '2020-07-15'),
|
|
917 |
(datetime.date(2020, 7, 14), '2020-07-15'),
|
|
918 |
(datetime.date(2020, 7, 15), '2020-07-15'),
|
|
919 |
])
|
|
920 |
def test_adjust_to_working_day(settings, value, expected):
|
|
921 |
settings.WORKING_DAY_CALENDAR = 'workalendar.europe.France'
|
|
922 |
t = Template('{{ value|adjust_to_working_day }}')
|
|
923 |
assert t.render({'value': value}) == str(expected)
|
|
924 |
t = Template('{{ value|adjust_to_working_day_with_saturday }}')
|
|
925 |
assert t.render({'value': value}) == str(expected)
|
|
926 |
|
|
927 |
|
|
928 |
def test_adjust_to_working_day_weekend(settings):
|
|
929 |
settings.WORKING_DAY_CALENDAR = 'workalendar.europe.France'
|
|
930 |
t = Template('{{ value|adjust_to_working_day }}')
|
|
931 |
assert t.render({'value': '2020-06-20'}) == '2020-06-22'
|
|
932 |
t = Template('{{ value|adjust_to_working_day_with_saturday }}')
|
|
933 |
assert t.render({'value': '2020-06-20'}) == '2020-06-20'
|