# (c) cavaliba.com - test / FieldDatetime - input without seconds

"""
The edit form uses the native <input type="datetime-local"> picker. Even with
step="1" the browser may hide the seconds box (platform dependent), and a user
can always type "10:20" by hand - in both cases the POSTed value is
'YYYY-MM-DDThh:mm'.

Before "%Y-%m-%dT%H:%M" joined ACCEPTED_FORMATS, _normalize_datetime() returned
None for that and merge_request() silently wiped the field. These tests pin the
no-seconds variant: accepted, seconds defaulting to 00, and still rejecting the
genuinely malformed input around it.
"""

from django.test import RequestFactory, TestCase

from app_data.fieldtypes.field_datetime import FieldDatetime


class TestFieldDatetimeNoSeconds(TestCase):
    FIELDSCHEMA = {"dataformat": "datetime", "cardinal_max": 0}

    def field(self):
        """A fresh multi-valued FieldDatetime with no initial value."""
        return FieldDatetime(fieldname="dt", fieldschema=self.FIELDSCHEMA, alljson={})

    def test_merge_request_without_seconds_defaults_to_zero(self):
        f = self.field()
        request = RequestFactory().post("/", {"dt": "2026-01-15T10:20"})
        f.merge_request(request)
        self.assertEqual(f.value, ["2026-01-15 10:20:00"])

    def test_merge_request_with_seconds_still_keeps_them(self):
        f = self.field()
        request = RequestFactory().post("/", {"dt": "2026-01-15T10:20:30"})
        f.merge_request(request)
        self.assertEqual(f.value, ["2026-01-15 10:20:30"])

    def test_merge_import_without_seconds_defaults_to_zero(self):
        f = self.field()
        f.merge_import("2026-01-15T10:20")
        self.assertEqual(f.value, ["2026-01-15 10:20:00"])

    def test_is_valid_accepts_value_without_seconds(self):
        f = self.field()
        f.value = ["2026-01-15T10:20"]
        self.assertTrue(f.is_valid())

    def test_space_separator_without_seconds_is_still_rejected(self):
        # only the ISO 'T' form is accepted without seconds; the canonical
        # space-separated format keeps requiring hh:mm:ss
        f = self.field()
        f.merge_import("2026-01-15 10:20")
        self.assertEqual(f.value, [])

    def test_time_only_is_still_rejected(self):
        f = self.field()
        f.merge_import("10:20")
        self.assertEqual(f.value, [])

    def test_out_of_range_minutes_are_still_rejected(self):
        f = self.field()
        f.merge_import("2026-01-15T10:99")
        self.assertEqual(f.value, [])
