# (c) cavaliba.com - tests / dataview get_csv_fieldnames: real source names, no identity forced

from django.test import TestCase

import app_home.cache as cache
from app_data.dataview import DataView
from tests import helper


class TestDataViewGetCsvFieldnames(TestCase):
    def setUp(self):
        cache.clear()
        helper.add_schema(
            classname="csvpassthrough",
            field_definition={
                "keep_me": {"dataformat": "string", "displayname": "Keep Me"},
                "drop_me": {"dataformat": "string", "displayname": "Drop Me"},
            },
        )
        helper.add_instance(
            classname="_dataview",
            keyname="csvpassthrough_plain",
            fields={
                "target_class": "csvpassthrough",
                "content": "columns:\n  - keep_me\n  - drop_me\n",
            },
        )
        helper.add_instance(
            classname="_dataview",
            keyname="csvpassthrough_renamed",
            fields={
                "target_class": "csvpassthrough",
                "content": "columns:\n  - Kept:\n      from: keep_me\n  - Kept again:\n      from: keep_me\n",
            },
        )
        helper.add_instance(
            classname="_dataview",
            keyname="csvpassthrough_no_identity",
            fields={
                "target_class": "csvpassthrough",
                "content": "columns:\n  - keep_me\n",
            },
        )

    def test_real_fieldnames_no_labels(self):
        dataview = DataView(keyname="csvpassthrough_renamed")
        fieldnames = dataview.get_csv_fieldnames()
        self.assertEqual(fieldnames, ["keep_me"])
        self.assertNotIn("Kept", fieldnames)
        self.assertNotIn("Kept again", fieldnames)

    def test_duplicate_source_deduplicated(self):
        dataview = DataView(keyname="csvpassthrough_renamed")
        fieldnames = dataview.get_csv_fieldnames()
        self.assertEqual(len(fieldnames), 1)

    def test_no_forced_classname_or_keyname(self):
        dataview = DataView(keyname="csvpassthrough_no_identity")
        fieldnames = dataview.get_csv_fieldnames()
        self.assertEqual(fieldnames, ["keep_me"])
        self.assertNotIn("classname", fieldnames)
        self.assertNotIn("keyname", fieldnames)
