# (c) cavaliba.com - tests / views_importer - split_multivalue (^) checkbox

from django.core.files.uploadedfile import SimpleUploadedFile
from django.test import TestCase, override_settings
from django.urls import reverse

import app_home.cache as cache
from app_data.data import Instance
from tests import helper

CSV_CARET_CELL = "classname,keyname,tags\nmvtest,row1,a^b^c\n"


@override_settings(CAVALIBA_AUTH_MODE="unittest")
class ViewImporterMultivalueTest(TestCase):
    """split_multivalue was never wired through the Import Tool view before
    this change - no_multi was CSV-loader-only. These are genuinely new
    end-to-end assertions."""

    def setUp(self):
        cache.clear()
        helper.add_admin_user(login="unittest")
        helper.add_schema(
            classname="mvtest",
            field_definition={
                "tags": {"dataformat": "string", "displayname": "Tags", "cardinal_max": 0},
            },
        )

    def _post(self, extra=None):
        data = {
            "file": SimpleUploadedFile(
                "data.csv", CSV_CARET_CELL.encode("utf-8"), content_type="text/csv"
            ),
            "pipeline": "",
            "encoding": "utf-8",
            "separator": ",",
            "submit": "import",
        }
        if extra:
            data.update(extra)
        return self.client.post(reverse("app_data:data_import"), data, follow=True)

    def test_checked_splits_caret_cell(self):
        self._post({"split_multivalue": "on"})
        instance = Instance.from_keyname(classname="mvtest", keyname="row1", expand=False)
        self.assertEqual(instance.fields["tags"].value, ["a", "b", "c"])

    def test_unchecked_keeps_literal_string(self):
        # An unchecked checkbox sends no value at all in a real browser POST.
        self._post()
        instance = Instance.from_keyname(classname="mvtest", keyname="row1", expand=False)
        self.assertNotEqual(instance.fields["tags"].value, ["a", "b", "c"])
