# (c) cavaliba.com - tests / data / field text yaml validation

from django.test import TestCase

from app_data.fieldtypes.field_text import FieldText


class TestFieldTextYamlValid(TestCase):
    FIELDSCHEMA = {
        "dataformat": "text",
        "dataformat_ext": "yaml",
        "cardinal_min": 0,
        "cardinal_max": 1,
    }

    def test_valid_yaml_passes(self):
        f = FieldText(
            fieldname="content",
            fieldschema=self.FIELDSCHEMA,
            alljson={"content": ["columns:\n  - keyname"]},
        )
        self.assertTrue(f.is_valid())
        self.assertEqual(f.errors, [])

    def test_empty_string_passes(self):
        f = FieldText(fieldname="content", fieldschema=self.FIELDSCHEMA, alljson={"content": [""]})
        self.assertTrue(f.is_valid())

    def test_invalid_yaml_syntax_fails(self):
        f = FieldText(
            fieldname="content",
            fieldschema=self.FIELDSCHEMA,
            alljson={"content": ["columns: [a, b"]},
        )
        self.assertFalse(f.is_valid())
        self.assertEqual(len(f.errors), 1)
        self.assertIn("invalid YAML syntax", f.errors[0])

    def test_non_yaml_dataformat_ext_skips_check(self):
        fieldschema = {**self.FIELDSCHEMA, "dataformat_ext": ""}
        f = FieldText(
            fieldname="content", fieldschema=fieldschema, alljson={"content": ["columns: [a, b"]}
        )
        self.assertTrue(f.is_valid())
        self.assertEqual(f.errors, [])
