factory/apps/wpm/tests/test_number_rule.py

65 lines
2.5 KiB
Python

from datetime import date
from types import SimpleNamespace
from unittest.mock import MagicMock, patch
from django.test import SimpleTestCase
from apps.wpm.views import MlogbInViewSet
class GenNumberWithRuleFilterTests(SimpleTestCase):
def test_date_filters_follow_rule_placeholders(self):
cases = [
("SN-{n_count:04d}", {}),
("{c_year}-{n_count:04d}", {"year": 2026}),
("{c_year2}-{n_count:04d}", {"year": 2026}),
("{c_month:02d}-{n_count:04d}", {"month": 8}),
("{c_day:02d}-{n_count:04d}", {"day": 4}),
(
"{c_year}{c_month:02d}{c_day:02d}-{n_count:04d}",
{"year": 2026, "month": 8, "day": 4},
),
]
material = SimpleNamespace(model=None)
mlog = SimpleNamespace(
handle_date=date(2026, 8, 4),
mgroup=SimpleNamespace(process=SimpleNamespace(id=123)),
)
for rule, expected_dates in cases:
with self.subTest(rule=rule):
queryset = MagicMock()
queryset.annotate.return_value = queryset
queryset.order_by.return_value = queryset
queryset.last.return_value = None
with patch("apps.wpmw.models.Wpr.objects.filter", return_value=queryset) as mock_filter:
MlogbInViewSet.gen_number_with_rule(rule, material, mlog)
filters = mock_filter.call_args.kwargs
date_prefix = "wpr_mlogbw__mlogb__mlog__handle_date__"
actual_dates = {
key.removeprefix(date_prefix): value
for key, value in filters.items()
if key.startswith(date_prefix)
}
self.assertEqual(actual_dates, expected_dates)
def test_escaped_date_placeholder_text_does_not_add_filter(self):
queryset = MagicMock()
queryset.annotate.return_value = queryset
queryset.order_by.return_value = queryset
queryset.last.return_value = None
material = SimpleNamespace(model=None)
mlog = SimpleNamespace(
handle_date=date(2026, 8, 4),
mgroup=SimpleNamespace(process=SimpleNamespace(id=123)),
)
with patch("apps.wpmw.models.Wpr.objects.filter", return_value=queryset) as mock_filter:
MlogbInViewSet.gen_number_with_rule("{{c_year}}-{n_count:04d}", material, mlog)
self.assertFalse(
any("handle_date" in key for key in mock_filter.call_args.kwargs)
)